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 __ENTITY_H__
14 #define __ENTITY_H__
15 
16 #include <list>
17 
18 #include "ivandef.h"
19 
20 #define EXISTS 1
21 #define HAS_BE 2
22 #define ENTITY_FLAGS 3
23 
24 class square;
25 struct v2;
26 
27 class entity
28 {
29  public:
30   friend class pool;
31   entity(int);
32   entity(const entity&);
33   virtual ~entity();
Be()34   virtual void Be() { }
Exists()35   truth Exists() const { return Flags & EXISTS; }
36   void SendToHell();
IsEnabled()37   truth IsEnabled() const { return Flags & HAS_BE; }
38   void Enable();
39   void Disable();
40   virtual square* GetSquareUnderEntity(int = 0) const = 0;
SignalVolumeAndWeightChange()41   virtual void SignalVolumeAndWeightChange() { }
GetEmitation()42   col24 GetEmitation() const { return Emitation; }
SignalEmitationIncrease(col24)43   virtual void SignalEmitationIncrease(col24) { }
SignalEmitationDecrease(col24)44   virtual void SignalEmitationDecrease(col24) { }
ContentsCanBeSeenBy(ccharacter *)45   virtual truth ContentsCanBeSeenBy(ccharacter*) const { return false; }
AllowSpoil()46   virtual truth AllowSpoil() const { return false; }
SignalSpoil(material *)47   virtual void SignalSpoil(material*) { }
SignalSpoilLevelChange(material *)48   virtual void SignalSpoilLevelChange(material*) { }
49   virtual truth IsOnGround() const = 0;
AllowContentEmitation()50   virtual truth AllowContentEmitation() const { return true; }
SignalRustLevelChange()51   virtual void SignalRustLevelChange() { }
SignalBurn(material *)52   virtual void SignalBurn(material*) { }
Extinguish(truth)53   virtual void Extinguish(truth) { }
AddSpecialExtinguishMessageForPF()54   virtual void AddSpecialExtinguishMessageForPF() { }
AddExtinguishMessage()55   virtual void AddExtinguishMessage() { }
SignalBurnLevelChange()56   virtual void SignalBurnLevelChange() { }
SignalBurnLevelTransitionMessage()57   virtual void SignalBurnLevelTransitionMessage() { }
RemoveMaterial(material *)58   virtual material* RemoveMaterial(material*) { return 0; }
TryNecromancy(character *)59   virtual character* TryNecromancy(character*) { return 0; }
SignalDisappearance()60   virtual void SignalDisappearance() { }
SpecialEatEffect(character *,int)61   virtual void SpecialEatEffect(character*, int) { }
GetTrapID()62   virtual ulong GetTrapID() const { return 0; }
GetVictimID()63   virtual ulong GetVictimID() const { return 0; }
AddTrapName(festring &,int)64   virtual void AddTrapName(festring&, int) const { }
UnStick()65   virtual void UnStick() { }
UnStick(int)66   virtual void UnStick(int) { }
67   virtual truth TryToUnStick(character*, v2);
GetTrapType()68   virtual int GetTrapType() const { return 0; }
AddFlags(ulong What)69   void AddFlags(ulong What) { Flags |= What; }
RemoveFlags(ulong What)70   void RemoveFlags(ulong What) { Flags &= ~What; }
IsStuckTo(ccharacter *)71   virtual truth IsStuckTo(ccharacter*) const { return false; }
FindCarrier()72   virtual ccharacter* FindCarrier() const { return 0; }
73  protected:
74   col24 Emitation;
75   ulong Flags;
76  private:
77   entity* Last;
78   entity* Next;
79 };
80 
81 #endif
82