diff --git a/source/actor.cpp b/source/actor.cpp index 0854c02..96da5a0 100644 --- a/source/actor.cpp +++ b/source/actor.cpp @@ -83,6 +83,7 @@ namespace actor void setDirty(actor_t *act, const bool force) { + /* if (act->prev==nullptr && act != first && !force) return; if (act->prev) act->prev->next = act->next; @@ -92,12 +93,20 @@ namespace actor act->prev = nullptr; act->next = dirty; dirty = act; + */ + } + + void insert(actor_t *act) + { + act->next = first; + first = act; } void reorder() { anim_frame=(anim_frame+1)%4; - + dirty=first; + first=nullptr; while (dirty) { //const int z_index = dirty->pos.x + dirty->pos.y + dirty->pos.z; @@ -108,7 +117,9 @@ namespace actor { //const int z_index2 = current->pos.x + current->pos.y + current->pos.z; //if ((dirty->pos.z < current->pos.z+current->size.z) && (current->pos.x+current->size.x+current->pos.y > dirty->pos.x+dirty->size.x+dirty->pos.y)) - if (current->pos.x+current->pos.y>dirty->pos.y+dirty->pos.x || current->pos.z>dirty->pos.z) + + //if (current->pos.x+current->pos.y>dirty->pos.y+dirty->pos.x || current->pos.z+current->size.z>dirty->pos.z) + if (current->pos.x>dirty->pos.x+dirty->size.x || current->pos.y>dirty->pos.y+dirty->size.y || current->pos.z>dirty->pos.z+dirty->size.z) { dirty->prev = current->prev; current->prev = dirty; diff --git a/source/actor.h b/source/actor.h index 2c29ce6..68c3f2d 100644 --- a/source/actor.h +++ b/source/actor.h @@ -67,6 +67,8 @@ namespace actor actor_t *create(vec3_t p, vec3_t s, SDL_Rect r, SDL_Point o); void setDirty(actor_t *act, const bool force=false); + + void insert(actor_t *act); void reorder(); diff --git a/source/main.cpp b/source/main.cpp index ec808c8..1180088 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -20,16 +20,20 @@ void game::init() box->movement = MOV_Z; box->mov_push = PUSH_ZP; actor::setDirty(box, true); + actor::insert(box); box = actor::create({32,32,16}, {8,8,8}, {32,0,32,32}, {0,32}); box->flags = FLAG_PUSHABLE | FLAG_GRAVITY; box->movement = MOV_CW; box->mov_push = PUSH_XN; actor::setDirty(box, true); + actor::insert(box); box = actor::create({16,16,8}, {8,8,8}, {0,32,20,32}, {-6,38}); box->flags = FLAG_HERO | FLAG_PUSHABLE | FLAG_GRAVITY | FLAG_ORIENTABLE | FLAG_ANIMATED; actor::setDirty(box, true); + actor::insert(box); + actor::reorder(); }