Skip to content

Commit

Permalink
Added grid movement
Browse files Browse the repository at this point in the history
  • Loading branch information
britown88 committed Nov 8, 2015
1 parent 9cd4938 commit ea938bb
Show file tree
Hide file tree
Showing 8 changed files with 128 additions and 6 deletions.
1 change: 1 addition & 0 deletions BTGame/BT.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ void _initEntitySystem(BTGame *self){
RegisterManager(self->managers.cursorManager, createCursorManager(&self->view));
RegisterManager(self->managers.gridManager, createGridManager(&self->view));
RegisterManager(self->managers.interpolationManager, createInterpolationManager(&self->view));
RegisterManager(self->managers.gridMovementManager, createGridMovementManager(&self->view));
}

void _destroyEntitySystem(BTGame *self){
Expand Down
1 change: 1 addition & 0 deletions BTGame/BTGame.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="GridManager.c" />
<ClCompile Include="GridMovementManager.c" />
<ClCompile Include="InterpolationManager.c" />
<ClCompile Include="LightGrid.c" />
<ClCompile Include="WorldState.c" />
Expand Down
3 changes: 3 additions & 0 deletions BTGame/BTGame.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -92,5 +92,8 @@
<ClCompile Include="InterpolationManager.c">
<Filter>Source Files\Managers</Filter>
</ClCompile>
<ClCompile Include="GridMovementManager.c">
<Filter>Source Files\Managers</Filter>
</ClCompile>
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion BTGame/CoreComponents.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ typedef struct {

typedef struct {
int destX, destY;
Seconds time;
Milliseconds time;
}InterpolationComponent;

#define ComponentT InterpolationComponent
Expand Down
103 changes: 103 additions & 0 deletions BTGame/GridMovementManager.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
#include "Managers.h"
#include "Entities/Entities.h"
#include "CoreComponents.h"
#include "GridManager.h"
#include "WorldView.h"

#pragma pack(push, 1)
typedef struct {
short destX, destY;
short nextX, nextY;
}TGridMovingComponent;
#pragma pack(pop)

#define TComponentT TGridMovingComponent
#include "Entities\ComponentDeclTransient.h"

struct GridMovementManager_t {
Manager m;
WorldView *view;
};

ImplManagerVTable(GridMovementManager)

GridMovementManager *createGridMovementManager(WorldView *view) {
GridMovementManager *out = checkedCalloc(1, sizeof(GridMovementManager));
out->view = view;
out->m.vTable = CreateManagerVTable(GridMovementManager);
return out;
}

void _destroy(GridMovementManager *self) {
checkedFree(self);
}
void _onDestroy(GridMovementManager *self, Entity *e) {}
void _onUpdate(GridMovementManager *self, Entity *e) {}

static void _stepMovement(Entity *e) {
GridComponent *gc = entityGet(GridComponent)(e);
TGridMovingComponent *tgc = entityGet(TGridMovingComponent)(e);
int dx = 0, dy = 0;

//we're there
if (gc->x == tgc->destX && gc->y == tgc->destY) {
entityRemove(TGridMovingComponent)(e);
return;
}

if (gc->x != tgc->destX) {
dx = gc->x < tgc->destX ? 1 : -1;
}
else {
dy = gc->y < tgc->destY ? 1 : -1;
}

tgc->nextX = gc->x + dx;
tgc->nextY = gc->y + dy;

COMPONENT_ADD(e, InterpolationComponent,
.destX = tgc->nextX * GRID_CELL_SIZE,
.destY = tgc->nextY * GRID_CELL_SIZE,
.time = 250);

entityUpdate(e);
}

static void _updateGridMovement(GridMovementManager *self, Entity *e) {
//GridComponent *gc = entityGet(GridComponent)(e);
PositionComponent *pc = entityGet(PositionComponent)(e);
InterpolationComponent *ic = entityGet(InterpolationComponent)(e);
TGridMovingComponent *tgc = entityGet(TGridMovingComponent)(e);

if (ic) {
//still moving
return;
}

COMPONENT_LOCK(GridComponent, gc, e, {
gc->x = tgc->nextX;
gc->y = tgc->nextY;
});

_stepMovement(e);
}

void gridMovementManagerUpdate(GridMovementManager *self) {
COMPONENT_QUERY(self->view->entitySystem, TGridMovingComponent, tgc, {
_updateGridMovement(self, componentGetParent(tgc, self->view->entitySystem));
});
}

void gridMovementManagerMoveEntity(GridMovementManager *self, Entity *e, short x, short y) {
TGridMovingComponent *tgc = entityGet(TGridMovingComponent)(e);

if (tgc) {
tgc->destX = x;
tgc->destY = y;
}
else {
COMPONENT_ADD(e, TGridMovingComponent, x, y, 0, 0);
_stepMovement(e);

}
}
2 changes: 1 addition & 1 deletion BTGame/InterpolationManager.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ void _updateEntity(InterpolationManager *self, Entity *e, Milliseconds time) {
PositionComponent *pc = entityGet(PositionComponent)(e);

if (ic && pc) {
double m = (time - tic->startTime) / (double)t_s2m(ic->time);
double m = (time - tic->startTime) / (double)ic->time;
if (m > 1.0) {
m = 1.0;
vecPushBack(EntityPtr)(self->removeList, &e);
Expand Down
7 changes: 7 additions & 0 deletions BTGame/Managers.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@ typedef struct RenderManager_t RenderManager;
typedef struct CursorManager_t CursorManager;
typedef struct GridManager_t GridManager;
typedef struct InterpolationManager_t InterpolationManager;
typedef struct GridMovementManager_t GridMovementManager;

typedef struct Frame_t Frame;
typedef struct WorldView_t WorldView;
typedef struct Entity_t Entity;

typedef struct BTManagers_t {
RenderManager *renderManager;
CursorManager *cursorManager;
GridManager *gridManager;
InterpolationManager *interpolationManager;
GridMovementManager *gridMovementManager;
}BTManagers;

RenderManager *createRenderManager(WorldView *view, double *fps);
Expand All @@ -28,5 +31,9 @@ void cursorManagerUpdate(CursorManager *self, int x, int y);
InterpolationManager *createInterpolationManager(WorldView *view);
void interpolationManagerUpdate(InterpolationManager *self);

GridMovementManager *createGridMovementManager(WorldView *view);
void gridMovementManagerUpdate(GridMovementManager *self);
void gridMovementManagerMoveEntity(GridMovementManager *self, Entity *e, short x, short y);



15 changes: 11 additions & 4 deletions BTGame/WorldState.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

typedef struct {
WorldView *view;
Entity *mouseLight;
Entity *mouseLight, *moveTest;
}WorldState;

static void _boardStateDestroy(WorldState *self){
Expand All @@ -44,6 +44,7 @@ void _boardUpdate(WorldState *state, GameStateUpdate *m){

cursorManagerUpdate(managers->cursorManager, mousePos.x, mousePos.y);
interpolationManagerUpdate(managers->interpolationManager);
gridMovementManagerUpdate(managers->gridMovementManager);
}

static Int2 testlinepos = { 0, 0 };
Expand Down Expand Up @@ -144,9 +145,13 @@ static void _handleMouse(WorldState *state){
});

if (mouseIsDown(mouse, SegaMouseBtn_Right)) {
PositionComponent *pc = entityGet(PositionComponent)(state->mouseLight);
int x = pc->x / GRID_CELL_SIZE, y = pc->y / GRID_CELL_SIZE;
gridManagerSetTileSchema(state->view->managers->gridManager, x, y, 7);
//PositionComponent *pc = entityGet(PositionComponent)(state->mouseLight);
//int x = pc->x / GRID_CELL_SIZE, y = pc->y / GRID_CELL_SIZE;
//gridManagerSetTileSchema(state->view->managers->gridManager, x, y, 7);

gridMovementManagerMoveEntity(state->view->managers->gridMovementManager, state->moveTest,
(pos.x - vp->region.origin_x + vp->worldPos.x) / GRID_CELL_SIZE,
(pos.y - vp->region.origin_y + vp->worldPos.y) / GRID_CELL_SIZE);
}

//vp->worldPos.x = pos.x - vp->region.origin_x - (vp->region.width / 2);
Expand Down Expand Up @@ -210,6 +215,8 @@ static void _addTestEntities(WorldState *state) {

entityUpdate(e);

state->moveTest = e;

//e = entityCreate(view->entitySystem);
//COMPONENT_ADD(e, PositionComponent, 0, 0);
//COMPONENT_ADD(e, ImageComponent, stringIntern("assets/img/dotagrid.ega"));
Expand Down

0 comments on commit ea938bb

Please sign in to comment.