~mpredotka/machines-vs-machines/level-backgrounds-sand

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
#ifndef ENEMIES_H
#define ENEMIES_H

#include <QAbstractListModel>

class Enemy;
class Board;
class Engine;

class Enemies : public QAbstractListModel
{
    Q_OBJECT
    Q_PROPERTY(int count READ count NOTIFY countChanged)

public:
    enum Roles {
        RoleImage,
        RoleImageBaseSize,
        RoleWalkingDirection,
        RoleTravelledDistance,
        RoleSpriteCount,
        RoleAnimationDuration,
        RoleRunning,
        RoleProgress,
        RoleX,
        RoleY,
        RoleNextX,
        RoleNextY,
        RoleCurrentField,
        RoleNextField,
        RoleSpeed,
        RoleEnergy,
        RoleMaxEnergy,
    };

    explicit Enemies(Engine *engine, QObject *parent = 0);

    int count() const { return rowCount(QModelIndex()); }
    int rowCount(const QModelIndex &parent) const;
    QVariant data(const QModelIndex &index, int role) const;
    QHash<int, QByteArray> roleNames() const;

    // The model takes ownership of the enemy
    void addEnemy(Enemy *enemy);

    Q_INVOKABLE Enemy *get(int index) const;

    void clear();

private slots:
    void itemRunningChanged();
    void itemProgressChanged();
    void itemCurrentFieldChanged();
    void itemSpeedChanged();
    void itemEnergyChanged();
    void itemWalkingDirectionChanged();

    void removeDeadEnemy();

signals:
    void countChanged();
    void enemyExited();

private:
    Engine *m_engine;
    QList<Enemy*> m_enemies;
    QList<Enemy*> m_deadEnemies;
};

class EnemyFactory
{
public:
    EnemyFactory(Engine *engine);
    void createTemplate(const QVariantMap &enemyMap);
    void clear();

    Enemy* createEnemy(int templateId);

    QList<int> templateIds();

private:
    class EnemyTemplate {
    public:
        QString image;
        int imageBaseSize;
        int spriteCount;
        int animationDuration;
        int speed;
        int energy;
        int reward;
    };

    Engine *m_engine;
    QHash<int, EnemyTemplate> m_enemyTemplates;
};

#endif // ENEMIES_H