mirror of
https://gitlab.com/drummyfish/anarch.git
synced 2024-12-22 15:28:49 -05:00
Let AI shoot
This commit is contained in:
parent
a2a528bf6f
commit
f700bc4cf9
78
main.c
78
main.c
@ -1066,6 +1066,23 @@ void SFG_playerRotateWeapon(uint8_t next)
|
|||||||
SFG_player.weapon %= 3;
|
SFG_player.weapon %= 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Adds new projectile to the current level, return 1 if added, 0 if not (max
|
||||||
|
count reached).
|
||||||
|
*/
|
||||||
|
uint8_t SFG_createProjectile(SFG_ProjectileRecord projectile)
|
||||||
|
{
|
||||||
|
if (SFG_currentLevel.projectileRecordCount >= SFG_MAX_PROJECTILES)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
SFG_currentLevel.projectileRecords[SFG_currentLevel.projectileRecordCount] =
|
||||||
|
projectile;
|
||||||
|
|
||||||
|
SFG_currentLevel.projectileRecordCount++;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void SFG_monsterPerformAI(SFG_MonsterRecord *monster)
|
void SFG_monsterPerformAI(SFG_MonsterRecord *monster)
|
||||||
{
|
{
|
||||||
uint8_t state = monster->stateType & SFG_MONSTER_MASK_STATE;
|
uint8_t state = monster->stateType & SFG_MONSTER_MASK_STATE;
|
||||||
@ -1079,8 +1096,46 @@ void SFG_monsterPerformAI(SFG_MonsterRecord *monster)
|
|||||||
if (SFG_random() < SFG_AI_RANDOM_CHANGE_PROBABILITY)
|
if (SFG_random() < SFG_AI_RANDOM_CHANGE_PROBABILITY)
|
||||||
{
|
{
|
||||||
// sometimes randomly change state
|
// sometimes randomly change state
|
||||||
state = (SFG_random() % 4 == 0) ?
|
|
||||||
SFG_MONSTER_STATE_IDLE : SFG_MONSTER_STATE_ATTACKING;
|
if (SFG_random() % 4 != 0)
|
||||||
|
{
|
||||||
|
// attack
|
||||||
|
|
||||||
|
state = SFG_MONSTER_STATE_ATTACKING;
|
||||||
|
|
||||||
|
SFG_ProjectileRecord p;
|
||||||
|
|
||||||
|
p.type = SFG_PROJECTILE_FIREBALL;
|
||||||
|
p.doubleFramesToLive = 255;
|
||||||
|
p.position[0] = SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[0]);
|
||||||
|
p.position[1] = SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[1]);
|
||||||
|
p.position[2] =
|
||||||
|
SFG_floorHeightAt(
|
||||||
|
SFG_MONSTER_COORD_TO_SQUARES(monster->coords[0]),
|
||||||
|
SFG_MONSTER_COORD_TO_SQUARES(monster->coords[1])
|
||||||
|
) + RCL_UNITS_PER_SQUARE / 2;
|
||||||
|
|
||||||
|
//RCL_Vector2D dir = RCL_angleToDirection(SFG_player.camera.direction);
|
||||||
|
|
||||||
|
RCL_Vector2D dir;
|
||||||
|
|
||||||
|
dir.x = SFG_player.camera.position.x - p.position[0];
|
||||||
|
dir.y = SFG_player.camera.position.y - p.position[1];
|
||||||
|
|
||||||
|
dir = RCL_normalize(dir);
|
||||||
|
|
||||||
|
p.direction[0] = (dir.x * SFG_ROCKER_MOVE_UNITS_PER_FRAME) / RCL_UNITS_PER_SQUARE;
|
||||||
|
p.direction[1] = (dir.y * SFG_ROCKER_MOVE_UNITS_PER_FRAME) / RCL_UNITS_PER_SQUARE;
|
||||||
|
p.direction[2] = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SFG_createProjectile(p);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
state = SFG_MONSTER_STATE_IDLE;
|
||||||
}
|
}
|
||||||
else if (state == SFG_MONSTER_STATE_IDLE)
|
else if (state == SFG_MONSTER_STATE_IDLE)
|
||||||
{
|
{
|
||||||
@ -1159,23 +1214,6 @@ void SFG_monsterPerformAI(SFG_MonsterRecord *monster)
|
|||||||
monster->coords[1] = newPos[1];;
|
monster->coords[1] = newPos[1];;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Adds new projectile to the current level, return 1 if added, 0 if not (max
|
|
||||||
count reached).
|
|
||||||
*/
|
|
||||||
uint8_t SFG_createProjectile(SFG_ProjectileRecord projectile)
|
|
||||||
{
|
|
||||||
if (SFG_currentLevel.projectileRecordCount >= SFG_MAX_PROJECTILES)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
SFG_currentLevel.projectileRecords[SFG_currentLevel.projectileRecordCount] =
|
|
||||||
projectile;
|
|
||||||
|
|
||||||
SFG_currentLevel.projectileRecordCount++;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Pushes a given position away from a center by given distance, with collisions.
|
Pushes a given position away from a center by given distance, with collisions.
|
||||||
*/
|
*/
|
||||||
@ -1690,7 +1728,7 @@ SFG_createProjectile(p);
|
|||||||
0)
|
0)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
eliminate = 1;
|
// eliminate = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user