- [FIX] Els boosts tornaven a apareixer
- [FIX] Molts objectes que debien no tenien activada la gravetat - [FIX] El objecte pickat es pintava en coordenades rares depenent de la Z original - [FIX] Al soltar un objecte se podia quedar enganxat en XP o YP
This commit is contained in:
@@ -369,6 +369,18 @@ namespace actor
|
||||
(obj1->pos.y + obj1->size.y > obj2->pos.y );
|
||||
}
|
||||
|
||||
const bool does_collide(actor_t *obj1)
|
||||
{
|
||||
actor_t *obj2 = first;
|
||||
actor_t *hero = find("HERO");
|
||||
while (obj2)
|
||||
{
|
||||
if (obj2 != hero && obj1 != obj2 && check_2d_collision(obj1, obj2)) return true;
|
||||
obj2 = obj2->next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const bool is_above(actor_t *obj1, actor_t *obj2)
|
||||
{
|
||||
return check_2d_collision(obj1, obj2) && (obj1->pos.z==obj2->pos.z+obj2->size.z);
|
||||
@@ -647,6 +659,14 @@ namespace actor
|
||||
picked->pos.x = act->pos.x; if (picked->pos.x + picked->size.x > room::getMax().x) picked->pos.x = room::getMax().x - picked->size.x;
|
||||
picked->pos.y = act->pos.y; if (picked->pos.y + picked->size.y > room::getMax().y) picked->pos.y = room::getMax().y - picked->size.y;
|
||||
picked->pos.z = act->pos.z;
|
||||
if (does_collide(picked))
|
||||
{
|
||||
picked->pos.x-=2;
|
||||
if (does_collide(picked))
|
||||
{
|
||||
picked->pos.x+=2; picked->pos.y-=2;
|
||||
}
|
||||
}
|
||||
act->pos.z += picked->size.z;
|
||||
actor::actor_t *above = act->above;
|
||||
while (above) { above->pos.z += picked->size.z; above = above->above; }
|
||||
@@ -663,7 +683,7 @@ namespace actor
|
||||
}
|
||||
else if (act->below && act->below->flags&FLAG_PICKABLE)
|
||||
{
|
||||
const int height = act->below->size.z;
|
||||
//const int height = act->below->size.z;
|
||||
pick(act->below);
|
||||
//if (!(( input::keyDown(SDL_SCANCODE_SPACE) || input::keyDown(config::getKey(KEY_JUMP)) ) && (hero::getSkills()&SKILL_SHOES) && (act->pos.y+act->size.y)<=max.y && act->pos.y>=min.y && (act->pos.x+act->size.x)<=max.x && act->pos.x>=min.x && act->react_mask==0 && (act->pos.z==0 || act->below)))
|
||||
// act->pos.z -= height;
|
||||
@@ -1320,8 +1340,9 @@ namespace actor
|
||||
if (act->next) act->next->prev = act->prev;
|
||||
if (act==selected) selected = nullptr;
|
||||
picked = act;
|
||||
picked->pos.x=26;
|
||||
picked->pos.y=84;
|
||||
picked->pos.x=24;
|
||||
picked->pos.y=80;
|
||||
picked->pos.z=0;
|
||||
picked->inner_x = 148-act->bmp_offset.x + act->pos.x*2 - act->pos.y*2;
|
||||
picked->inner_y = 91-act->bmp_offset.y + act->pos.x + act->pos.y - act->pos.z*2;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user