begin applying tick events to players
This commit is contained in:
parent
89c88b3469
commit
f3c0f42689
58
src/game.d
58
src/game.d
@ -2,6 +2,7 @@ import inputs;
|
||||
|
||||
static enum uint TICK_MS = 50;
|
||||
static enum int NUM_PLAYERS = 2;
|
||||
static double MOVE_SPEED = 200.0;
|
||||
|
||||
struct Player
|
||||
{
|
||||
@ -16,16 +17,35 @@ public:
|
||||
{
|
||||
for (int i = 0; i < NUM_PLAYERS; i++)
|
||||
{
|
||||
m_events[i] = new InputEventList();
|
||||
m_event_lists[i] = new InputEventList();
|
||||
}
|
||||
}
|
||||
void change_player()
|
||||
{
|
||||
m_ticks[m_pindex] = m_tick;
|
||||
m_pindex ^= 1;
|
||||
uint min_tick = m_tick;
|
||||
for (int i = 0; i < NUM_PLAYERS; i++)
|
||||
{
|
||||
if (m_ticks[i] < min_tick)
|
||||
min_tick = m_ticks[i];
|
||||
}
|
||||
for (int i = 0; i < NUM_PLAYERS; i++)
|
||||
{
|
||||
m_event_lists[i].remove_older_than(min_tick);
|
||||
}
|
||||
for (int i = 0; i < NUM_PLAYERS; i++)
|
||||
{
|
||||
m_events[i] = m_event_lists[i].get_first_event();
|
||||
}
|
||||
}
|
||||
void handle_move_event(int type, bool active)
|
||||
{
|
||||
m_events[m_pindex].add_event(m_tick + 1, type, active);
|
||||
m_event_lists[m_pindex].add_event(m_tick + 1, type, active);
|
||||
if (m_events[m_pindex] is null)
|
||||
{
|
||||
m_events[m_pindex] = m_event_lists[m_pindex].get_first_event();
|
||||
}
|
||||
}
|
||||
void update(uint ms)
|
||||
{
|
||||
@ -33,24 +53,50 @@ public:
|
||||
{
|
||||
m_last_tick_ms += TICK_MS;
|
||||
m_tick++;
|
||||
uint min_tick = m_tick;
|
||||
for (int i = 0; i < NUM_PLAYERS; i++)
|
||||
{
|
||||
apply_tick(m_players[i]);
|
||||
apply_tick(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
Player[] get_players() { return m_players; }
|
||||
|
||||
protected:
|
||||
void apply_tick(Player p)
|
||||
void apply_tick(int pindex)
|
||||
{
|
||||
while ((m_events[pindex] !is null) &&
|
||||
(m_events[pindex].next !is null) &&
|
||||
(m_events[pindex].next.tick <= m_tick))
|
||||
{
|
||||
m_events[pindex] = m_events[pindex].next;
|
||||
}
|
||||
if (m_events[pindex] !is null)
|
||||
{
|
||||
InputEvent ie = m_events[pindex];
|
||||
if (ie.inputs[INPUT_LEFT])
|
||||
{
|
||||
m_players[pindex].x -= MOVE_SPEED * TICK_MS / 1000;
|
||||
}
|
||||
if (ie.inputs[INPUT_RIGHT])
|
||||
{
|
||||
m_players[pindex].x += MOVE_SPEED * TICK_MS / 1000;
|
||||
}
|
||||
if (ie.inputs[INPUT_UP])
|
||||
{
|
||||
m_players[pindex].y += MOVE_SPEED * TICK_MS / 1000;
|
||||
}
|
||||
if (ie.inputs[INPUT_DOWN])
|
||||
{
|
||||
m_players[pindex].y -= MOVE_SPEED * TICK_MS / 1000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint m_tick;
|
||||
uint m_last_tick_ms;
|
||||
Player[NUM_PLAYERS] m_players;
|
||||
InputEventList[NUM_PLAYERS] m_events;
|
||||
InputEventList[NUM_PLAYERS] m_event_lists;
|
||||
InputEvent[NUM_PLAYERS] m_events;
|
||||
uint m_ticks[NUM_PLAYERS];
|
||||
int m_pindex;
|
||||
};
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
InputEvent get_first_event() { return m_events; }
|
||||
void remove_older_than(uint tick)
|
||||
{
|
||||
while ((m_events !is null) && (m_events.tick <= tick))
|
||||
while ((m_events !is null) && (m_events.tick < tick))
|
||||
{
|
||||
m_events = m_events.next;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user