summaryrefslogtreecommitdiffstats
path: root/test/main.cpp
blob: 570bcedbb487b7b3c138f47849b1a0745aabbd14 (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "flatland.hpp"
#include "window.hpp"
#include "exceptions/forcequit.hpp"

#include "serial/keyfocusable.hpp"
#include <SDL2/SDL.h>

#include <iostream>
#include <string>

#include "core/signal.hpp"

using namespace std;

int count = 0;

void loop(float);

class KeyPrinter : public KeyFocusable
{
    virtual void key_cb(const SDL_KeyboardEvent* key) override
    {
        string msg = (key->type == SDL_KEYDOWN) ? "pressed" : "released";
        cout << "KeyPrinter: key " << (char)key->keysym.sym << " " << msg << endl;
    };

public:

    using KeyFocusable::KeyFocusable;
};

class KeyCaller : public KeyFocusable
{
    int counter;
    char last;

    virtual void key_cb(const SDL_KeyboardEvent* key) override
    {
        if (key->type == SDL_KEYDOWN) {

            char c = key->keysym.sym;
            
            if (c == last)
                ++counter;
            else {
                last = c;
                counter = 0;
                cout << "KeyCaller: Counter set to 0" << endl;
            }
        }

        if (counter == 20)
        {
            FlatSignal signal(this, "char", (void*)&last);
            signal.emit("alpha");

            cout << "KeyCaller: 20 times reached" << endl;
            cout << "KeyCaller: sending " << last << endl;
        }

        if (counter == 50)
        {
            cout << "KeyCaller: 50 times pressed " << last << endl;

            /* Exit application */
            FlatSignal signal(this, "quit");
            signal.emit("core");
        }
    };

public:

    KeyCaller() : counter(0), last('\0') 
    {
        setID("CALLER");
    }
};

class TwentyListener : public FlatListener
{
    virtual void callback(FlatObject *sender, void *data) override
    {
        char c = *(char*)data;
        cout << "TwentyListener: received " << c << " from " << sender->getID() << endl;
    }

public:

    TwentyListener() : FlatListener({"char"}) {}
};

KeyPrinter printer;
KeyCaller caller;
TwentyListener twlistener;

SignalChannel alpha("alpha");

int main()
{
    FlatWindow win(600, 900, "Test 3");
    flat_status status;

    /* Connect listener to alpha channel */
    alpha.connect(&twlistener);

    init_flatland(&win, loop, status, 60);

    return 0;
}

void loop(float dt)
{
    ++count;

    if (count == 10000)
        throw ForceQuit("10000 steps reached");

    //cout << "Loop number: " << count << endl;
}