about summary refs log tree commit diff stats
path: root/app/models
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2021-07-12 19:55:12 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2021-07-12 19:55:12 -0400
commit222ffd3a54d6d389f2df162013d36f45c83fcdca (patch)
treef920bd0843e435ffaf3872c1215214a360f63fed /app/models
parente9eadd6c939f5ff9cef33a5fc9d0d65596d64d57 (diff)
downloadthoughts-222ffd3a54d6d389f2df162013d36f45c83fcdca.tar.gz
thoughts-222ffd3a54d6d389f2df162013d36f45c83fcdca.tar.bz2
thoughts-222ffd3a54d6d389f2df162013d36f45c83fcdca.zip
Replaced Ruby Racer with node
Diffstat (limited to 'app/models')
0 files changed, 0 insertions, 0 deletions
/game.h?h=v1.0.0&id=3fa9af58bc907048a8ccadc2bef7736ec554a09d'>3fa9af5 ^
456122f ^



3fa9af5 ^
3fa9af5 ^
456122f ^




3fa9af5 ^
d851eae ^

de7ee5e ^

d851eae ^
3fa9af5 ^


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
121
122
123
124
125
126
127







                       
                  
                  



































                                   







                                                                                              





































                                     
              











                            

                          



                                
                       
                       




                     
 

                          

                             
 


                                                  
#ifndef GAME_H_7D2B65AE
#define GAME_H_7D2B65AE

#include <tuple>
#include <set>
#include <random>
#include <list>
#include "map.h"
#include "muxer.h"
#include "timer.h"

const int GAME_WIDTH = 640*2;
const int GAME_HEIGHT = 480*2;
const int TILE_WIDTH = 8*2;
const int TILE_HEIGHT = TILE_WIDTH;
const int INIT_ZOOM = 10;
const int ZOOM_X_FACTOR = 8;
const int ZOOM_Y_FACTOR = 6;
const int RADIUS = 8;

enum class Tile {
  Floor,
  Wall,
  Dust,
  Lamp
};

enum class Source {
  None,
  Dust,
  Lamp,
  Player
};

enum class LoseState {
  None,
  PoppingLamps,
  PoppingPlayer,
  Outro
};

struct Input {
  bool left = false;
  bool right = false;
  bool up = false;
  bool down = false;

  bool operator==(const Input& rhs) const {
    return std::tie(left, right, up, down) == std::tie(rhs.left, rhs.right, rhs.up, rhs.down);
  }

  bool operator!=(const Input& rhs) const {
    return !(*this == rhs);
  }
};

using coord = std::tuple<int, int>;

struct Kickup {
  int x;
  int y;
  size_t cur;
  size_t radius;
  size_t chain;
  std::set<coord> done;
  std::set<coord> front;
};

struct MapData {
  Tile tile = Tile::Floor;
  bool lit = false;
  bool wasLit = false;
  size_t dustLife = 0;
  Source lightType = Source::None;
  int lightRadius = 0;
  std::set<coord> litTiles;
};

class Game {
public:

  Game(std::mt19937& rng) :
    rng(rng),
    map(
      -INIT_ZOOM * ZOOM_X_FACTOR / 2,
      -INIT_ZOOM * ZOOM_Y_FACTOR / 2,
      INIT_ZOOM * ZOOM_X_FACTOR,
      INIT_ZOOM * ZOOM_Y_FACTOR)
  {
  }

  std::mt19937& rng;
  Muxer muxer;

  Map<MapData> map;
  std::list<Kickup> kickups;
  int litSpots = 0;
  bool dirtyLighting = true;
  size_t numLamps = 0;
  size_t numDust = 0;

  int player_x = 0;
  int player_y = 0;
  bool renderPlayer = true;

  int maxZoom = INIT_ZOOM;

  int curZoom = INIT_ZOOM;
  int curBoundX = map.getLeft();
  int curBoundY = map.getTop();

  bool zooming = false;
  int zoomProgress = 0;
  int zoomLength;
  int lastZoomTop;
  int lastZoomLeft;
  int lastZoomWidth;
  int lastZoomHeight;

  bool firstInput = false;
  Input lastInput;
  bool alreadyBumped = false;
  Timer bumpCooldown = {500};

};

#endif /* end of include guard: GAME_H_7D2B65AE */