From 43228c3809501eabb6f038f8e7c2a471b36dac91 Mon Sep 17 00:00:00 2001 From: JailDoctor Date: Tue, 7 Mar 2023 19:50:45 +0100 Subject: [PATCH] - El bot i que el arrastre vaja com toca --- source/actor.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++------ source/main.cpp | 4 ++-- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/source/actor.cpp b/source/actor.cpp index 03eeb56..0854c02 100644 --- a/source/actor.cpp +++ b/source/actor.cpp @@ -151,7 +151,15 @@ namespace actor if (input::keyDown(SDL_SCANCODE_RIGHT) && act->pos.x<56) { act->push |= PUSH_XP; act->orient=PUSH_XP; moving = true; } if (input::keyDown(SDL_SCANCODE_UP) && act->pos.y>0) { act->push |= PUSH_YN; act->orient=PUSH_YN; moving = true; } if (input::keyDown(SDL_SCANCODE_DOWN) && act->pos.y<56) { act->push |= PUSH_YP; act->orient=PUSH_YP; moving = true; } - if (input::keyDown(SDL_SCANCODE_SPACE) && act->react_mask==0 && (act->pos.z==0 || act->below)) { act->react_mask=1; act->react_push=0; act->flags &= uint8_t(~FLAG_GRAVITY); } + if (input::keyDown(SDL_SCANCODE_SPACE) && act->react_mask==0 && (act->pos.z==0 || act->below)) { + act->react_mask=1; + act->react_push=0; + act->flags &= uint8_t(~FLAG_GRAVITY); + if (act->below) { + act->below->above = nullptr; + act->below = nullptr; + } + } if (input::keyDown(SDL_SCANCODE_Z) && act->pos.z>0) { act->push |= PUSH_ZN; moving = true; } if (input::keyDown(SDL_SCANCODE_A) && act->pos.z<56) { act->push |= PUSH_ZP; moving = true; } @@ -263,7 +271,16 @@ namespace actor } else { - if (act->above && act->above->flags & FLAG_PUSHABLE) act->above->push |= PUSH_XN; + if (act->above && act->above->flags & FLAG_PUSHABLE) { + if (act->above->push != 0) { + updatePushable(act->above); + act->above->push = PUSH_XN; + } else { + act->above->push = PUSH_XN; + updatePushable(act->above); + act->above->push = 0; + } + } actor::setDirty(act); } } @@ -279,7 +296,16 @@ namespace actor } else { - if (act->above && act->above->flags & FLAG_PUSHABLE) act->above->push |= PUSH_XP; + if (act->above && act->above->flags & FLAG_PUSHABLE) { + if (act->above->push != 0) { + updatePushable(act->above); + act->above->push = PUSH_XP; + } else { + act->above->push = PUSH_XP; + updatePushable(act->above); + act->above->push = 0; + } + } actor::setDirty(act); } } @@ -295,7 +321,16 @@ namespace actor } else { - if (act->above && act->above->flags & FLAG_PUSHABLE) act->above->push |= PUSH_YN; + if (act->above && act->above->flags & FLAG_PUSHABLE) { + if (act->above->push != 0) { + updatePushable(act->above); + act->above->push = PUSH_YN; + } else { + act->above->push = PUSH_YN; + updatePushable(act->above); + act->above->push = 0; + } + } actor::setDirty(act); } } @@ -311,7 +346,16 @@ namespace actor } else { - if (act->above && act->above->flags & FLAG_PUSHABLE) act->above->push |= PUSH_YP; + if (act->above && act->above->flags & FLAG_PUSHABLE) { + if (act->above->push != 0) { + updatePushable(act->above); + act->above->push = PUSH_YP; + } else { + act->above->push = PUSH_YP; + updatePushable(act->above); + act->above->push = 0; + } + } actor::setDirty(act); } } @@ -409,8 +453,8 @@ namespace actor const int ao = (act->flags & FLAG_ANIMATED) ? anims[act->anim_cycle][anim_frame]*act->bmp_rect.w : 0; draw::draw(x, y, act->bmp_rect.w, act->bmp_rect.h, act->bmp_rect.x+ao, act->bmp_rect.y+oo, flip); - print(x,y,act->pos.x+act->pos.y); - print(x+10,y,act->pos.z); + //print(x,y,act->pos.x+act->pos.y); + //print(x+10,y,act->pos.z); if (draw_all && act->next) draw(act->next); } diff --git a/source/main.cpp b/source/main.cpp index fb9ff29..ec808c8 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -17,8 +17,8 @@ void game::init() box = actor::create({16,16,0}, {8,8,4}, {64,0,32,24}, {0,24}); box->flags = FLAG_MOVING;// | FLAG_PUSHABLE; - box->movement = MOV_X; - box->mov_push = PUSH_XP; + box->movement = MOV_Z; + box->mov_push = PUSH_ZP; actor::setDirty(box, true); box = actor::create({32,32,16}, {8,8,8}, {32,0,32,32}, {0,32});