freg  0.3
Free-Roaming Elementary Game
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
blocks.h
Go to the documentation of this file.
1  /* freg, Free-Roaming Elementary Game with open and interactive world
2  * Copyright (C) 2012-2014 Alexander 'mmaulwurff' Kromm
3  * mmaulwurff@gmail.com
4  *
5  * This file is part of FREG.
6  *
7  * FREG is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * FREG 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.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with FREG. If not, see <http://www.gnu.org/licenses/>. */
19 
20 #ifndef BLOCKS_H
21 #define BLOCKS_H
22 
23 #include "Inventory.h"
24 #include "blocks/Animal.h"
25 
26 class Plate : public Block {
27 public:
28  using Block::Block;
29 
30  int Weight() const override;
31  QString FullName() const override;
32  push_reaction PushResult(dirs) const override;
33 };
34 
35 class Ladder : public Block {
36 public:
37  using Block::Block;
38 
39  bool Catchable() const override;
40  int Weight() const override;
41  QString FullName() const override;
42  Block * DropAfterDamage(bool * delete_block) override;
43  push_reaction PushResult(dirs) const override;
44 };
45 
46 class Liquid : public Falling {
47  Q_OBJECT
48 public:
49  using Falling::Falling;
50 
51  int ShouldAct() const override;
52  int DamageKind() const override;
53  int DamageLevel() const override;
54  int LightRadius() const override;
55  bool Inscribe(QString) override;
56  void Damage(int dmg, int dmg_kind) override;
57  QString FullName() const override;
58  Block * DropAfterDamage(bool * delete_block) override;
59  wearable Wearable() const override;
60  push_reaction PushResult(dirs) const override;
61  inner_actions ActInner() override;
62 
63 protected:
64  void DoRareAction() override;
65 };
66 
67 class Grass : public Active {
68  Q_OBJECT
69 public:
70  using Active::Active;
71 
72  int ShouldAct() const override;
73  int DamageKind() const override;
74  int LightRadius() const override;
75  QString FullName() const override;
76  Block * DropAfterDamage(bool * delete_block) override;
77  inner_actions ActInner() override;
78 
79 protected:
80  void DoRareAction() override;
81 
82 private:
83  static bool IsBase(int ownsub, int ground);
84 };
85 
86 class Bush : public Active, public Inventory {
87  Q_OBJECT
88 
89  static const int BUSH_SIZE = 3;
90 public:
91  Bush(int sub, int id);
92  Bush(QDataStream & str, int sub, int id);
93 
94  int Weight() const override;
95  int ShouldAct() const override;
96  void ReceiveSignal(QString) override;
97  void Damage(int dmg, int dmg_kind) override;
98  QString FullName() const override;
99  Block * DropAfterDamage(bool * delete_block) override;
100  Inventory * HasInventory() override;
101  usage_types Use(Block * who) override;
102  inner_actions ActInner() override;
103 
104 protected:
105  void DoRareAction() override;
106  void SaveAttributes(QDataStream & out) const override;
107 };
108 
109 class Rabbit : public Animal {
110  Q_OBJECT
111 public:
112  using Animal::Animal;
113 
114  QString FullName() const override;
115  void ActFrequent() override;
116 
117 protected:
118  void DoRareAction() override;
119  int Attractive(int sub) const override;
120 
121 private:
122  int NutritionalValue(subs) const override;
123 };
124 
125 class Door : public Active {
126  Q_OBJECT
127 public:
128  Door(int sub, int id);
129  Door(QDataStream & str, int sub, int id);
130 
131  int ShouldAct() const override;
132  void ActFrequent() override;
133  void Damage(int dmg, int dmg_kind) override;
134  QString FullName() const override;
135  usage_types Use(Block * who) override;
136  push_reaction PushResult(dirs) const override;
137 
138 protected:
139  void SaveAttributes(QDataStream & out) const override;
140 
141 private:
142  bool shifted;
143  bool locked;
145 };
146 
147 class Clock : public Active {
148  Q_OBJECT
149 public:
150  Clock(int sub, int id);
151  Clock (QDataStream & str, int sub, int id);
152 
153  int Weight() const override;
154  int ShouldAct() const override;
155  bool Inscribe(QString) override;
156  void Damage(int dmg, int dmg_kind) override;
157  QString FullName() const override;
158  wearable Wearable() const override;
159  usage_types Use(Block * who) override;
160  inner_actions ActInner() override;
161 
162 protected:
163  void SaveAttributes(QDataStream &) const override;
164 
165 private:
166  int alarmTime = -1;
167  int timerTime = -1;
168 };
169 
170 class Text : public Block {
171 public:
172  using Block::Block;
173 
174  bool Inscribe(QString) override;
175  QString FullName() const override;
176  usage_types Use(Block * who) override;
177 };
178 
179 class Map : public Text {
180 public:
181  Map(int sub, int id);
182  Map(QDataStream & str, int sub, int id);
183 
184  QString FullName() const override;
185  wearable Wearable() const override;
186  usage_types Use(Block * who) override;
187  usage_types UseOnShredMove(Block * who) override;
188 
189 protected:
190  void SaveAttributes(QDataStream & out) const override;
191 
192 private:
193  /// coordinates map titled in. also ~center.
195  quint16 savedShift;
196  qint8 savedChar;
197 };
198 
199 class Bell : public Active {
200  Q_OBJECT
201 public:
202  using Active::Active;
203 
204  void Damage(int dmg, int dmg_kind) override;
205  QString FullName() const override;
206  wearable Wearable() const override;
207  usage_types Use(Block * who) override;
208 };
209 
210 class Telegraph : public Active {
211  Q_OBJECT
212 public:
213  Telegraph(int sub, int id);
214  Telegraph(QDataStream &, int sub, int id);
215 
216  int ShouldAct() const override;
217  bool Inscribe(QString) override;
218  void ReceiveSignal(QString) override;
219  QString FullName() const override;
220  wearable Wearable() const override;
221  inner_actions ActInner() override;
222  usage_types Use(Block * who) override;
223 
224 protected:
225  void SaveAttributes(QDataStream &) const override;
226 
227 private:
228  static QString sharedMessage;
230 };
231 
232 class MedKit : public Block {
233 public:
234  using Block::Block;
235  QString FullName() const override;
236  wearable Wearable() const override;
237  usage_types Use(Block * user) override;
238 };
239 
240 /** @brief The Informer class, provides various information.
241  *
242  * Can be used inside inventory and outside.
243  * Iron informer is compass. */
244 class Informer : public Block {
245 public:
246  using Block::Block;
247 
248  QString FullName() const override;
249  wearable Wearable() const override;
250  usage_types Use(Block * user) override;
251 };
252 
253 #endif // BLOCKS_H
QString FullName() const override
Definition: blocks.cpp:592
Definition: blocks.h:199
wearable Wearable() const override
Definition: blocks.cpp:590
void SaveAttributes(QDataStream &) const override
Definition: blocks.cpp:433
Block * DropAfterDamage(bool *delete_block) override
Should return dropped block.
Definition: blocks.cpp:55
QString FullName() const override
Definition: blocks.cpp:116
quint16 savedShift
Definition: blocks.h:195
QString FullName() const override
Definition: blocks.cpp:191
Definition: blocks.h:147
Clock(int sub, int id)
Definition: blocks.cpp:437
void ActFrequent() override
Definition: blocks.cpp:272
QString FullName() const override
Definition: blocks.cpp:170
push_reaction
Definition: header.h:95
push_reaction PushResult(dirs) const override
Definition: blocks.cpp:311
Block * DropAfterDamage(bool *delete_block) override
Should return dropped block.
Definition: blocks.cpp:181
int ShouldAct() const override
Definition: blocks.cpp:588
int ShouldAct() const override
Definition: blocks.cpp:188
int LightRadius() const override
Definition: blocks.cpp:99
push_reaction PushResult(dirs) const override
Definition: blocks.cpp:53
usage_types Use(Block *user) override
Definition: blocks.cpp:625
void DoRareAction() override
Definition: blocks.cpp:67
bool shifted
Definition: blocks.h:142
QString FullName() const override
Definition: blocks.cpp:313
wearable Wearable() const override
Definition: blocks.cpp:553
usage_types Use(Block *who) override
Definition: blocks.cpp:479
int ShouldAct() const override
Definition: blocks.cpp:310
int Weight() const override
Definition: blocks.cpp:373
void Damage(int dmg, int dmg_kind) override
Definition: blocks.cpp:555
wearable Wearable() const override
Definition: blocks.cpp:374
Map(int sub, int id)
Definition: blocks.cpp:534
Definition: blocks.h:35
Bush(int sub, int id)
Definition: blocks.cpp:223
QString FullName() const override
Definition: blocks.cpp:648
void SaveAttributes(QDataStream &out) const override
Definition: blocks.cpp:324
The Informer class, provides various information.
Definition: blocks.h:244
Door(int sub, int id)
Definition: blocks.cpp:329
qint8 savedChar
Definition: blocks.h:196
bool isReceiver
Definition: blocks.h:229
void DoRareAction() override
Definition: blocks.cpp:196
int alarmTime
Definition: blocks.h:166
void SaveAttributes(QDataStream &) const override
Definition: blocks.cpp:584
static const int BUSH_SIZE
Definition: blocks.h:89
static bool IsBase(int ownsub, int ground)
Definition: blocks.cpp:158
bool Inscribe(QString) override
Returns true on success.
Definition: blocks.cpp:465
push_reaction movable
Definition: blocks.h:144
int ShouldAct() const override
Definition: blocks.cpp:372
Definition: blocks.h:46
Definition: blocks.h:125
void Damage(int dmg, int dmg_kind) override
Definition: blocks.cpp:288
Definition: blocks.h:86
usage_types Use(Block *who) override
Definition: blocks.cpp:601
push_reaction PushResult(dirs) const override
Definition: blocks.cpp:39
int ShouldAct() const override
Definition: blocks.cpp:178
QString FullName() const override
Definition: blocks.cpp:357
void ActFrequent() override
Definition: blocks.cpp:301
int timerTime
Definition: blocks.h:167
void Damage(int dmg, int dmg_kind) override
Definition: blocks.cpp:105
bool Inscribe(QString) override
Returns true on success.
Definition: blocks.cpp:100
inner_actions ActInner() override
Definition: blocks.cpp:606
wearable Wearable() const override
Definition: blocks.cpp:101
void DoRareAction() override
Definition: blocks.cpp:244
inner_actions
See Shred::PhysEventsRare() for details.
Definition: Active.h:36
QString FullName() const override
Definition: blocks.cpp:560
bool Inscribe(QString) override
Returns true on success.
Definition: blocks.cpp:410
usage_types Use(Block *who) override
Definition: blocks.cpp:346
Provides declaration for class Inventory for freg.
Active(int sub, int id, int transp=UNDEF)
Definition: Active.cpp:166
bool Inscribe(QString) override
Returns true on success.
Definition: blocks.cpp:596
wearable Wearable() const override
Definition: blocks.cpp:623
Block * DropAfterDamage(bool *delete_block) override
Should return dropped block.
Definition: blocks.cpp:210
QString FullName() const override
Definition: blocks.cpp:622
Definition: Animal.h:27
QString FullName() const override
Definition: blocks.cpp:448
QString FullName() const override
Definition: blocks.cpp:42
usage_types Use(Block *who) override
Definition: blocks.cpp:192
Block * DropAfterDamage(bool *delete_block) override
Should return dropped block.
Definition: blocks.cpp:111
Animal(int sub, int id)
Definition: Animal.cpp:116
int LightRadius() const override
Definition: blocks.cpp:179
bool Catchable() const override
Definition: blocks.cpp:51
void Damage(int dmg, int dmg_kind) override
Definition: blocks.cpp:202
usage_types Use(Block *who) override
Definition: blocks.cpp:319
void SaveAttributes(QDataStream &out) const override
Definition: blocks.cpp:530
wearable Wearable() const override
Definition: blocks.cpp:475
Definition: blocks.h:179
void DoRareAction() override
Definition: blocks.cpp:126
wearable
Definition: Block.h:28
Definition: blocks.h:67
subs
Substance block is made from.
Definition: header.h:157
void Damage(int dmg, int dmg_kind) override
Definition: blocks.cpp:363
bool locked
Definition: blocks.h:143
int DamageKind() const override
Definition: blocks.cpp:183
Block(int sub, int kind, int transp=UNDEF)
Definition: Block.cpp:330
int DamageKind() const override
Definition: blocks.cpp:88
int ShouldAct() const override
Definition: blocks.cpp:98
int NutritionalValue(subs) const override
Definition: blocks.cpp:283
usage_types Use(Block *who) override
Definition: blocks.cpp:456
push_reaction PushResult(dirs) const override
Definition: blocks.cpp:103
static QString sharedMessage
Definition: blocks.h:228
Definition: Active.h:46
void ReceiveSignal(QString) override
Receive text signal.
Definition: blocks.cpp:589
usage_types
Definition: header.h:196
void ReceiveSignal(QString) override
Receive text signal.
Definition: blocks.cpp:189
usage_types Use(Block *who) override
Definition: blocks.cpp:564
inner_actions ActInner() override
Definition: blocks.cpp:194
dirs
Definition: header.h:85
QString FullName() const override
Definition: blocks.cpp:270
int DamageLevel() const override
Definition: blocks.cpp:96
inner_actions ActInner() override
Definition: blocks.cpp:102
Provides block ability to contain other blocks inside.
Definition: Inventory.h:33
usage_types Use(Block *user) override
Definition: blocks.cpp:639
Inventory * HasInventory() override
Definition: blocks.cpp:193
qint64 latiStart
Definition: blocks.h:194
void SaveAttributes(QDataStream &out) const override
Definition: blocks.cpp:218
Falling(int sub, int id, int transp=UNDEF)
Definition: Active.cpp:232
const quint8 sub
Definition: Block.h:177
int Weight() const override
Definition: blocks.cpp:190
Definition: blocks.h:26
QString FullName() const override
Definition: blocks.cpp:29
int Weight() const override
Definition: blocks.cpp:38
int Attractive(int sub) const override
Definition: blocks.cpp:234
Definition: blocks.h:232
inner_actions ActInner() override
Definition: blocks.cpp:180
QString FullName() const override
Definition: blocks.cpp:476
inner_actions ActInner() override
Definition: blocks.cpp:376
Block without special physics and attributes.
Definition: Block.h:89
Definition: blocks.h:109
qint64 longiStart
coordinates map titled in. also ~center.
Definition: blocks.h:194
Telegraph(int sub, int id)
Definition: blocks.cpp:572
wearable Wearable() const override
Definition: blocks.cpp:637
Definition: blocks.h:170
int Weight() const override
Definition: blocks.cpp:52
usage_types UseOnShredMove(Block *who) override
Definition: blocks.cpp:477