aboutsummaryrefslogtreecommitdiff
path: root/src/killLog.c
blob: d5e06e94ed4b9447ac106a0e1e3e86df9640d9b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "killLog.h"
#include "game.h"
#include "entity.h"

void initKillLog(KillLog * killLog) {
   killLog->killCount = 0;
}

void pushKill(KillLog * killLog, Entity entity) {
    int i;

    Kill kill = (Kill){
        .type = entity.type,
        .id = entity.id,
        .fingerPrint = entity.fingerprint,
        .timeAtKill = GetTime()
    };

    ++killLog->killCount;

    // Push shit back if at max size.
    if (killLog->killCount > KILL_LOG_MAX) {
        for (i = 0; i < KILL_LOG_MAX - 1; ++i)
            killLog->kills[i] = killLog->kills[i + 1];

        killLog->killCount = KILL_LOG_MAX;
    }

    killLog->kills[killLog->killCount - 1] = kill;
}

void formatKillMessage(char killMessage[KILL_MESSAGE_MAX], Kill kill) {
    // Get time since kill in minutes and seconds.
    double timeSinceKill = GetTime() - kill.timeAtKill;
    int minutes = timeSinceKill / 60;
    int seconds = (int)timeSinceKill % 60;

    // Nicely format.
    snprintf(killMessage, KILL_MESSAGE_MAX, "%s@%x %d:%d", entityTypeInfo[kill.type].name, kill.fingerPrint, minutes, seconds);
}

void drawKillLog(KillLog * killLog, Vector2 position) {
    int i;
    char killMessage[KILL_MESSAGE_MAX];

    // Format and draw each kill.
    for (i = 0; i < killLog->killCount; ++i) {
        formatKillMessage(killMessage, killLog->kills[i]);

        DrawText(
            killMessage,
            position.x,
            position.y + (KILL_LOG_FONT_SIZE * i),
            KILL_LOG_FONT_SIZE,
            WHITE
        );
    }
}

void resetKillLog(KillLog * killLog) {
    killLog->killCount = 0;
}