Posted to tcl by steve at Wed Oct 29 04:14:53 GMT 2014view raw
- // Compile with: valac --pkg aries --pkg posix trees.gs
- uses Aries
- // some constants
- const sw : int = 256
- const sh : int = 180
- const fs : int = 0 // not full-screen
- const zf : int = 3 // accel zoom-factor of 3x
- const pane_w : int = 80
- const pane_h : int = 100
- init
- // Almost all aries projects will use at least one layer.
- layer : Layer
- // a scratchpad frame we use to load and convert the images from disk
- f : Frame
- // the sprites, and a color key for the bear
- glass, bear : Sprite
- // a buffer to hold the pixel displacement data for the pane of glass
- pane : array of int16[,,]
- // the bear sprite's position
- bx, by : int
- // Let's begin!
- Aries.init()
- layer = Layer()
- layer.set_sorting(1)
- // Now, we're going to create the stained glass effect by combining two sprites:
- // a color-adjustment sprite to give the glass some color, and a displacement
- // sprite to give it the fuzzy, mottled look. First we'll create a
- // displacement map for the fuzzy effect, by making a list of small random
- // pixel displacement values, which will comprise the displacement sprite.
- pane = new array of int16[pane_w, pane_h, 2]
- for i:int = 0 to (pane_w-1)
- for j:int = 0 to (pane_h-1)
- pane[i, j, 0] = (int16)Random.int_range(-3, 3);
- pane[i, j, 1] = (int16)Random.int_range(-3, 3);
- // Then we'll load the colored pane of glass, and add the displacement effect to it.
- f = new Frame.from_disk("images/window.png")
- f.convert(Frame_type.LT, null)
- glass = new Sprite
- glass.add_frame( f.copy() )
- glass.add_subframe( 0, new Frame(Frame_type.DISPL, pane_w, pane_h, pane, null).copy() )
- // Place the pane of glass and add it to our layer's spritelist.
- glass.set_position(100, 20)
- glass.set_z_hint(10)
- layer.get_sprite_list().add(glass)
- // And last, load the bear sprite, and set a color key to make
- // sure that the magenta background is made transparent.
- bear = new Sprite
- bear.add_frame( new Frame.from_disk("images/bear.png").copy() )
- layer.get_sprite_list().add(bear)
- // open the graphics display
- Graphics.open(Graphics_mode.ON, sw, sh, fs, zf)
- // initialize the bear position and enter the main loop
- bx = 0;
- by = 0;
- while true
- // the input result
- io : Input_res
- Io.fetch(0, out io)
- // Update the sprite position.
- bx += io.hat[0].x
- by += io.hat[0].y
- bear.set_position(bx, by)
- // display the frame and run the delay loop
- Render.display()
- Clock.wait(50);
- // quit on escape keypress
- if io.esc == 1 || Io.has_quit() == 1
- Posix.exit(0)