1 /*
2  *
3  *  Iter Vehemens ad Necem (IVAN)
4  *  Copyright (C) Timo Kiviluoto
5  *  Released under the GNU General
6  *  Public License
7  *
8  *  See LICENSING which should be included
9  *  along with this file for more details
10  *
11  */
12 
13 #ifndef __SQUARE_H__
14 #define __SQUARE_H__
15 
16 #include "festring.h"
17 #include "ivandef.h"
18 #include "v2.h"
19 
20 class area;
21 class gterrain;
22 class oterrain;
23 class outputfile;
24 class inputfile;
25 class character;
26 
27 class square
28 {
29  public:
30   square(area*, v2);
31   virtual ~square();
32   virtual void Save(outputfile&) const;
33   virtual void Load(inputfile&);
34   virtual void AddCharacter(character*);
35   virtual void RemoveCharacter();
GetCharacter()36   virtual character* GetCharacter() const { return Character; }
GetLastSeen()37   ulong GetLastSeen() const { return LastSeen; }
GetPos()38   v2 GetPos() const { return Pos; }
GetArea()39   area* GetArea() const { return AreaUnder; }
40   virtual gterrain* GetGTerrain() const = 0;
41   virtual oterrain* GetOTerrain() const = 0;
GetMemorizedDescription()42   festring GetMemorizedDescription() { return MemorizedDescription; }
SetMemorizedDescription(cfestring & What)43   void SetMemorizedDescription(cfestring& What) { MemorizedDescription = What; }
44   virtual truth CanBeSeenByPlayer(truth = false) const = 0;
45   virtual truth CanBeSeenFrom(v2, long, truth = false) const = 0;
SendNewDrawRequest()46   void SendNewDrawRequest() { Flags |= NEW_DRAW_REQUEST; }
SendStrongNewDrawRequest()47   void SendStrongNewDrawRequest() { Flags |= STRONG_NEW_DRAW_REQUEST; }
48   cchar* SurviveMessage(character*) const;
49   cchar* MonsterSurviveMessage(character*) const;
50   cchar* DeathMessage(character*) const;
51   cchar* MonsterDeathVerb(character*) const;
52   cchar* ScoreEntry(character*) const;
53   truth IsFatalToStay() const;
54   int GetEntryDifficulty() const;
55   int GetRestModifier() const;
IncStaticAnimatedEntities()56   void IncStaticAnimatedEntities()
57   {
58     ++StaticAnimatedEntities;
59     ++AnimatedEntities;
60   }
DecStaticAnimatedEntities()61   void DecStaticAnimatedEntities()
62   {
63     --StaticAnimatedEntities;
64     --AnimatedEntities;
65   }
IncAnimatedEntities()66   void IncAnimatedEntities() { ++AnimatedEntities; }
DecAnimatedEntities()67   void DecAnimatedEntities() { --AnimatedEntities; }
68   truth CanBeSeenBy(ccharacter*, truth = false) const;
GetLuminance()69   col24 GetLuminance() const { return Luminance; }
70   square* GetNeighbourSquare(int) const;
71   square* GetNearSquare(v2) const;
72   virtual int GetSquareWalkability() const = 0;
SetCharacter(character * What)73   void SetCharacter(character* What) { Character = What; }
AddFlags(ulong What)74   void AddFlags(ulong What) { Flags |= What; }
RemoveFlags(ulong What)75   void RemoveFlags(ulong What) { Flags &= ~What; }
HasBeenSeen()76   virtual truth HasBeenSeen() const { return LastSeen; }
77   virtual void SurviveEffect(character*);
78  protected:
79   festring MemorizedDescription;
80   area* AreaUnder;
81   character* Character;
82   v2 Pos;
83   col24 Luminance;
84   mutable ulong Flags;
85   ushort StaticAnimatedEntities;
86   ushort AnimatedEntities;
87   mutable uchar LastSeen;
88 };
89 
90 #endif
91