WIP converting to separate states. Don't think I want this.
This commit is contained in:
@@ -14,7 +14,7 @@
|
|||||||
#define ACTOR_STATE_MOVING_RIGHT 1 << 8 // 256
|
#define ACTOR_STATE_MOVING_RIGHT 1 << 8 // 256
|
||||||
#define ACTOR_STATE_MOVING_UP 1 << 9 // 512
|
#define ACTOR_STATE_MOVING_UP 1 << 9 // 512
|
||||||
#define ACTOR_STATE_MOVING_DOWN 1 << 10 // 1024
|
#define ACTOR_STATE_MOVING_DOWN 1 << 10 // 1024
|
||||||
#define ACTOR_STATE_UNDEFINED_11 1 << 11 // 2048
|
#define ACTOR_STATE_MOVING 1 << 11 // 2048
|
||||||
#define ACTOR_STATE_UNDEFINED_12 1 << 12 // 4096
|
#define ACTOR_STATE_UNDEFINED_12 1 << 12 // 4096
|
||||||
#define ACTOR_STATE_UNDEFINED_13 1 << 13 // 8192
|
#define ACTOR_STATE_UNDEFINED_13 1 << 13 // 8192
|
||||||
#define ACTOR_STATE_UNDEFINED_14 1 << 14 // 16384
|
#define ACTOR_STATE_UNDEFINED_14 1 << 14 // 16384
|
||||||
@@ -54,7 +54,8 @@ typedef struct actor {
|
|||||||
int layer;
|
int layer;
|
||||||
b2BodyId physicsId;
|
b2BodyId physicsId;
|
||||||
b2Polygon physicsBox;
|
b2Polygon physicsBox;
|
||||||
int state;
|
int logicstate;
|
||||||
|
int visualstate;
|
||||||
bool movement_controls_face;
|
bool movement_controls_face;
|
||||||
void *actorData;
|
void *actorData;
|
||||||
bool visible;
|
bool visible;
|
||||||
|
|||||||
@@ -58,15 +58,15 @@ ErrorContext *actor_automatic_face(actor *obj)
|
|||||||
ATTEMPT {
|
ATTEMPT {
|
||||||
if ( obj->movement_controls_face == true ) {
|
if ( obj->movement_controls_face == true ) {
|
||||||
// TODO : This doesn't really work properly
|
// TODO : This doesn't really work properly
|
||||||
BITMASK_DEL(obj->state, ACTOR_STATE_FACE_ALL);
|
BITMASK_DEL(obj->visualstate, ACTOR_STATE_FACE_ALL);
|
||||||
if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_LEFT) ) {
|
if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_LEFT) ) {
|
||||||
BITMASK_ADD(obj->state, ACTOR_STATE_FACE_LEFT);
|
BITMASK_ADD(obj->visualstate, ACTOR_STATE_FACE_LEFT);
|
||||||
} else if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_RIGHT) ) {
|
} else if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_RIGHT) ) {
|
||||||
BITMASK_ADD(obj->state, ACTOR_STATE_FACE_RIGHT);
|
BITMASK_ADD(obj->visualstate, ACTOR_STATE_FACE_RIGHT);
|
||||||
} else if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_UP) ) {
|
} else if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_UP) ) {
|
||||||
BITMASK_ADD(obj->state, ACTOR_STATE_FACE_UP);
|
BITMASK_ADD(obj->visualstate, ACTOR_STATE_FACE_UP);
|
||||||
} else if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_DOWN) ) {
|
} else if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_DOWN) ) {
|
||||||
BITMASK_ADD(obj->state, ACTOR_STATE_FACE_DOWN);
|
BITMASK_ADD(obj->visualstate, ACTOR_STATE_FACE_DOWN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} CLEANUP {
|
} CLEANUP {
|
||||||
@@ -115,16 +115,16 @@ ErrorContext *actor_logic_movement(actor *obj, SDL_Time curtimems)
|
|||||||
PREPARE_ERROR(errctx);
|
PREPARE_ERROR(errctx);
|
||||||
FAIL_ZERO_RETURN(errctx, obj, ERR_NULLPOINTER, "Null actor reference");
|
FAIL_ZERO_RETURN(errctx, obj, ERR_NULLPOINTER, "Null actor reference");
|
||||||
ATTEMPT {
|
ATTEMPT {
|
||||||
if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_LEFT) ) {
|
if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_LEFT) ) {
|
||||||
obj->x -= obj->basechar->vx;
|
obj->x -= obj->basechar->vx;
|
||||||
}
|
}
|
||||||
if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_RIGHT) ) {
|
if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_RIGHT) ) {
|
||||||
obj->x += obj->basechar->vx;
|
obj->x += obj->basechar->vx;
|
||||||
}
|
}
|
||||||
if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_UP) ) {
|
if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_UP) ) {
|
||||||
obj->y -= obj->basechar->vy;
|
obj->y -= obj->basechar->vy;
|
||||||
}
|
}
|
||||||
if ( BITMASK_HAS(obj->state, ACTOR_STATE_MOVING_DOWN) ) {
|
if ( BITMASK_HAS(obj->logicstate, ACTOR_STATE_MOVING_DOWN) ) {
|
||||||
obj->y += obj->basechar->vy;
|
obj->y += obj->basechar->vy;
|
||||||
}
|
}
|
||||||
obj->logictimer = curtimems;
|
obj->logictimer = curtimems;
|
||||||
@@ -157,7 +157,7 @@ ErrorContext *actor_update(actor *obj)
|
|||||||
} FINISH(errctx, false);
|
} FINISH(errctx, false);
|
||||||
|
|
||||||
ATTEMPT {
|
ATTEMPT {
|
||||||
CATCH(errctx, character_sprite_get(obj->basechar, obj->state, &curSprite));
|
CATCH(errctx, character_sprite_get(obj->basechar, obj->visualstate, &curSprite));
|
||||||
// is it time to change frames?
|
// is it time to change frames?
|
||||||
if ( (curtimems - obj->curSpriteFrameTimer) >= curSprite->speed ) {
|
if ( (curtimems - obj->curSpriteFrameTimer) >= curSprite->speed ) {
|
||||||
CATCH(errctx, obj->changeframefunc(obj, curSprite, curtimems));
|
CATCH(errctx, obj->changeframefunc(obj, curSprite, curtimems));
|
||||||
@@ -182,7 +182,7 @@ static ErrorContext *actor_visible(actor *obj, SDL_FRect *camera, bool *visible)
|
|||||||
FAIL_ZERO_RETURN(errctx, obj->basechar, ERR_NULLPOINTER, "Actor has NULL base character reference");
|
FAIL_ZERO_RETURN(errctx, obj->basechar, ERR_NULLPOINTER, "Actor has NULL base character reference");
|
||||||
|
|
||||||
ATTEMPT {
|
ATTEMPT {
|
||||||
CATCH(errctx, character_sprite_get(obj->basechar, obj->state, &curSprite));
|
CATCH(errctx, character_sprite_get(obj->basechar, obj->visualstate, &curSprite));
|
||||||
} CLEANUP {
|
} CLEANUP {
|
||||||
} PROCESS(errctx) {
|
} PROCESS(errctx) {
|
||||||
} HANDLE(errctx, ERR_KEY) {
|
} HANDLE(errctx, ERR_KEY) {
|
||||||
@@ -215,7 +215,7 @@ ErrorContext *actor_render(actor *obj, SDL_Renderer *renderer)
|
|||||||
FAIL_ZERO_RETURN(errctx, obj->basechar, ERR_NULLPOINTER, "Actor has NULL base character reference");
|
FAIL_ZERO_RETURN(errctx, obj->basechar, ERR_NULLPOINTER, "Actor has NULL base character reference");
|
||||||
|
|
||||||
ATTEMPT {
|
ATTEMPT {
|
||||||
CATCH(errctx, character_sprite_get(obj->basechar, obj->state, &curSprite));
|
CATCH(errctx, character_sprite_get(obj->basechar, obj->visualstate, &curSprite));
|
||||||
CATCH(errctx, actor_visible(obj, &camera, &visible));
|
CATCH(errctx, actor_visible(obj, &camera, &visible));
|
||||||
} CLEANUP {
|
} CLEANUP {
|
||||||
} PROCESS(errctx) {
|
} PROCESS(errctx) {
|
||||||
|
|||||||
@@ -16,37 +16,37 @@ ErrorContext *gamepad_handle_button_down(void *appstate, SDL_Event *event)
|
|||||||
FAIL_ZERO_RETURN(errctx, appstate, ERR_NULLPOINTER, "Player actor does not exist");
|
FAIL_ZERO_RETURN(errctx, appstate, ERR_NULLPOINTER, "Player actor does not exist");
|
||||||
|
|
||||||
if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_DOWN ) {
|
if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_DOWN ) {
|
||||||
SDL_Log("Processing dpad down : state %d", player->state);
|
SDL_Log("Processing dpad down : state %d", player->logicstate);
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_MOVING_DOWN);
|
BITMASK_ADD(player->logicstate, ACTOR_STATE_MOVING_DOWN);
|
||||||
if ( !player->movement_controls_face ) {
|
if ( !player->movement_controls_face ) {
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_FACE_ALL);
|
BITMASK_DEL(player->visualstate, ACTOR_STATE_FACE_ALL);
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_FACE_DOWN);
|
BITMASK_ADD(player->visualstate, ACTOR_STATE_FACE_DOWN);
|
||||||
}
|
}
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_UP ) {
|
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_UP ) {
|
||||||
SDL_Log("Processing dpad up");
|
SDL_Log("Processing dpad up");
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_MOVING_UP);
|
BITMASK_ADD(player->logicstate, ACTOR_STATE_MOVING_UP);
|
||||||
if ( !player->movement_controls_face ) {
|
if ( !player->movement_controls_face ) {
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_FACE_ALL);
|
BITMASK_DEL(player->visualstate, ACTOR_STATE_FACE_ALL);
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_FACE_UP);
|
BITMASK_ADD(player->visualstate, ACTOR_STATE_FACE_UP);
|
||||||
}
|
}
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_LEFT ) {
|
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_LEFT ) {
|
||||||
SDL_Log("Processing dpad left");
|
SDL_Log("Processing dpad left");
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_MOVING_LEFT);
|
BITMASK_ADD(player->logicstate, ACTOR_STATE_MOVING_LEFT);
|
||||||
if ( !player->movement_controls_face ) {
|
if ( !player->movement_controls_face ) {
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_FACE_ALL);
|
BITMASK_DEL(player->visualstate, ACTOR_STATE_FACE_ALL);
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_FACE_LEFT);
|
BITMASK_ADD(player->visualstate, ACTOR_STATE_FACE_LEFT);
|
||||||
}
|
}
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_RIGHT ) {
|
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_RIGHT ) {
|
||||||
SDL_Log("Processing dpad right");
|
SDL_Log("Processing dpad right");
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_MOVING_RIGHT);
|
BITMASK_ADD(player->logicstate, ACTOR_STATE_MOVING_RIGHT);
|
||||||
if ( !player->movement_controls_face ) {
|
if ( !player->movement_controls_face ) {
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_FACE_ALL);
|
BITMASK_DEL(player->visualstate, ACTOR_STATE_FACE_ALL);
|
||||||
BITMASK_ADD(player->state, ACTOR_STATE_FACE_RIGHT);
|
BITMASK_ADD(player->visualstate, ACTOR_STATE_FACE_RIGHT);
|
||||||
}
|
}
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
}
|
}
|
||||||
SUCCEED_RETURN(errctx);
|
SUCCEED_RETURN(errctx);
|
||||||
}
|
}
|
||||||
@@ -64,24 +64,24 @@ ErrorContext *gamepad_handle_button_up(void *appstate, SDL_Event *event)
|
|||||||
|
|
||||||
if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_DOWN ) {
|
if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_DOWN ) {
|
||||||
SDL_Log("processing down release");
|
SDL_Log("processing down release");
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_MOVING_DOWN);
|
BITMASK_DEL(player->logicstate, ACTOR_STATE_MOVING_DOWN);
|
||||||
player->curSpriteFrameId = 0;
|
player->curSpriteFrameId = 0;
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_UP) {
|
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_UP) {
|
||||||
SDL_Log("processing up release");
|
SDL_Log("processing up release");
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_MOVING_UP);
|
BITMASK_DEL(player->logicstate, ACTOR_STATE_MOVING_UP);
|
||||||
player->curSpriteFrameId = 0;
|
player->curSpriteFrameId = 0;
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_RIGHT ) {
|
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_RIGHT ) {
|
||||||
SDL_Log("processing right release");
|
SDL_Log("processing right release");
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_MOVING_RIGHT);
|
BITMASK_DEL(player->logicstate, ACTOR_STATE_MOVING_RIGHT);
|
||||||
player->curSpriteFrameId = 0;
|
player->curSpriteFrameId = 0;
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_LEFT) {
|
} else if ( event->gbutton.button == SDL_GAMEPAD_BUTTON_DPAD_LEFT) {
|
||||||
SDL_Log("processing left release");
|
SDL_Log("processing left release");
|
||||||
BITMASK_DEL(player->state, ACTOR_STATE_MOVING_LEFT);
|
BITMASK_DEL(player->logicstate, ACTOR_STATE_MOVING_LEFT);
|
||||||
player->curSpriteFrameId = 0;
|
player->curSpriteFrameId = 0;
|
||||||
SDL_Log("New state : %d", player->state);
|
SDL_Log("New state : %d", player->logicstate);
|
||||||
}
|
}
|
||||||
SUCCEED_RETURN(errctx);
|
SUCCEED_RETURN(errctx);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,7 +229,8 @@ ErrorContext *tilemap_load_layer_object_actor(tilemap_object *curobj, json_t *la
|
|||||||
} else {
|
} else {
|
||||||
actorobj->refcount += 1;
|
actorobj->refcount += 1;
|
||||||
}
|
}
|
||||||
CATCH(errctx, get_json_properties_integer((json_t *)layerdatavalue, "state", &actorobj->state));
|
CATCH(errctx, get_json_properties_integer((json_t *)layerdatavalue, "logicstate", &actorobj->logicstate));
|
||||||
|
CATCH(errctx, get_json_properties_integer((json_t *)layerdatavalue, "visualstate", &actorobj->visualstate));
|
||||||
} CLEANUP {
|
} CLEANUP {
|
||||||
if ( tmpstr != NULL ) {
|
if ( tmpstr != NULL ) {
|
||||||
IGNORE(heap_release_string(tmpstr));
|
IGNORE(heap_release_string(tmpstr));
|
||||||
|
|||||||
@@ -137,7 +137,8 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
|
|||||||
return SDL_APP_FAILURE;
|
return SDL_APP_FAILURE;
|
||||||
} FINISH_NORETURN(errctx);
|
} FINISH_NORETURN(errctx);
|
||||||
|
|
||||||
actorptr->state = (ACTOR_STATE_ALIVE | ACTOR_STATE_FACE_LEFT);
|
actorptr->logicstate = ACTOR_STATE_ALIVE;
|
||||||
|
actorptr->visualstate = ACTOR_STATE_FACE_LEFT;
|
||||||
actorptr->x = 320;
|
actorptr->x = 320;
|
||||||
actorptr->y = 240;
|
actorptr->y = 240;
|
||||||
actorptr->visible = true;
|
actorptr->visible = true;
|
||||||
|
|||||||
@@ -33,9 +33,14 @@
|
|||||||
"value":"testcharacter"
|
"value":"testcharacter"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name":"state",
|
"name":"logicstate",
|
||||||
"type":"int",
|
"type":"int",
|
||||||
"value":6
|
"value":16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"visualstate",
|
||||||
|
"type":"int",
|
||||||
|
"value":2
|
||||||
}],
|
}],
|
||||||
"rotation":0,
|
"rotation":0,
|
||||||
"type":"actor",
|
"type":"actor",
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ ErrorContext *test_tilemap_load_layer_objects(void)
|
|||||||
);
|
);
|
||||||
if ( (testactor->basechar != SDL_GetPointerProperty(REGISTRY_CHARACTER, "testcharacter", NULL)) ||
|
if ( (testactor->basechar != SDL_GetPointerProperty(REGISTRY_CHARACTER, "testcharacter", NULL)) ||
|
||||||
(testactor->layer != 1) ||
|
(testactor->layer != 1) ||
|
||||||
(testactor->state != 6) ||
|
(testactor->logicstate != 6) ||
|
||||||
(testactor->visible != true) ||
|
(testactor->visible != true) ||
|
||||||
(testactor->x != 16) ||
|
(testactor->x != 16) ||
|
||||||
(testactor->y != 16) ) {
|
(testactor->y != 16) ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user