Planeshift
gem.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (C) 2003 Atomic Blue (info@planeshift.it, http://www.atomicblue.org)
4  *
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation (version 2 of the License)
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16  *
17  */
18 #ifndef PS_GEM_HEADER
19 #define PS_GEM_HEADER
20 
21 //=============================================================================
22 // Crystal Space Includes
23 //=============================================================================
24 #include <iengine/mesh.h>
25 #include <csutil/csobject.h>
26 
27 //=============================================================================
28 // Project Library Includes
29 //=============================================================================
30 #include "net/messages.h"
31 
32 //=============================================================================
33 // Local Includes
34 //=============================================================================
35 #include "npcclient.h"
36 #include "stat.h"
37 
42 class gemNPCActor;
43 class gemNPCObject;
44 class npcMesh;
45 
46 
47 //-----------------------------------------------------------------------------
48 
51 class psNpcMeshAttach : public scfImplementationExt1<psNpcMeshAttach,
52  csObject,
53  scfFakeInterface<psNpcMeshAttach> >
54 {
55 public:
57 
62 
66  {
67  return object;
68  }
69 
70 private:
71  gemNPCObject* object;
72 };
73 
74 //-----------------------------------------------------------------------------
75 
76 
77 
78 class gemNPCObject : public CS::Utility::WeakReferenced
79 {
80 public:
82  virtual ~gemNPCObject();
83 
84  bool InitMesh(const char* factname,const char* filename,
85  const csVector3 &pos,const float rotangle, const char* sector);
86  static void FiniMesh();
87 
88  iMeshWrapper* GetMeshWrapper();
89  void Move(const csVector3 &pos, float rotangle, const char* room);
90  void Move(const csVector3 &pos, float rotangle, const char* room, InstanceID instance);
91 
92  EID GetEID()
93  {
94  return eid;
95  }
96 
97  int GetType()
98  {
99  return type;
100  }
101 
102  const char* GetName()
103  {
104  return name.GetDataSafe();
105  }
106  virtual PID GetPID()
107  {
108  return PID(0);
109  }
110 
111  virtual const char* GetObjectType()
112  {
113  return "Object";
114  }
116  {
117  return NULL;
118  }
119 
120  virtual bool IsPickable()
121  {
122  return false;
123  }
124  virtual bool IsVisible()
125  {
126  return visible;
127  }
128  virtual bool IsInvisible()
129  {
130  return !visible;
131  }
132  virtual void SetVisible(bool vis)
133  {
134  visible = vis;
135  }
136  virtual void SetInvisible(bool invis)
137  {
138  SetVisible(!invis);
139  }
140 
141  virtual bool IsInvincible()
142  {
143  return invincible;
144  }
145  virtual void SetInvincible(bool inv)
146  {
147  invincible = inv;
148  }
149 
150  virtual bool IsAlive()
151  {
152  return isAlive;
153  }
154  virtual void SetAlive(bool alive);
155 
156  virtual NPC* GetNPC()
157  {
158  return NULL;
159  }
160 
161  virtual void SetPosition(csVector3 &pos, iSector* sector = NULL, InstanceID* instance = NULL);
162  virtual void SetInstance(InstanceID instance)
163  {
164  this->instance = instance;
165  }
167  {
168  return instance;
169  };
170 
171  npcMesh* pcmesh;
172 
173 protected:
174  static csRef<iMeshFactoryWrapper> nullfact;
175 
176  csString name;
177  EID eid;
178  int type;
179  bool visible;
181  bool isAlive;
182  float scale;
183  float baseScale;
184 
186 
187  csRef<iThreadReturn> factory;
188 };
189 
190 
192 {
193 public:
194 
196  virtual ~gemNPCActor();
197 
199 
200  virtual PID GetPID()
201  {
202  return playerID;
203  }
204  virtual EID GetOwnerEID()
205  {
206  return ownerEID;
207  }
208 
209  csString &GetRace()
210  {
211  return race;
212  };
213 
214  virtual const char* GetObjectType()
215  {
216  return "Actor";
217  }
219  {
220  return this;
221  }
222 
223  virtual void AttachNPC(NPC* newNPC);
224  virtual NPC* GetNPC()
225  {
226  return npc;
227  }
228 
229 
233  void SetHP(float hp);
234 
238  float GetHP();
239 
243  void SetMaxHP(float maxHP);
244 
248  float GetMaxHP() const;
249 
253  void SetHPRate(float hpRate);
254 
258  float GetHPRate() const;
259 
263  void SetMana(float mana);
264 
268  float GetMana();
269 
273  void SetMaxMana(float maxMana);
274 
278  float GetMaxMana() const;
279 
283  void SetManaRate(float manaRate);
284 
288  float GetManaRate() const;
289 
293  void SetPysStamina(float pysStamina);
294 
298  float GetPysStamina();
299 
303  void SetMaxPysStamina(float maxPysStamina);
304 
308  float GetMaxPysStamina() const;
309 
313  void SetPysStaminaRate(float pysStaminaRate);
314 
318  float GetPysStaminaRate() const;
319 
323  void SetMenStamina(float menStamina);
324 
328  float GetMenStamina();
329 
333  void SetMaxMenStamina(float maxMenStamina);
334 
338  float GetMaxMenStamina() const;
339 
343  void SetMenStaminaRate(float menStaminaRate);
344 
348  float GetMenStaminaRate() const;
349 
353  virtual bool SetWithinTribe(Tribe* tribe,Tribe** oldTribe = NULL);
354 
355 private:
359  virtual double GetProperty(MathEnvironment* env, const char* ptr);
361  virtual double CalcFunction(MathEnvironment* env, const char* functionName, const double* params);
362  virtual const char* ToString();
364 
365 protected:
366 
367  bool InitLinMove(const csVector3 &pos,float angle, const char* sector,
368  csVector3 top, csVector3 bottom, csVector3 offset);
369 
370  bool InitCharData(const char* textures, const char* equipment);
371 
372  PID playerID;
373  EID ownerEID;
374  csString race;
375 
377 
379 
380  // Stats
385 };
386 
387 
388 class gemNPCItem : public gemNPCObject
389 {
390 public:
391  enum Flags
392  {
393  NONE = 0,
394  NOPICKUP = 1 << 0
395  };
396 
398  virtual ~gemNPCItem();
399 
400  virtual const char* GetObjectType()
401  {
402  return "Item";
403  }
404 
405  virtual bool IsPickable();
406 
407  uint32_t GetUID() const;
408  uint32_t GetTribeID() const;
409 
410 protected:
411  uint32_t uid;
412  uint32_t tribeID;
413  int flags;
414 };
415 
418 #endif
gemNPCObject * GetObject()
Get the npc Object that the mesh has attached.
Definition: gem.h:65
uint32 InstanceID
Definition: psconst.h:64
Stat menStamina
Definition: gem.h:384
csString race
Definition: gem.h:374
csString & GetRace()
Definition: gem.h:209
psNPCClient * npcclient
Global connection to the NPC Client.
int flags
Definition: gem.h:413
This is a helper class that defines a mesh on the server.
Definition: npcmesh.h:55
SCF_INTERFACE(psNpcMeshAttach, 0, 0, 1)
virtual void SetInstance(InstanceID instance)
Definition: gem.h:162
virtual InstanceID GetInstance()
Definition: gem.h:166
A specific MathEnvironment to be used in a MathScript.
Definition: mathscript.h:188
virtual const char * GetObjectType()
Definition: gem.h:400
virtual EID GetOwnerEID()
Definition: gem.h:204
Helper class to attach a PlaneShift npc gem object to a particular mesh.
Definition: gem.h:51
virtual void SetVisible(bool vis)
Definition: gem.h:132
EID ownerEID
Definition: gem.h:373
PID playerID
Definition: gem.h:372
uint32_t uid
Definition: gem.h:411
virtual PID GetPID()
Definition: gem.h:200
InstanceID instance
Definition: gem.h:185
float baseScale
Definition: gem.h:183
virtual const char * GetObjectType()
Definition: gem.h:111
npcMesh * pcmesh
Definition: gem.h:169
EID GetEID()
Definition: gem.h:92
virtual bool IsInvincible()
Definition: gem.h:141
Movement related class.
Definition: linmove.h:68
Represents a stat for the NPC.
Definition: stat.h:29
int type
Definition: gem.h:178
static csRef< iMeshFactoryWrapper > nullfact
Definition: gem.h:174
Stat mana
Definition: gem.h:382
bool visible
Definition: gem.h:179
virtual bool IsVisible()
Definition: gem.h:124
bool isAlive
Definition: gem.h:181
virtual NPC * GetNPC()
Definition: gem.h:156
virtual NPC * GetNPC()
Definition: gem.h:224
uint32_t tribeID
Definition: gem.h:412
const char * GetName()
Definition: gem.h:102
virtual void SetInvisible(bool invis)
Definition: gem.h:136
This object represents each NPC managed by this superclient.
Definition: npc.h:126
virtual void SetInvincible(bool inv)
Definition: gem.h:145
The main NPC Client class holding references to important superclient objects.
Definition: npcclient.h:81
virtual bool IsInvisible()
Definition: gem.h:128
Tribe * withinTribe
Definition: gem.h:378
int GetType()
Definition: gem.h:97
psNpcMeshAttach(gemNPCObject *object)
Setup this helper with the object we want to attach with.
bool invincible
Definition: gem.h:180
psLinearMovement * pcmove
Definition: gem.h:198
virtual bool IsPickable()
Definition: gem.h:120
csRef< iThreadReturn > factory
Definition: gem.h:187
virtual gemNPCActor * GetActorPtr()
Definition: gem.h:115
virtual gemNPCActor * GetActorPtr()
Definition: gem.h:218
csString name
Definition: gem.h:176
NPC * npc
Definition: gem.h:376
float scale
Definition: gem.h:182
EID eid
Definition: gem.h:177
virtual const char * GetObjectType()
Definition: gem.h:214
virtual PID GetPID()
Definition: gem.h:106
virtual bool IsAlive()
Definition: gem.h:150
Stat pysStamina
Definition: gem.h:383
Holds list of tribe members, position of tribe home Keeps resources and handles tribe perceptions...
Definition: tribe.h:67
Stat hp
Points to the tribe home where this tribe is inside.
Definition: gem.h:381