- Fixed gui bug where unchecking extremely low undid low
[crack-attack.git] / src / Garbage.h
blobf850630f12eb2bfd0504efc44917f55d879ce17e
1 /*
2 * Garbage.h
3 * Daniel Nelson - 8/24/0
5 * Copyright (C) 2000 Daniel Nelson
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 * Daniel Nelson - aluminumangel.org
22 * 174 W. 18th Ave.
23 * Columbus, OH 43210
26 #ifndef GARBAGE_H
27 #define GARBAGE_H
29 #include <GL/glut.h>
31 #ifndef _WIN32
32 #else
33 # include <glext.h>
34 #endif
36 using namespace std;
38 // flavor of garbage
39 #define GF_NORMAL (0)
40 #define GF_GRAY (1) // hard to destroy
41 #define GF_BLACK (2) // very hard to destroy
42 #define GF_WHITE (3) // crazy lights
43 #define GF_COLOR_1 (4) // sprinkling of 1x1's
44 #define GF_COLOR_2 (5) // shatters to normal garbage
45 #define GF_COLOR_3 (6) // invisible swapper
46 #define GF_COLOR_4 (7) // reverse controls
47 #define GF_COLOR_5 (8) // tall garbage
48 #define GF_NUMBER (9)
50 // flavor effects
51 #define GF_SHATTER_TO_NORMAL_GARBAGE (GF_COLOR_2)
52 #define GF_REVERSE_CONTROLS (GF_COLOR_4)
53 #define GF_INVISIBLE_SWAPPER (GF_COLOR_3)
54 #define GF_CRAZY_LIGHTS (GF_WHITE)
56 // states of garbage
57 #define GS_STATIC (1 << 0)
58 #define GS_FALLING (1 << 1)
59 #define GS_AWAKING (1 << 2)
60 #define GS_SHATTERING (1 << 3)
62 class ComboTabulator;
64 class Garbage {
65 public:
66 void initializeStatic ( int _x, int _y, int _height, int _width,
67 int _flavor );
68 void initializeFalling ( int _x, int _y, int _height, int _width,
69 int _flavor );
70 void initializeAwaking ( int _x, int _y, int _height, int pop_delay,
71 int awake_delay, ComboTabulator *combo, int _pop_color );
72 void timeStep ( int &l_x, int &l_y );
73 void startFalling ( ComboTabulator *combo = NULL, bool no_hang = false,
74 bool self_call = false );
75 void startShattering ( int &s_x, int s_y, int &pop_delay, int awake_delay,
76 ComboTabulator *combo );
78 bool considerShattering ( Garbage *due_to )
79 /*
80 * The grid is asking us if we should shatter due to the fact that our
81 * neighbor - due_to - is shattering. If due_to is null, we are shattering
82 * because of a neighboring elimination. Parts of the black garbage
83 * algorithm are handled in Grid.cxx
84 */
86 if (!due_to) return true;
87 if (flavor == GF_GRAY)
88 if (due_to->flavor == GF_GRAY)
89 return true;
90 else
91 return false;
92 if (flavor == GF_BLACK)
93 if (due_to->flavor == GF_BLACK)
94 return true;
95 else
96 return false;
97 if (due_to->flavor == GF_GRAY)
98 return false;
99 else
100 return true;
103 // free store id
104 int id;
106 // block type
107 int flavor;
109 // grid position
110 int x, y;
112 // garbage dimensions
113 int height, width;
115 // find position control; GC_STEPS_PER_GRID number of increments per grid
116 int f_y;
118 // garbage state
119 int state;
121 // time until awakening
122 int alarm;
124 // number of sections popped in awaking garbage
125 int sections_popped;
127 // true if we're in an initial fall
128 bool initial_fall;
130 // next direction of rotation upon popping
131 int pop_direction;
133 // time until pop
134 int pop_alarm;
136 // the block color before popping
137 int pop_color;
139 private:
140 // combo to pass on upon awakening
141 ComboTabulator *awaking_combo;
144 #endif