palette animation experiments
- Posted by Jacques Deschenes <desja at QUEBECTEL.COM> Dec 21, 1996
- 1805 views
--=====================_851168125==_ Whoops, forgot to attach pal_anim.ex --=====================_851168125==_ -- some experiments in palette animation. -- December 21th, 1996 include graphics.e -- check library ref. and didn't find it. function get_palette() sequence Pal object junk Pal = repeat({0,0,0},64) junk = Pal[1] for i = 1 to 64 do junk = palette(i-1,junk) if atom(junk) then all_palette(Pal[1..i-1]) return Pal[1..i-1] else Pal[i] = junk end if end for all_palette(Pal) -- restore it. return Pal end function -- get_palette() procedure delay(atom t) atom s s = time() while time()-s < t do end while end procedure -- draw a thick line ellipse procedure ThickEllipse(integer color, -- color of ellipse integer ThickNess, -- thickness of the line sequence ul, -- up left corner sequence dr -- down right corner ) for i = 0 to ThickNess - 1 do ellipse(color,0,{ul[1]+i,ul[2]+i},{dr[1]-i,dr[2]-i}) end for end procedure sequence SavePalette, RotatePal object junk junk = graphics_mode(256) -- 640X480, 256 colors SavePalette = get_palette() -- TEST 1 range scanning -- affecting same palette to many entries and scanning a second color in -- that range sequence tmp,wave RotatePal = SavePalette RotatePal[4] = RotatePal[8] junk = palette(3,RotatePal[8]) wave = RotatePal[16] RotatePal[5] = RotatePal[8] junk = palette(4,RotatePal[8]) tmp = RotatePal[8] for i = 1 to length(SavePalette) do -- draw palette polygon(i,1,{{10*i,0},{10+10*i,0},{10+10*i,10},{10*i,10}}) end for position(3,1) puts(1,"TEST 1: animation by range scanning.\n") puts(1,"Press a key for next experiment.") for i = 0 to 15 do ThickEllipse(2+remainder(i,3),8,{319-8*i,239-8*i},{321+8*i,241+8*i}) end for while get_key() = -1 do for i = 3 to 5 do junk = palette(i-1,wave) delay(.2) junk = palette(i-1,tmp) end for end while -- TEST 2 rotating a range -- rotating a range of entries in a loop -- rotating colors 16 to 31 (gray scale) -- twinning palette entries so that same colors can be fixed and animated at the -- same time. ( windows 95 opening banner trick) clear_screen() position(2,1) puts(1," fixed twin animated twin\n") puts(1,"Animation by palette rotation.\n") puts(1,"Press a key to end.") RotatePal = SavePalette RotatePal[1..16] = RotatePal[17..32] all_palette(RotatePal) for i = 0 to 15 do polygon(i,1,{{10*i,0},{10+10*i,0},{10+10*i,10},{10*i,10}})--fixed colors bar polygon(16+i,1,{{10*(16+i),0},{10+10*(16+i),0}, -- animated colors bar {10+10*(16+i),10},{10*(16+i),10}}) ThickEllipse(16+i,8,{319-8*i,239-8*i},{321+8*i,241+8*i}) -- animated circles end for while get_key() = -1 do for l = 1 to 16 do -- rotate one way thrue tmp = RotatePal[17] for i = 17 to 31 do RotatePal[i] = RotatePal[i+1] end for RotatePal[32] = tmp all_palette(RotatePal) delay(.06) end for for l = 1 to 16 do -- rotate the other way thrue tmp = RotatePal[32] for i = 32 to 18 by -1 do RotatePal[i] = RotatePal[i-1] end for RotatePal[17] = tmp all_palette(RotatePal) delay(.06) end for end while --------------------- all_palette(SavePalette) junk = graphics_mode(-1) --=====================_851168125==_ Jacques Deschenes Baie-Comeau, Quebec Canada desja at quebectel.com --=====================_851168125==_--