freg  0.3
Free-Roaming Elementary Game
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Block.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 /**\file Block.h
21  * \brief Provides definition for class Block. */
22 
23 #ifndef BLOCK_H
24 #define BLOCK_H
25 
26 #include "header.h"
27 
28 enum wearable {
35 };
36 
38  // Put new damage kinds before DAMAGE_PUSH_UP.
39  DAMAGE_MINE, ///< 0
40  DAMAGE_DIG, ///< 1
41  DAMAGE_CUT, ///< 2
42  DAMAGE_THRUST, ///< 3
43  DAMAGE_CRUSH, ///< 4
44  DAMAGE_HEAT, ///< 5
45  DAMAGE_FREEZE, ///< 6
47  DAMAGE_HUNGER, ///< 8
48  DAMAGE_BREATH, ///< 9
49  DAMAGE_BITE, ///< 10
50  DAMAGE_TIME, ///< 11
51  DAMAGE_NO, ///< 12
52  DAMAGE_HANDS, ///< 13
53  DAMAGE_ACID, ///< 14
62 };
63 
64 enum weights { ///< weights in measures - mz (mezuro)
66  WEIGHT_WATER = 500,
67  WEIGHT_IRON = 300,
68  WEIGHT_STONE = 200,
69  WEIGHT_GLASS = 150,
70  WEIGHT_SAND = 100,
74 };
75 
76 enum sub_groups {
82 };
83 
84 class Inventory;
85 class Active;
86 class Falling;
87 class Animal;
88 
89 class Block {
90  /**\class Block Block.h
91  * \brief Block without special physics and attributes. */
92 public:
93  Block(int sub, int kind, int transp = UNDEF);
94  Block(QDataStream &, int sub, int kind, int transp = UNDEF);
95  virtual ~Block();
96 
97  Block & operator=(Block &) = delete;
98  Block(Block &) = delete;
99 
100  virtual QString FullName() const;
101  virtual bool Catchable() const;
102  /// Returns true on success.
103  virtual bool Inscribe(QString str);
104  virtual void Move(dirs direction);
105  virtual void Damage(int dmg, int dmg_kind);
106  virtual usage_types Use(Block * user);
107  virtual usage_types UseOnShredMove(Block * user);
108  virtual push_reaction PushResult(dirs) const;
109  /// Should return dropped block.
110  /** It can be pile(BOX, DIFFERENT) containing all dropped blocks, or
111  * block itself.
112  * Set delete_self false if this block itself should not be deleted.
113  * (by default block is deleted, beware). */
114  virtual Block * DropAfterDamage(bool * delete_self);
115 
116  virtual Inventory * HasInventory();
117  virtual Animal * IsAnimal();
118  virtual Active * ActiveBlock();
119  virtual Falling * ShouldFall();
120 
121  virtual wearable Wearable() const;
122  virtual int DamageKind() const;
123  virtual int DamageLevel() const;
124 
125  virtual int LightRadius() const;
126  virtual int Weight() const;
127  /// Receive text signal.
128  virtual void ReceiveSignal(QString);
129 
130  /// Determines kind and sub, unique for every kind-sub pair.
131  int GetId() const;
132  /// Set maximum durability.
133  void Restore();
134  /// Set durability to null.
135  void Break();
136  /// Increase durability, no more than MAX_DURABILITY.
137  void Mend(int plus);
138  void SetDir(int dir);
139 
140  dirs GetDir() const;
141  int GetDurability() const;
142  QString GetNote() const;
143  inline int Transparent() const { return transparent; }
144  inline int Sub() const { return sub; }
145  inline int Kind() const { return kind; }
146 
147  bool operator==(const Block &) const;
148  bool operator!=(const Block &) const;
149 
150  /// Important! If block will be used after save,
151  /// call RestoreDurabilityAfterSave.
152  void SaveToFile(QDataStream & out);
153  void SaveNormalToFile(QDataStream & out) const;
154  /// Importart! Use it if block won't be deleted after SaveToFile.
156 
157  /// Returns translated substance name.
158  static QString SubName(int sub);
159  /// Returns translated substance name with first upper letter.
160  static QString SubNameUpper(int sub);
161  static sub_groups GetSubGroup(int sub);
162  static dirs MakeDirFromDamage(int damage_kind);
163  static QString DirString(dirs);
164 
165 protected:
166  virtual void SaveAttributes(QDataStream &) const;
167  /// To convert DAMAGE_PUSH_UP...WEST to corresponding direction.
168 
169  quint16 noteId;
170 
171 private:
172  int Transparency(int transp, int sub) const;
173 
174  qint16 durability;
175  const quint8 transparent;
176  const quint8 kind;
177  const quint8 sub;
178  quint8 direction;
179 };
180 
181 #endif // BLOCK_H
virtual usage_types UseOnShredMove(Block *user)
Definition: Block.cpp:214
virtual QString FullName() const
Definition: Block.cpp:88
virtual void SaveAttributes(QDataStream &) const
Definition: Block.cpp:307
quint16 noteId
To convert DAMAGE_PUSH_UP...WEST to corresponding direction.
Definition: Block.h:169
void Mend(int plus)
Increase durability, no more than MAX_DURABILITY.
Definition: Block.cpp:238
void SaveNormalToFile(QDataStream &out) const
Definition: Block.cpp:324
int Transparency(int transp, int sub) const
Definition: Block.cpp:101
void SetDir(int dir)
Definition: Block.cpp:269
virtual bool Catchable() const
Definition: Block.cpp:206
push_reaction
Definition: header.h:95
static QString SubName(int sub)
Returns translated substance name.
Definition: Block.cpp:69
static QString SubNameUpper(int sub)
Returns translated substance name with first upper letter.
Definition: Block.cpp:77
Definition: header.h:211
void RestoreDurabilityAfterSave()
Importart! Use it if block won't be deleted after SaveToFile.
Definition: Block.cpp:328
virtual void Damage(int dmg, int dmg_kind)
Definition: Block.cpp:117
13
Definition: Block.h:52
virtual int DamageKind() const
Definition: Block.cpp:208
virtual int Weight() const
Definition: Block.cpp:242
int Transparent() const
Definition: Block.h:143
sub_groups
Definition: Block.h:76
10
Definition: Block.h:49
Block & operator=(Block &)=delete
virtual push_reaction PushResult(dirs) const
Definition: Block.cpp:201
dirs GetDir() const
Definition: Block.cpp:231
static sub_groups GetSubGroup(int sub)
Definition: Block.cpp:275
2
Definition: Block.h:41
void Restore()
Set maximum durability.
Definition: Block.cpp:229
virtual Inventory * HasInventory()
Definition: Block.cpp:224
bool operator==(const Block &) const
Definition: Block.cpp:299
5
Definition: Block.h:44
weights in measures - mz (mezuro)
Definition: Block.h:65
1
Definition: Block.h:40
virtual int LightRadius() const
Definition: Block.cpp:210
14
Definition: Block.h:53
static dirs MakeDirFromDamage(int damage_kind)
Definition: Block.cpp:83
bool operator!=(const Block &) const
Definition: Block.cpp:297
virtual int DamageLevel() const
Definition: Block.cpp:209
virtual Falling * ShouldFall()
Definition: Block.cpp:227
const quint8 transparent
Definition: Block.h:175
Definition: Animal.h:27
virtual Animal * IsAnimal()
Definition: Block.cpp:225
static QString DirString(dirs)
Definition: Block.cpp:75
int Kind() const
Definition: Block.h:145
int Sub() const
Definition: Block.h:144
virtual wearable Wearable() const
Definition: Block.cpp:212
virtual usage_types Use(Block *user)
Definition: Block.cpp:213
wearable
Definition: Block.h:28
QString GetNote() const
Definition: Block.cpp:234
qint16 durability
Definition: Block.h:174
Block(int sub, int kind, int transp=UNDEF)
Definition: Block.cpp:330
virtual Block * DropAfterDamage(bool *delete_self)
Should return dropped block.
Definition: Block.cpp:184
0
Definition: Block.h:39
quint8 direction
Definition: Block.h:178
Definition: Active.h:46
usage_types
Definition: header.h:196
int GetId() const
Determines kind and sub, unique for every kind-sub pair.
Definition: Block.cpp:205
dirs
Definition: header.h:85
weights
Definition: Block.h:64
virtual Active * ActiveBlock()
Definition: Block.cpp:226
Provides block ability to contain other blocks inside.
Definition: Inventory.h:33
virtual ~Block()
Definition: Block.cpp:358
const quint8 kind
Definition: Block.h:176
int GetDurability() const
Definition: Block.cpp:232
const quint8 sub
Definition: Block.h:177
void Break()
Set durability to null.
Definition: Block.cpp:230
void SaveToFile(QDataStream &out)
Definition: Block.cpp:309
11
Definition: Block.h:50
damage_kinds
Definition: Block.h:37
virtual void Move(dirs direction)
Definition: Block.cpp:207
virtual void ReceiveSignal(QString)
Receive text signal.
Definition: Block.cpp:211
Block without special physics and attributes.
Definition: Block.h:89
12
Definition: Block.h:51
virtual bool Inscribe(QString str)
Returns true on success.
Definition: Block.cpp:216