mirror of
https://gitlab.com/drummyfish/anarch.git
synced 2024-12-22 07:18:49 -05:00
Start pushing away
This commit is contained in:
parent
e5b662468e
commit
b1dd065bcd
61
main.c
61
main.c
@ -1148,6 +1148,49 @@ uint8_t SFG_createProjectile(SFG_ProjectileRecord projectile)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Pushes a given position away from a center by given distance, with collisions.
|
||||||
|
*/
|
||||||
|
RCL_Vector2D SFG_pushAway(
|
||||||
|
RCL_Unit pos[3],
|
||||||
|
RCL_Vector2D center,
|
||||||
|
RCL_Unit preferredDirection,
|
||||||
|
RCL_Unit distance)
|
||||||
|
{
|
||||||
|
RCL_Vector2D fromCenter;
|
||||||
|
|
||||||
|
fromCenter.x = pos[0] - center.x;
|
||||||
|
fromCenter.y = pos[1] - center.y;
|
||||||
|
|
||||||
|
if (fromCenter.x == 0 && fromCenter.y == 0)
|
||||||
|
fromCenter = RCL_angleToDirection(preferredDirection);
|
||||||
|
|
||||||
|
RCL_Unit l = RCL_len(fromCenter);
|
||||||
|
|
||||||
|
if (l >= distance)
|
||||||
|
return;
|
||||||
|
|
||||||
|
RCL_Vector2D offset;
|
||||||
|
|
||||||
|
offset.x = (fromCenter.x * distance) / l;
|
||||||
|
offset.y = (fromCenter.y * distance) / l;
|
||||||
|
|
||||||
|
RCL_Camera c;
|
||||||
|
|
||||||
|
RCL_initCamera(&c);
|
||||||
|
|
||||||
|
c.position.x = pos[0];
|
||||||
|
c.position.y = pos[1];
|
||||||
|
c.height = pos[2];
|
||||||
|
|
||||||
|
RCL_moveCameraWithCollision(&c,offset,0,SFG_floorHeightAt,
|
||||||
|
SFG_ceilingHeightAt,1,1);
|
||||||
|
|
||||||
|
pos[0] = c.position.x;
|
||||||
|
pos[1] = c.position.y;
|
||||||
|
pos[2] = c.height;
|
||||||
|
}
|
||||||
|
|
||||||
void SFG_createExplosion(RCL_Unit x, RCL_Unit y, RCL_Unit z)
|
void SFG_createExplosion(RCL_Unit x, RCL_Unit y, RCL_Unit z)
|
||||||
{
|
{
|
||||||
SFG_LOG("creating explostion");
|
SFG_LOG("creating explostion");
|
||||||
@ -1167,6 +1210,24 @@ void SFG_createExplosion(RCL_Unit x, RCL_Unit y, RCL_Unit z)
|
|||||||
explostion.doubleFramesToLive = SFG_EXPLOSION_DURATION_DOUBLE_FRAMES;
|
explostion.doubleFramesToLive = SFG_EXPLOSION_DURATION_DOUBLE_FRAMES;
|
||||||
|
|
||||||
SFG_createProjectile(explostion);
|
SFG_createProjectile(explostion);
|
||||||
|
|
||||||
|
RCL_Unit p[3];
|
||||||
|
|
||||||
|
p[0] = SFG_player.camera.position.x;
|
||||||
|
p[1] = SFG_player.camera.position.y;
|
||||||
|
p[2] = SFG_player.camera.height;
|
||||||
|
|
||||||
|
RCL_Vector2D center;
|
||||||
|
|
||||||
|
center.x = x;
|
||||||
|
center.y = y;
|
||||||
|
|
||||||
|
SFG_pushAway(p,center,
|
||||||
|
SFG_player.camera.direction - RCL_UNITS_PER_SQUARE / 2, 2 * RCL_UNITS_PER_SQUARE);
|
||||||
|
|
||||||
|
SFG_player.camera.position.x = p[0];
|
||||||
|
SFG_player.camera.position.y = p[1];
|
||||||
|
SFG_player.camera.height = p[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user