mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-12-28 01:29:44 +00:00
Added rotate example
This commit is contained in:
parent
ead3fe7eb8
commit
0a25830de9
BIN
src/test/kc/examples/rotate/balloon.png
Normal file
BIN
src/test/kc/examples/rotate/balloon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
92
src/test/kc/examples/rotate/rotate.kc
Normal file
92
src/test/kc/examples/rotate/rotate.kc
Normal file
@ -0,0 +1,92 @@
|
||||
|
||||
// Angles: sf[0.8] : $80=PI, $100 = 2*PI
|
||||
// Values: sin(x) in [-1;1] sf[0.16] : -1.0: -$7fff 1.0:$7fff
|
||||
|
||||
import "c64"
|
||||
import "fastmultiply"
|
||||
|
||||
byte* SCREEN = $0400;
|
||||
byte* SPRITE = $3000;
|
||||
|
||||
byte* COS_LO = $2000;
|
||||
byte* COS_HI = $2200;
|
||||
byte* SIN_LO = COS_LO+$40; // sin(x) = cos(x+PI/2)
|
||||
byte* SIN_HI = COS_HI+$40; // sin(x) = cos(x+PI/2)
|
||||
|
||||
void main() {
|
||||
asm { sei }
|
||||
init();
|
||||
anim();
|
||||
}
|
||||
|
||||
void init() {
|
||||
mulf_init();
|
||||
*SPRITES_ENABLE = %11111111;
|
||||
byte* sprites_ptr = SCREEN+$3f8;
|
||||
byte spr_x = 60;
|
||||
for(byte i: 0..7) {
|
||||
byte i2 = i<<1;
|
||||
sprites_ptr[i] = (byte)(SPRITE/$40);
|
||||
SPRITES_XPOS[i2] = spr_x;
|
||||
SPRITES_YPOS[i2] = spr_x;
|
||||
SPRITES_COLS[i] = GREEN;
|
||||
spr_x += 24;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void anim() {
|
||||
signed word min = 1000;
|
||||
signed word max = -1000;
|
||||
|
||||
byte angle = 0;
|
||||
signed word x = 89; // signed fixed[15.0]
|
||||
signed word y = 0;
|
||||
|
||||
while(true) {
|
||||
while(*RASTER!=$ff) {}
|
||||
(*BORDERCOL)++;
|
||||
signed word sin_a = (signed word) { SIN_HI[angle], SIN_LO[angle] }; // signed fixed[0.15]
|
||||
signed word cos_a = (signed word) { COS_HI[angle], COS_LO[angle] }; // signed fixed[0.15]
|
||||
signed dword xr = mulf16s(cos_a, x)<<1 - mulf16s(sin_a, y)<<1; // signed fixed[16.16]
|
||||
signed dword yr = mulf16s(cos_a, y)<<1 + mulf16s(sin_a, x)<<1; // signed fixed[16.16]
|
||||
signed word xpos = ((signed word) >xr) + 89 + 24 + 60;
|
||||
signed word ypos = ((signed word) >yr) + 89 + 51;
|
||||
SPRITES_XPOS[0] = <xpos;
|
||||
*SPRITES_XMSB = >xpos;
|
||||
SPRITES_YPOS[0] = <ypos;
|
||||
angle++;
|
||||
(*BORDERCOL)--;
|
||||
}
|
||||
}
|
||||
|
||||
kickasm(pc COS_LO) {{
|
||||
{
|
||||
.var min = -$7fff
|
||||
.var max = $7fff
|
||||
.var ampl = max-min;
|
||||
.for(var i=0;i<$140;i++) {
|
||||
.var rad = i*2*PI/256;
|
||||
.byte <round(min+(ampl/2)+(ampl/2)*cos(rad))
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
||||
kickasm(pc COS_HI) {{
|
||||
{
|
||||
.var min = -$7fff
|
||||
.var max = $7fff
|
||||
.var ampl = max-min;
|
||||
.for(var i=0;i<$140;i++) {
|
||||
.var rad = i*2*PI/256;
|
||||
.byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
||||
kickasm(pc SPRITE, resource "balloon.png") {{
|
||||
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
|
||||
.for (var y=0; y<21; y++)
|
||||
.for (var x=0;x<3; x++)
|
||||
.byte pic.getSinglecolorByte(x,y)
|
||||
}}
|
Loading…
Reference in New Issue
Block a user