|
Bouncing demo - Source CodeScript demonstrating the possibilities of Rebol's compositing engine. |
|
REBOL [
title: "bouncing demo"
author: cyphre@seznam.cz
]
site: http://www.rebol.net/plugin/demos/bouncing-demo
scr-size: 640x480
boing: does [make face [
st-oft: offset: random scr-size
al: random 255
alx: (random 10) + 10
edge: none
color: none
image: load-thru/binary rejoin [site "/" 0 random 8 ".png"]
size: image/size
down?: true
effect: compose [key 0.255.0 alphamul (al)]
rate: 0
fp: false
speed: random 6x1
mass: (random 70000) + 30000
feel: make feel [
engage: func [f a e][
bound: f/parent-face/size - f/size
if e/type = 'time [
al: al + alx
if any [al > 255 al < 0] [f/alx: negate f/alx]
dist: max (f/parent-face/size/y - f/offset/y) * 1.5 1
grav: to-integer (f/mass / (dist * dist))
either f/down? [
tmp-y: f/offset/y + f/speed/y + grav
][
tmp-y: (f/offset/y + f/speed/y) - grav
if all [grav < 1 f/offset/y < f/st-oft/y] [f/speed/y: 1 f/down?: true]
]
if tmp-y > bound/y [f/speed/y: -1 tmp-y: bound/y f/down?: false]
if tmp-y < 0 [f/speed/y: 1 tmp-y: 0 f/down?: true]
if f/offset/x > bound/x [f/offset/x: bound/x f/speed: to-pair reduce [negate f/speed/x random 6] f/down?: true]
if f/offset/x < 0 [f/offset/x: 0 f/speed: to-pair reduce [negate f/speed/x random 6] f/down?: true]
effect: compose [key 0.255.0 alphamul (al)]
f/offset: to-pair reduce [f/offset/x + speed/x tmp-y]
show f
]
]
]
]
]
reb: boing
reb/image: logo.gif
reb/size: reb/image/size
view lay: layout [
origin 0x0
b1: box scr-size black
at(scr-size / 3 * 0x1 * 2)
box scr-size - (scr-size / 3 * 0x1 * 2) with [
image: to-image make face [
edge: none
size: scr-size - (scr-size / 3 * 0x1 * 2)
effect: [gradient 0x1 0.0.0 126.0.126]
]
feel: none
effect: none
]
at 0x0
sensor scr-size with [
feel: none
pane: reduce join array/initial 30 'boing [reb]
]
] |