Project

General

Profile

Statistics
| Revision:

root / proj / project / src / singleplayer.c @ 358

History | View | Annotate | Download (2.25 KB)

1 347 up20180642
#include <lcom/lcf.h>
2
3
#include "singleplayer.h"
4
5
#include "proj.h"
6
7
#include "proj_macros.h"
8
#include "proj_func.h"
9
#include "ent.h"
10
#include "interrupts_func.h"
11
12 351 up20180642
#include "libs.h"
13
14 347 up20180642
#include "campaign.h"
15
#include "zombies.h"
16
17
int (singleplayer)(void) {
18
19
    int r;
20
21
    menu_t *main_menu = menu_ctor(font_get_default());
22
    menu_add_item(main_menu, "Campaign");
23
    menu_add_item(main_menu, "Zombies");
24
    menu_add_item(main_menu, "Back");
25
26
    //uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
27
    uint8_t last_lb = 0;
28
    struct packet pp;
29
    keys_t *keys = get_key_presses();
30
31
    /// loop stuff
32
    int click = 0;
33
    uint64_t int_vector = 0;
34
    int good = true;
35
    while (good) {
36
        /* Get a request message. */
37
        if((r = get_interrupts_vector(&int_vector))) return r;
38
        uint32_t n = 1;
39
        for (uint8_t i = 0; i < 32; i++, n <<= 1) {
40
            if (int_vector & n) {
41
                interrupt_handler(i);
42
                switch (i) {
43
                    case TIMER0_IRQ:
44
45
                    graph_clear_screen();
46
                    switch(menu_update_state(main_menu, click)){
47
                        case -1: break;
48
                        case  0: campaign(); break;
49
                        case  1: zombies(); break;
50
                        case  2: good = false; break;
51
                    }
52
                    menu_draw(main_menu);
53
54
                    click = 0;
55
56
                    sprite_set_pos(sp_crosshair, *get_mouse_X(), *get_mouse_Y());
57
                    sprite_draw(sp_crosshair);
58
                    graph_draw();
59
60
                    break;
61
                    case KBC_IRQ:
62
                    if (keyboard_get_scancode()[0] == ESC_BREAK_CODE) good = false;
63
                    case MOUSE_IRQ:
64
                    if (mouse_get_counter_mouse_ih() >= 3) {
65
                        mouse_parse_packet(mouse_get_packet_mouse_ih(), &pp);
66
                        update_mouse(&pp);
67
                        if (!click) click = last_lb ^ keys->lb_pressed && keys->lb_pressed;
68
                        last_lb = keys->lb_pressed;
69
                        mouse_set_counter_mouse_ih(0);
70
                    }
71
                    break;
72
                    case COM1_IRQ: nctp_ih(); break;
73
                }
74
            }
75
        }
76
    }
77
78
    return 0;
79
}