|
@@ -1027,12 +1027,13 @@ void Entity::tick(const Dimension* zDimension, double seconds)
|
|
|
}
|
|
}
|
|
|
if (moveDir.x != 0.f || moveDir.y != 0.f || moveDir.z != 0.f)
|
|
if (moveDir.x != 0.f || moveDir.y != 0.f || moveDir.z != 0.f)
|
|
|
{
|
|
{
|
|
|
|
|
+ bool collided = isCollidingWithBlock(zDimension);
|
|
|
while (abs(moveDir.x) > 1.f)
|
|
while (abs(moveDir.x) > 1.f)
|
|
|
{
|
|
{
|
|
|
if (moveDir.x > 0.f)
|
|
if (moveDir.x > 0.f)
|
|
|
{
|
|
{
|
|
|
location.x += 1.f;
|
|
location.x += 1.f;
|
|
|
- if (isCollidingWithBlock(zDimension))
|
|
|
|
|
|
|
+ if (!collided && isCollidingWithBlock(zDimension))
|
|
|
{
|
|
{
|
|
|
moveDir.x = 0.f;
|
|
moveDir.x = 0.f;
|
|
|
speed.x = 0.f;
|
|
speed.x = 0.f;
|
|
@@ -1047,7 +1048,7 @@ void Entity::tick(const Dimension* zDimension, double seconds)
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
location.x -= 1.f;
|
|
location.x -= 1.f;
|
|
|
- if (isCollidingWithBlock(zDimension))
|
|
|
|
|
|
|
+ if (!collided && isCollidingWithBlock(zDimension))
|
|
|
{
|
|
{
|
|
|
moveDir.x = 0.f;
|
|
moveDir.x = 0.f;
|
|
|
speed.x = 0.f;
|
|
speed.x = 0.f;
|
|
@@ -1063,7 +1064,7 @@ void Entity::tick(const Dimension* zDimension, double seconds)
|
|
|
if (moveDir.x != 0.f)
|
|
if (moveDir.x != 0.f)
|
|
|
{
|
|
{
|
|
|
location.x += moveDir.x;
|
|
location.x += moveDir.x;
|
|
|
- if (isCollidingWithBlock(zDimension))
|
|
|
|
|
|
|
+ if (!collided && isCollidingWithBlock(zDimension))
|
|
|
{
|
|
{
|
|
|
location.x -= moveDir.x;
|
|
location.x -= moveDir.x;
|
|
|
speed.x = 0.f;
|
|
speed.x = 0.f;
|
|
@@ -1078,7 +1079,7 @@ void Entity::tick(const Dimension* zDimension, double seconds)
|
|
|
if (moveDir.y > 0.f)
|
|
if (moveDir.y > 0.f)
|
|
|
{
|
|
{
|
|
|
location.y += 1.f;
|
|
location.y += 1.f;
|
|
|
- if (isCollidingWithBlock(zDimension))
|
|
|
|
|
|
|
+ if (!collided && isCollidingWithBlock(zDimension))
|
|
|
{
|
|
{
|
|
|
moveDir.y = 0.f;
|
|
moveDir.y = 0.f;
|
|
|
location.y -= 1.f;
|
|
location.y -= 1.f;
|
|
@@ -1093,7 +1094,7 @@ void Entity::tick(const Dimension* zDimension, double seconds)
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
location.y -= 1.f;
|
|
location.y -= 1.f;
|
|
|
- if (isCollidingWithBlock(zDimension))
|
|
|
|
|
|
|
+ if (!collided && isCollidingWithBlock(zDimension))
|
|
|
{
|
|
{
|
|
|
moveDir.y = 0.f;
|
|
moveDir.y = 0.f;
|
|
|
location.y += 1.f;
|
|
location.y += 1.f;
|
|
@@ -1109,7 +1110,7 @@ void Entity::tick(const Dimension* zDimension, double seconds)
|
|
|
if (moveDir.y != 0.f)
|
|
if (moveDir.y != 0.f)
|
|
|
{
|
|
{
|
|
|
location.y += moveDir.y;
|
|
location.y += moveDir.y;
|
|
|
- if (isCollidingWithBlock(zDimension))
|
|
|
|
|
|
|
+ if (!collided && isCollidingWithBlock(zDimension))
|
|
|
{
|
|
{
|
|
|
location.y -= moveDir.y;
|
|
location.y -= moveDir.y;
|
|
|
speed.y = 0.f;
|
|
speed.y = 0.f;
|