Friction, velocity, rendering
This commit is contained in:
@@ -56,12 +56,21 @@ void entityUpdate(entity_t *entity) {
|
||||
|
||||
worldChunkPosAdd(&entity->position[i], entity->velocity[i]);
|
||||
|
||||
if(entity->velocity[i] < 0) {
|
||||
entity->velocity[i] += ENTITY_FRICTION;
|
||||
if(entity->velocity[i] >= -ENTITY_MIN_VELOCITY) entity->velocity[i] = 0;
|
||||
} else {
|
||||
entity->velocity[i] -= ENTITY_FRICTION;
|
||||
if(entity->velocity[i] <= ENTITY_MIN_VELOCITY) entity->velocity[i] = 0;
|
||||
// Friction
|
||||
worldsubtile_t v = entity->velocity[i];
|
||||
|
||||
if (v > 0) {
|
||||
v -= ENTITY_FRICTION;
|
||||
if (v < ENTITY_MIN_VELOCITY) v = 0;
|
||||
} else if (v < 0) {
|
||||
v += ENTITY_FRICTION;
|
||||
if (v > -ENTITY_MIN_VELOCITY) v = 0;
|
||||
}
|
||||
|
||||
if ((v > 0 && v < ENTITY_FRICTION) || (v < 0 && v > -ENTITY_FRICTION)) {
|
||||
v = 0;
|
||||
}
|
||||
|
||||
entity->velocity[i] = v;
|
||||
}
|
||||
}
|
||||
@@ -18,49 +18,46 @@ void playerMovement(entity_t *entity) {
|
||||
assertNotNull(entity, "Entity pointer cannot be NULL");
|
||||
|
||||
// Get movement angle as 0-> normalized vector.
|
||||
{
|
||||
vec2 dir = {
|
||||
inputAxis(INPUT_ACTION_LEFT, INPUT_ACTION_RIGHT),
|
||||
inputAxis(INPUT_ACTION_DOWN, INPUT_ACTION_UP)
|
||||
};
|
||||
if(dir[0] == 0 && dir[1] == 0) return;
|
||||
glm_vec2_normalize(dir);
|
||||
|
||||
entity->velocity[0] += (worldsubtile_t)(PLAYER_SPEED * dir[0]);
|
||||
entity->velocity[1] += (worldsubtile_t)(PLAYER_SPEED * dir[1]);
|
||||
vec2 dir = {
|
||||
inputAxis(INPUT_ACTION_LEFT, INPUT_ACTION_RIGHT),
|
||||
inputAxis(INPUT_ACTION_DOWN, INPUT_ACTION_UP)
|
||||
};
|
||||
if(dir[0] == 0 && dir[1] == 0) return;
|
||||
glm_vec2_normalize(dir);
|
||||
|
||||
entity->velocity[0] += (worldsubtile_t)(PLAYER_SPEED * dir[0]);
|
||||
entity->velocity[1] += (worldsubtile_t)(PLAYER_SPEED * dir[1]);
|
||||
|
||||
// Update direction.
|
||||
if(dir[0] > 0) {
|
||||
if(entity->direction == DIRECTION_RIGHT) {
|
||||
entity->direction = DIRECTION_RIGHT;
|
||||
} else {
|
||||
if(dir[1] < 0) {
|
||||
entity->direction = DIRECTION_UP;
|
||||
} else if(dir[1] > 0) {
|
||||
entity->direction = DIRECTION_DOWN;
|
||||
} else {
|
||||
entity->direction = DIRECTION_RIGHT;
|
||||
}
|
||||
}
|
||||
} else if(dir[0] < 0) {
|
||||
if(entity->direction == DIRECTION_LEFT) {
|
||||
entity->direction = DIRECTION_LEFT;
|
||||
} else {
|
||||
if(dir[1] < 0) {
|
||||
entity->direction = DIRECTION_UP;
|
||||
} else if(dir[1] > 0) {
|
||||
entity->direction = DIRECTION_DOWN;
|
||||
} else {
|
||||
entity->direction = DIRECTION_LEFT;
|
||||
}
|
||||
}
|
||||
} else if(dir[1] < 0) {
|
||||
entity->direction = DIRECTION_UP;
|
||||
} else if(dir[1] > 0) {
|
||||
entity->direction = DIRECTION_DOWN;
|
||||
}
|
||||
|
||||
|
||||
// // Update direction.
|
||||
// if(dir[0] > 0) {
|
||||
// if(entity->direction == DIRECTION_RIGHT) {
|
||||
// entity->direction = DIRECTION_RIGHT;
|
||||
// } else {
|
||||
// if(dir[1] < 0) {
|
||||
// entity->direction = DIRECTION_UP;
|
||||
// } else if(dir[1] > 0) {
|
||||
// entity->direction = DIRECTION_DOWN;
|
||||
// } else {
|
||||
// entity->direction = DIRECTION_RIGHT;
|
||||
// }
|
||||
// }
|
||||
// } else if(dir[0] < 0) {
|
||||
// if(entity->direction == DIRECTION_LEFT) {
|
||||
// entity->direction = DIRECTION_LEFT;
|
||||
// } else {
|
||||
// if(dir[1] < 0) {
|
||||
// entity->direction = DIRECTION_UP;
|
||||
// } else if(dir[1] > 0) {
|
||||
// entity->direction = DIRECTION_DOWN;
|
||||
// } else {
|
||||
// entity->direction = DIRECTION_LEFT;
|
||||
// }
|
||||
// }
|
||||
// } else if(dir[1] < 0) {
|
||||
// entity->direction = DIRECTION_UP;
|
||||
// } else if(dir[1] > 0) {
|
||||
// entity->direction = DIRECTION_DOWN;
|
||||
// }
|
||||
}
|
||||
|
||||
void playerInteraction(entity_t *entity) {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#pragma once
|
||||
#include "dusk.h"
|
||||
|
||||
#define PLAYER_SPEED 4
|
||||
#define PLAYER_SPEED 3
|
||||
#define PLAYER_INTERACTION_RANGE 1.0f
|
||||
#define PLAYER_INTERACTION_SIZE 0.5f
|
||||
|
||||
|
||||
Reference in New Issue
Block a user