init
This commit is contained in:
parent
ab73e04b32
commit
0b905f2690
26 changed files with 1210 additions and 0 deletions
70
src/enemies.h
Normal file
70
src/enemies.h
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
void spawnEnemy(u8 type){
|
||||
s16 i = -1;
|
||||
for(s16 j = 0; j < ENEMY_COUNT; j++) if(!enemies[j].active && i == -1) i = j;
|
||||
if(i > -1){
|
||||
enemies[i].active = TRUE;
|
||||
enemies[i].type = type;
|
||||
enemies[i].pos.x = FIX32(64);
|
||||
enemies[i].pos.y = FIX32(64);
|
||||
enemies[i].off = 16;
|
||||
enemies[i].image = SPR_addSprite(&butterflySprite,
|
||||
getScreenX(enemies[i].pos.x, player.camera) - enemies[i].off, fix32ToInt(enemies[i].pos.y) - enemies[i].off, TILE_ATTR(gameOver ? PAL1 : PAL0, 0, 0, 0));
|
||||
enemies[i].angle = 128;
|
||||
enemies[i].speed = FIX32(0.25);
|
||||
enemies[i].vel.x = fix32Mul(fix16ToFix32(cosFix16(enemies[i].angle)), enemies[i].speed);
|
||||
enemies[i].vel.y = fix32Mul(fix16ToFix32(sinFix16(enemies[i].angle)), enemies[i].speed);
|
||||
}
|
||||
}
|
||||
|
||||
static void boundsEnemy(u8 i){
|
||||
if(enemies[i].pos.y >= GAME_H_F - FIX32(enemies[i].off) || enemies[i].pos.y <= FIX32(enemies[i].off))
|
||||
enemies[i].vel.y *= -1;
|
||||
|
||||
if(enemies[i].pos.x >= GAME_WRAP){
|
||||
enemies[i].pos.x -= GAME_WRAP;
|
||||
}
|
||||
if(enemies[i].pos.x < 0){
|
||||
enemies[i].pos.x += GAME_WRAP;
|
||||
}
|
||||
}
|
||||
|
||||
static void updateEnemy(u8 i){
|
||||
boundsEnemy(i);
|
||||
enemies[i].pos.x += enemies[i].vel.x;
|
||||
enemies[i].pos.y += enemies[i].vel.y;
|
||||
|
||||
s16 sx = getScreenX(enemies[i].pos.x, player.camera);
|
||||
s16 sy = fix32ToInt(enemies[i].pos.y);
|
||||
|
||||
fix32 dx = getWrappedDelta(enemies[i].pos.x, player.pos.x);
|
||||
bool onScreen = (dx >= FIX32(-256) && dx <= FIX32(256));
|
||||
SPR_setVisibility(enemies[i].image, onScreen ? VISIBLE : HIDDEN);
|
||||
|
||||
SPR_setPosition(enemies[i].image, sx - enemies[i].off, sy - enemies[i].off);
|
||||
enemyCount++;
|
||||
}
|
||||
|
||||
void updateEnemies(){
|
||||
enemyCount = 0;
|
||||
for(s16 i = 0; i < ENEMY_COUNT; i++) if(enemies[i].active)
|
||||
updateEnemy(i);
|
||||
intToStr(enemyCount, debugStr, 1);
|
||||
}
|
||||
|
||||
void spawnEnemyAt(u8 type, fix32 x, fix32 y){
|
||||
s16 i = -1;
|
||||
for(s16 j = 0; j < ENEMY_COUNT; j++) if(!enemies[j].active && i == -1) i = j;
|
||||
if(i > -1){
|
||||
enemies[i].active = TRUE;
|
||||
enemies[i].type = type;
|
||||
enemies[i].pos.x = x;
|
||||
enemies[i].pos.y = y;
|
||||
enemies[i].off = 16;
|
||||
enemies[i].image = SPR_addSprite(&butterflySprite,
|
||||
getScreenX(enemies[i].pos.x, player.camera) - enemies[i].off, fix32ToInt(enemies[i].pos.y) - enemies[i].off, TILE_ATTR(gameOver ? PAL1 : PAL0, 0, 0, 0));
|
||||
enemies[i].angle = 128;
|
||||
enemies[i].speed = FIX32(2);
|
||||
enemies[i].vel.x = fix32Mul(fix16ToFix32(cosFix16(enemies[i].angle)), enemies[i].speed);
|
||||
enemies[i].vel.y = fix32Mul(fix16ToFix32(sinFix16(enemies[i].angle)), enemies[i].speed);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue