Scroll to observing entity.

This commit is contained in:
Steve 2018-03-02 22:21:45 +00:00
parent 7a79ef4b53
commit f634a28127
5 changed files with 52 additions and 27 deletions

View File

@ -140,6 +140,7 @@ enum
#define EF_KILL_OFFSCREEN (2 << 15) #define EF_KILL_OFFSCREEN (2 << 15)
#define EF_ALWAYS_PROCESS (2 << 16) #define EF_ALWAYS_PROCESS (2 << 16)
#define EF_NO_TELEPORT (2 << 17) #define EF_NO_TELEPORT (2 << 17)
#define EF_NO_OBSERVE (2 << 18)
#define GRAVITY_POWER 0.5f #define GRAVITY_POWER 0.5f
#define FRICTION 0.75f #define FRICTION 0.75f

View File

@ -134,7 +134,6 @@ struct Entity {
int isOnGround; int isOnGround;
int isVisible; int isVisible;
int isMissionTarget; int isMissionTarget;
int observationTime;
Entity *riding; Entity *riding;
Entity *owner; Entity *owner;
unsigned long flags; unsigned long flags;

View File

@ -170,8 +170,6 @@ void doEntities(void)
} }
self->tick(); self->tick();
self->observationTime = limit(self->observationTime - 1, 0, FPS * 5);
self->isOnGround = 0; self->isOnGround = 0;

View File

@ -376,7 +376,7 @@ static void doWorldInProgress(void)
if (world.observationTimer > 0) if (world.observationTimer > 0)
{ {
if (--world.observationTimer == FPS * 1.5) if (--world.observationTimer == FPS)
{ {
world.entityToTrack = world.entitiesToObserve[0]; world.entityToTrack = world.entitiesToObserve[0];
@ -435,35 +435,58 @@ static void handleWidgets(void)
static void doWorldObserving(void) static void doWorldObserving(void)
{ {
int i; int tx, ty;
float diffX, diffY;
cameraTrack(world.entityToTrack); tx = world.entityToTrack->x - (SCREEN_WIDTH / 2);
ty = world.entityToTrack->y - (SCREEN_HEIGHT / 2);
doEntitiesStatic(); doEntitiesStatic();
if (--world.observationTimer == 0) diffX = abs(camera.x - tx) / 20;
diffY = abs(camera.y - ty) / 20;
diffX = MAX(3, MIN(50, diffX));
diffY = MAX(3, MIN(50, diffY));
if (camera.x > tx)
{ {
if (++observationIndex < MAX_ENTS_TO_OBSERVE && world.entitiesToObserve[observationIndex] != NULL) camera.x -= diffX;
{ }
world.entityToTrack = world.entitiesToObserve[observationIndex];
world.observationTimer = FPS * 1.5; if (camera.x < tx)
} {
else camera.x += diffX;
}
if (camera.y > ty)
{
camera.y -= diffY;
}
if (camera.y < ty)
{
camera.y += diffY;
}
if (collision(camera.x, camera.y, MAP_TILE_SIZE, MAP_TILE_SIZE, tx, ty, MAP_TILE_SIZE, MAP_TILE_SIZE))
{
if (--world.observationTimer <= 0)
{ {
for (i = 0 ; i < MAX_ENTS_TO_OBSERVE ; i++) if (++observationIndex < MAX_ENTS_TO_OBSERVE && world.entitiesToObserve[observationIndex] != NULL)
{ {
if (world.entitiesToObserve[i] != NULL) world.entityToTrack = world.entitiesToObserve[observationIndex];
{
world.entitiesToObserve[i]->observationTime = FPS * 5;
}
}
memset(world.entitiesToObserve, 0, sizeof(Entity*) * MAX_ENTS_TO_OBSERVE);
world.entityToTrack = (Entity*)world.bob;
world.state = WS_IN_PROGRESS;
observationIndex = 0; world.observationTimer = FPS;
}
else
{
memset(world.entitiesToObserve, 0, sizeof(Entity*) * MAX_ENTS_TO_OBSERVE);
world.entityToTrack = (Entity*)world.bob;
world.state = WS_IN_PROGRESS;
observationIndex = 0;
}
} }
} }
} }
@ -695,15 +718,17 @@ static int canAdd(Unit *u, int mx, int my)
void observeActivation(Entity *e) void observeActivation(Entity *e)
{ {
int i; int i;
if (e->observationTime == 0 && !isOnScreen(e)) if (!isOnScreen(e) && (!(e->flags & EF_NO_OBSERVE)))
{ {
e->flags |= EF_NO_OBSERVE;
for (i = 0 ; i < MAX_ENTS_TO_OBSERVE ; i++) for (i = 0 ; i < MAX_ENTS_TO_OBSERVE ; i++)
{ {
if (world.entitiesToObserve[i] == NULL) if (world.entitiesToObserve[i] == NULL)
{ {
world.entitiesToObserve[i] = e; world.entitiesToObserve[i] = e;
world.observationTimer = FPS * 2; world.observationTimer = FPS * 1.5;
return; return;
} }
else if (getDistance(e->x, e->y, world.entitiesToObserve[i]->x, world.entitiesToObserve[i]->y) < SCREEN_HEIGHT - 50) else if (getDistance(e->x, e->y, world.entitiesToObserve[i]->x, world.entitiesToObserve[i]->y) < SCREEN_HEIGHT - 50)

View File

@ -114,8 +114,10 @@ extern int rrnd(int low, int high);
extern void showWidgetGroup(char *group); extern void showWidgetGroup(char *group);
extern void startSectionTransition(void); extern void startSectionTransition(void);
extern void stopMusic(void); extern void stopMusic(void);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern App app; extern App app;
extern Camera camera;
extern Colors colors; extern Colors colors;
extern Dev dev; extern Dev dev;
extern Entity *self; extern Entity *self;