Planeshift
pscelclient.h
Go to the documentation of this file.
1 /*
2  * pscelclient.h by Matze Braun <MatzeBraun@gmx.de>
3  *
4  * Copyright (C) 2002-2009 Atomic Blue (info@planeshift.it, http://www.atomicblue.org)
5  *
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation (version 2 of the License)
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */
19 #ifndef __psCelClient_H__
20 #define __psCelClient_H__
21 //=============================================================================
22 // Crystal Space Includes
23 //=============================================================================
24 #include <csutil/cscolor.h>
25 #include <csutil/parray.h>
26 #include <csutil/refarr.h>
27 #include <csutil/list.h>
28 #include <csutil/hash.h>
29 #include <csutil/redblacktree.h>
30 #include <csutil/strhashr.h>
31 #include <iengine/collection.h>
32 #include <iengine/sector.h>
33 #include <imesh/animesh.h>
34 #include <imesh/animnode/skeleton2anim.h>
35 #include <imesh/animnode/speed.h>
36 
37 //=============================================================================
38 // Project Includes
39 //=============================================================================
40 
41 #include "net/cmdbase.h"
42 #include "engine/linmove.h"
43 
44 //=============================================================================
45 // Local Includes
46 //=============================================================================
47 #include "psengine.h"
48 
49 struct Trait;
50 struct iVFS;
51 struct iSpriteCal3DState;
52 struct iMeshObject;
53 
54 class MsgHandler;
55 class psClientDR;
56 class psNetPersist;
57 class psClientVitals;
58 class psCharAppearance;
59 class psEntityLabels;
60 class psShadowManager;
61 class psWorld;
62 class psPersistActor;
63 class psPersistItem;
64 class GEMClientObject;
65 class GEMClientActor;
66 class GEMClientItem;
68 class psEffect;
69 class psSolid;
70 
75 {
76 public:
78 
79  csVector3 pos;
80  csVector3 rot;
81  csString sector;
82 
83  UnresolvedPos(GEMClientObject* entity, const csVector3 &pos, const csVector3 &rot, const csString &sector)
84  {
85  this->entity = entity;
86  this->pos = pos;
87  this->rot = rot;
88  this->sector = sector;
89  }
90 };
91 
92 struct InstanceObject : public CS::Utility::FastRefCount<InstanceObject>
93 {
94  csRef<iMeshWrapper> pcmesh;
95  csBox3 bbox;
96  csWeakRefArray<iSector> sectors;
97  csRef<iMeshFactoryWrapper> nullFactory;
98  csRef<iThreadReturn> meshFact;
99  csRef<iThreadReturn> material;
100  ~InstanceObject();
101 };
102 
109 {
110 private:
111  iObjectRegistry* object_reg;
112  csPDelArray<GEMClientObject> entities;
113  csHash<GEMClientObject*, EID> entities_hash;
114  csRefArray<MsgEntry> newActorQueue;
115  csRefArray<MsgEntry> newItemQueue;
116  bool instantiateItems;
117 
118  // Keep seperate for speedups
119  csArray<GEMClientActionLocation*> actions;
120 
121  struct Effect
122  {
123  csString effectname;
124  csVector3 effectoffset;
125  bool rotateWithMesh;
126  };
127 
128  struct Light
129  {
130  csColor colour;
131  csVector3 lightoffset;
132  float radius;
133  };
134 
135  struct ItemEffect
136  {
137  bool activeOnGround;
138  csPDelArray<Effect> effects;
139  csPDelArray<Light> lights;
140  };
141 
142  csHash<ItemEffect*, csString> effectItems;
143 
145  void LoadEffectItems();
146 
147  csRedBlackTreeMap<csString, csRef<InstanceObject>,csFixedSizeAllocator<sizeof(CS::Container::RedBlackTreeNode<
148  csRedBlackTreePayload<csString,csRef<InstanceObject> > >)>, CS::Container::RedBlackTreeOrderingStrictWeak > instanceObjects;
149 
150  csRedBlackTreeMap<csString, csRef<iMeshFactoryWrapper>,csFixedSizeAllocator<sizeof(CS::Container::RedBlackTreeNode<
151  csRedBlackTreePayload<csString,csRef<iMeshFactoryWrapper> > >)>, CS::Container::RedBlackTreeOrderingStrictWeak > nullFactories;
152 
153 public:
154 
155  psCelClient();
156  virtual ~psCelClient();
157 
158  bool Initialize(iObjectRegistry* object_reg, MsgHandler* msghandler);
159 
160  void RequestServerWorld();
161  bool IsReady();
162 
163  GEMClientObject* FindObject(EID eid);
164 
165  void RequestActor();
166  void SetMainActor(GEMClientActor* object);
167  void SetPlayerReady(bool flag);
168 
169  void RemoveObject(GEMClientObject* entity);
170 
172  {
173  return clientdr;
174  }
175  const csPDelArray<GEMClientObject> &GetEntities() const
176  {
177  return entities;
178  }
179  bool IsMeshSubjectToAction(const char* sector,const char* mesh);
180  GEMClientActor* GetActorByName(const char* name, bool trueName = true) const;
181 
182  virtual void HandleMessage(MsgEntry* me);
183 
184  void SetupWorldColliders();
185 
187  {
188  return entityLabels;
189  }
191  {
192  return shadowManager;
193  }
194 
195  void SetMainPlayerName(const char* name)
196  {
197  player_name = name;
198  }
199 
200  const char* GetMainPlayerName()
201  {
202  return player_name;
203  }
204 
206  {
207  return local_player;
208  }
209 
211  void HandleItemEffect(const char* factName, iMeshWrapper* mw, bool onGround = true, const char* slot = 0,
212  csHash<int, csString>* effectids = 0, csHash<int, csString>* lightids = 0);
213 
216  void OnMapsLoaded();
217 
220  void OnRegionsDeleted(csArray<iCollection*> &regions);
221 
222  psWorld* GetWorld() const
223  {
224  return gameWorld;
225  }
226 
231  void HandleUnresolvedPos(GEMClientObject* entity, const csVector3 &pos, const csVector3 &rot, const csString &sector);
232 
233  void PruneEntities();
234 
235  bool IsUnresSector(iSector* sector)
236  {
237  return unresSector == sector;
238  }
239  iSector* GetUnresSector()
240  {
241  return unresSector;
242  }
243 
245  {
246  return requeststatus;
247  }
248 
250  void CheckEntityQueues();
252  void ForceEntityQueues();
253 
254  void Update(bool loaded);
255 
256 
263  void AttachObject(iObject* object, GEMClientObject* clientObject);
264 
271  void UnattachObject(iObject* object, GEMClientObject* clientObject);
272 
279  GEMClientObject* FindAttachedObject(iObject* object);
280 
281 
290  csArray<GEMClientObject*> FindNearbyEntities(iSector* sector, const csVector3 &pos, float radius, bool doInvisible = false);
291 
295  csPtr<InstanceObject> FindInstanceObject(const char* name) const;
296 
300  void AddInstanceObject(const char* name, csRef<InstanceObject> object);
301 
305  void RemoveInstanceObject(const char* name);
306 
307  csPtr<iMeshFactoryWrapper> FindNullFactory(const char* name) const;
308  void AddNullFactory(const char* name, csRef<iMeshFactoryWrapper> object);
309  void RemoveNullFactory(const char* name);
310 
315  void replaceRacialGroup(csString &string);
316 
318  {
319  return instantiateItems;
320  }
321 
322 protected:
324  csList<UnresolvedPos*>::Iterator FindUnresolvedPos(GEMClientObject* entity);
325 
327  csRef<iVFS> vfs;
328  csRef<MsgHandler> msghandler;
330 
333 
335 
336  void HandleWorld(MsgEntry* me);
337  void HandleActor(MsgEntry* me);
338  void HandleItem(MsgEntry* me);
339  void HandleActionLocation(MsgEntry* me);
340  void HandleObjectRemoval(MsgEntry* me);
341  void HandleNameChange(MsgEntry* me);
342  void HandleGuildChange(MsgEntry* me);
343  void HandleGroupChange(MsgEntry* me);
344 
345  void HandleMecsActivate(MsgEntry* me);
346 
347  void AddEntity(GEMClientObject* obj);
348 
352  void HandleStats(MsgEntry* me);
353 
355  csString player_name;
356 
357  csList<UnresolvedPos*> unresPos;
358  csRef<iSector> unresSector;
359 };
360 
362 {
368 };
369 
374 {
375 public:
376  GEMClientObject();
377  GEMClientObject(psCelClient* cel, EID id);
378  virtual ~GEMClientObject();
379 
381  {
382  return GEM_OBJECT;
383  }
384 
386  void SubstituteRacialMeshFact();
387 
389  void LoadMesh();
390 
396  void Move(const csVector3 &pos, const csVector3 &rotangle, const char* room);
397 
403  void Rotate(float xRot, float yRot, float zRot);
404 
406  virtual void SetPosition(const csVector3 &pos, const csVector3 &rot, iSector* sector);
407 
409  virtual csVector3 GetPosition();
410 
416  virtual float GetRotation();
417 
419  virtual iSector* GetSector() const;
420 
422  virtual iSectorList* GetSectors() const;
423 
425  virtual const csBox3 &GetBBox() const;
426 
427  EID GetEID()
428  {
429  return eid;
430  }
431  csRef<iMeshWrapper> pcmesh;
432 
433  virtual int GetMasqueradeType();
434 
435  int GetType()
436  {
437  return type;
438  }
439 
440  virtual const char* GetName()
441  {
442  return name;
443  }
444  virtual void ChangeName(const char* name);
445 
446  const char* GetFactName()
447  {
448  return factName;
449  }
450 
452  {
453  return entitylabel;
454  }
456  {
457  entitylabel = el;
458  }
459 
461  {
462  return shadow;
463  }
464  void SetShadow(psEffect* shadow)
465  {
466  this->shadow = shadow;
467  }
468 
472  virtual bool IsAlive()
473  {
474  return false;
475  }
476 
480  int Flags()
481  {
482  return flags;
483  }
484 
488  iMeshWrapper* GetMesh() const;
489 
490  virtual void Update();
491 
492  float RangeTo(GEMClientObject* obj, bool ignoreY);
493 
494  bool HasShadow() const
495  {
496  return hasShadow;
497  }
498 
499  bool HasLabel() const
500  {
501  return hasLabel;
502  }
503 
507  virtual bool CheckLoadStatus()
508  {
509  return false;
510  }
511 
515  virtual void PostLoad(bool /*nullmesh*/) { }
516 
517  /* we need to invoke this when we destroy the celClient itself, so the reference to the (now gone) celClient gets unset.
518  * Never call this from any other place, since it will unset the celClient reference for *all* GEMClientObjects
519  */
520  static void UnsetCelClient()
521  {
522  cel = NULL;
523  }
524 
525 protected:
526  static psCelClient* cel;
527 
528  csString name;
529  csString factName;
530  csString matName;
531  EID eid;
532  int type;
533 
534  int flags;
537  bool hasLabel;
538  bool hasShadow;
539 
540  csRef<InstanceObject> instance;
541  csRef<csShaderVariable> position;
542 };
543 
544 class psDRMessage;
545 
546 
547 //---------------------------------------------------------------------------
548 
549 
550 
551 //--------------------------------------------------------------------------
552 
555 {
556 public:
557 
559  virtual ~GEMClientActor();
560 
562  {
563  return GEM_ACTOR;
564  }
565 
573  void CopyNewestData(GEMClientActor &oldActor);
574 
581  void GetLastPosition(csVector3 &pos, float &yrot, iSector* &sector);
582 
587  const csVector3 GetVelocity() const;
588 
589  float GetYRotation() const;
590 
591  virtual void SetPosition(const csVector3 &pos, float rot, iSector* sector);
592 
595  void SetVelocity(const csVector3 &vel);
596 
599  void SetYRotation(const float yrot);
600 
601  void SetAlive(bool aliveFlag, bool newactor);
602  virtual bool IsAlive()
603  {
604  return alive;
605  }
606  virtual int GetMasqueradeType()
607  {
608  return masqueradeType;
609  }
610 
614  {
615  return vitalManager;
616  }
617 
618  csVector3 Pos() const;
619  csVector3 Rot() const;
620  iSector* GetSector() const;
621 
622  virtual const char* GetName(bool realName = true);
623 
624  const char* GetGuildName()
625  {
626  return guildName;
627  }
628  void SetGuildName(const char* guild)
629  {
630  guildName = guild;
631  }
632 
633  bool NeedDRUpdate(unsigned char &priority);
634  void SendDRUpdate(unsigned char priority,csStringHashReversible* msgstrings);
635  void SetDRData(psDRMessage &drmsg);
636  void StopMoving(bool worldVel = false);
637 
639  {
640  return charApp;
641  }
642 
644 
647 
648  void SetMode(uint8_t mode, bool newactor = false);
649  uint8_t GetMode()
650  {
651  return serverMode;
652  }
653  void SetIdleAnimation(const char* anim);
654  void SetAnimationVelocity(const csVector3 &velocity);
655  bool SetAnimation(const char* anim, int duration=0);
656  void RefreshCal3d();
657 
658  void SetChatBubbleID(unsigned int chatBubbleID);
659  unsigned GetChatBubbleID() const;
660 
661  csRef<iSpriteCal3DState> cal3dstate;
662  csRef<CS::Mesh::iAnimatedMesh> animeshObject;
663  csRef<CS::Animation::iSkeletonSpeedNode> speedNode;
664 
669  int GetAnimIndex(csStringHashReversible* msgstrings, csStringID animid);
670 
671  // The following hash is used by GetAnimIndex().
672  csHash<int,csStringID> anim_hash;
673 
677  virtual bool CheckLoadStatus();
678 
679  csString race;
680  csString partName;
681  csString mountFactname;
682  csString MounterAnim;
683  csString helmGroup;
684  csString BracerGroup;
685  csString BeltGroup;
686  csString CloakGroup;
687  csString equipment;
688  csString traits;
689  csVector3 lastSentVelocity,lastSentRotation;
690  bool stationary,path_sent;
692  unsigned short gender;
693  float scale;
694  float baseScale;
695  float mountScale;
696 
697  // Access functions for the group var
698  bool IsGroupedWith(GEMClientActor* actor);
699  bool IsOwnedBy(GEMClientActor* actor);
700  unsigned int GetGroupID()
701  {
702  return groupID;
703  }
704  void SetGroupID(unsigned int id)
705  {
706  groupID = id;
707  }
709  {
710  return ownerEID;
711  }
712  void SetOwnerEID(EID id)
713  {
714  ownerEID = id;
715  }
716 
717  csPDelArray<Trait> traitList;
718 
721  psLinearMovement &Movement();
722 
723  virtual void Update();
724 
725 protected:
726  // keep track of allocated ressources
727  csRef<iThreadReturn> factory;
728  csRef<iThreadReturn> mountFactory;
729  csRef<iMeshWrapper> rider;
730 
732 
733  unsigned int chatBubbleID;
734  unsigned int groupID;
735  EID ownerEID;
736  csString guildName;
737  uint8_t DRcounter;
739 
740  virtual void SwitchToRealMesh(iMeshWrapper* mesh);
741 
742  void InitCharData(const char* textures, const char* equipment);
743 
744  bool alive;
745 
747 
748  void SetCharacterMode(size_t id);
749  size_t movementMode;
750  uint8_t serverMode;
751 
754  {
755  csVector3 pos;
756  float yrot;
757  csString sector_name;
758  iSector* sector;
759  csVector3 top;
760  csVector3 bottom;
761  csVector3 offset;
762  csVector3 vel;
763  csString texParts;
764  };
765 
767 };
768 
771 {
772 public:
774  virtual ~GEMClientItem();
775 
777  {
778  return GEM_ITEM;
779  }
780 
784  virtual bool CheckLoadStatus();
785 
786 protected:
787  virtual void PostLoad();
789  csPtr<iMaterialWrapper> CloneMaterial(iMaterialWrapper* material);
790 
792 
793 private:
795  struct PostLoadData
796  {
797  csVector3 pos;
798  float xRot;
799  float yRot;
800  float zRot;
801  csString sector;
802  };
803 
804  PostLoadData* post_load;
805  csRef<iThreadReturn> factory;
806  csRef<iThreadReturn> material;
807  csRef<iShaderManager> shman;
808  csRef<iStringSet> strings;
809 };
810 
813 {
814 public:
816 
818  {
819  return GEM_ACTION_LOC;
820  }
821 
822  const char* GetMeshName()
823  {
824  return meshname;
825  }
826 
827 protected:
828  csString meshname;
829 };
830 
831 #endif
832 
virtual bool CheckLoadStatus()
Delayed mesh loading.
Definition: pscelclient.h:507
csRef< MsgHandler > msghandler
Definition: pscelclient.h:328
psWorld is in charge of managing all regions (zone map files) and loading/unloading them as needed...
Definition: psworld.h:47
csRef< iMeshWrapper > rider
Definition: pscelclient.h:729
psWorld * gameWorld
Definition: pscelclient.h:334
csString helmGroup
Definition: pscelclient.h:683
Collider creation class.
Definition: solid.h:47
unsigned int chatBubbleID
Definition: pscelclient.h:733
This is a player or another &#39;alive&#39; entity on the client.
Definition: pscelclient.h:554
psLinearMovement * linmove
Definition: pscelclient.h:643
unsigned int groupID
Definition: pscelclient.h:734
class psEntityLabels serves for creation and management of 2D sprites hanging above cel-entities that...
Definition: entitylabels.h:69
psEntityLabels * GetEntityLabels()
Definition: pscelclient.h:186
void SetMainPlayerName(const char *name)
Definition: pscelclient.h:195
csTicks lastDRUpdateTime
Definition: pscelclient.h:691
unsigned int GetGroupID()
Definition: pscelclient.h:700
psClientVitals * vitalManager
The Vital of the player with regards to his health/mana/fatigue/etc.
Definition: pscelclient.h:646
csRef< iMeshWrapper > pcmesh
Definition: pscelclient.h:94
const char * GetMainPlayerName()
Definition: pscelclient.h:200
psEffect * GetShadow()
Definition: pscelclient.h:460
psClientDR * GetClientDR()
Definition: pscelclient.h:171
psSolid * solid
Definition: pscelclient.h:791
GEMClientActor * local_player
Definition: pscelclient.h:354
An action location on the client.
Definition: pscelclient.h:812
csRef< iThreadReturn > mountFactory
Definition: pscelclient.h:728
void SetGuildName(const char *guild)
Definition: pscelclient.h:628
virtual void PostLoad(bool)
Delayed load &#39;post-process&#39;.
Definition: pscelclient.h:515
Defines a character trait.
Definition: psclientchar.h:58
const char * GetName(int id)
csString guildName
Definition: pscelclient.h:736
bool HasLabel() const
Definition: pscelclient.h:499
const char * GetFactName()
Definition: pscelclient.h:446
virtual GEMOBJECT_TYPE GetObjectType()
Definition: pscelclient.h:776
const char * GetGuildName()
Definition: pscelclient.h:624
psCharAppearance * CharAppearance()
Definition: pscelclient.h:638
csRef< iVFS > vfs
Definition: pscelclient.h:327
The structure of 1 queue entry (pointer to a message)
Definition: message.h:143
virtual bool IsAlive()
Indicate if this object is alive.
Definition: pscelclient.h:602
UnresolvedPos(GEMClientObject *entity, const csVector3 &pos, const csVector3 &rot, const csString &sector)
Definition: pscelclient.h:83
int flags
Various flags on the entity.
Definition: pscelclient.h:534
This is information about an entity with unresolved position (=sector not found) This happens when so...
Definition: pscelclient.h:74
psWorld * GetWorld() const
Definition: pscelclient.h:222
csPDelArray< Trait > traitList
Definition: pscelclient.h:717
Movement related class.
Definition: linmove.h:68
csRef< iThreadReturn > material
Definition: pscelclient.h:99
csString CloakGroup
Definition: pscelclient.h:686
The effect class.
Definition: pseffect.h:51
csVector3 rot
Definition: pscelclient.h:80
A manager class that handles all the details of a characters appearance.
Definition: charapp.h:65
Client version of the Cel Manager Requests world loading.
Definition: pscelclient.h:108
int requeststatus
Definition: pscelclient.h:326
virtual GEMOBJECT_TYPE GetObjectType()
Definition: pscelclient.h:380
uint8_t DRcounter
increments in loop to prevent out of order packet overwrites of better data
Definition: pscelclient.h:737
csString race
Definition: pscelclient.h:679
csRef< csShaderVariable > position
Definition: pscelclient.h:541
csString BeltGroup
Definition: pscelclient.h:685
uint8_t GetMode()
Definition: pscelclient.h:649
Manages dead reckoning, char position and updates.
Definition: psclientdr.h:47
Handles the incoming vital data from the server to update it&#39;s local values.
Definition: clientvitals.h:50
psEffect * shadow
Definition: pscelclient.h:536
csRef< iSector > unresSector
sector where we keep these entities
Definition: pscelclient.h:358
csList< UnresolvedPos * > unresPos
list of entities with unresolved location
Definition: pscelclient.h:357
csString equipment
Definition: pscelclient.h:687
psShadowManager * shadowManager
Definition: pscelclient.h:332
GEMClientObject * entity
our object ..
Definition: pscelclient.h:77
void SetOwnerEID(EID id)
Definition: pscelclient.h:712
Create shadows under the player/NPC/item entity.
Definition: shadowmanager.h:31
GEMOBJECT_TYPE
Definition: pscelclient.h:361
csString matName
Definition: pscelclient.h:530
csString MounterAnim
Definition: pscelclient.h:682
csString traits
Definition: pscelclient.h:688
csString mountFactname
Definition: pscelclient.h:681
GEMClientActor * GetMainPlayer()
Definition: pscelclient.h:205
csRef< InstanceObject > instance
Definition: pscelclient.h:540
psClientVitals * GetVitalMgr()
Get the condition manager on this actor.
Definition: pscelclient.h:613
const char * GetMeshName()
Definition: pscelclient.h:822
An item on the client.
Definition: pscelclient.h:770
csRef< iMeshWrapper > pcmesh
Definition: pscelclient.h:431
virtual GEMOBJECT_TYPE GetObjectType()
Definition: pscelclient.h:561
csRef< iMeshFactoryWrapper > nullFactory
Definition: pscelclient.h:97
static void UnsetCelClient()
Definition: pscelclient.h:520
virtual const char * GetName()
Definition: pscelclient.h:440
void void Initialize(iObjectRegistry *object_reg)
bool IsUnresSector(iSector *sector)
Definition: pscelclient.h:235
csRef< CS::Animation::iSkeletonSpeedNode > speedNode
Definition: pscelclient.h:663
csRef< iSpriteCal3DState > cal3dstate
Definition: pscelclient.h:661
void SetEntityLabel(psEffect *el)
Definition: pscelclient.h:455
void SetGroupID(unsigned int id)
Definition: pscelclient.h:704
An object that the client knows about.
Definition: pscelclient.h:373
This class is the client&#39;s and server&#39;s main interface for either sending network messages out or get...
Definition: msghandler.h:106
csVector3 pos
.. and its position that could not be set
Definition: pscelclient.h:79
csString BracerGroup
Definition: pscelclient.h:684
csRef< iThreadReturn > factory
Definition: pscelclient.h:727
iSector * GetUnresSector()
Definition: pscelclient.h:239
csString sector
Definition: pscelclient.h:81
virtual GEMOBJECT_TYPE GetObjectType()
Definition: pscelclient.h:817
psClientDR * clientdr
Definition: pscelclient.h:329
psEffect * entitylabel
Definition: pscelclient.h:535
csRef< iThreadReturn > meshFact
Definition: pscelclient.h:98
virtual bool IsAlive()
Indicate if this object is alive.
Definition: pscelclient.h:472
int Flags()
Get the flag bit field.
Definition: pscelclient.h:480
csString factName
Definition: pscelclient.h:529
csString partName
Definition: pscelclient.h:680
psEffect * GetEntityLabel()
Definition: pscelclient.h:451
virtual int GetMasqueradeType()
Definition: pscelclient.h:606
void SetShadow(psEffect *shadow)
Definition: pscelclient.h:464
bool InstanceItems()
Definition: pscelclient.h:317
psEntityLabels * entityLabels
Definition: pscelclient.h:331
uint8_t serverMode
Definition: pscelclient.h:750
PostLoadData * post_load
Definition: pscelclient.h:766
size_t movementMode
Definition: pscelclient.h:749
const csPDelArray< GEMClientObject > & GetEntities() const
Definition: pscelclient.h:175
bool HasShadow() const
Definition: pscelclient.h:494
int GetRequestStatus()
Definition: pscelclient.h:244
csRef< CS::Mesh::iAnimatedMesh > animeshObject
Definition: pscelclient.h:662
csString player_name
name of player character
Definition: pscelclient.h:355
psCharAppearance * charApp
Definition: pscelclient.h:731
static psCelClient * cel
Definition: pscelclient.h:526
csVector3 lastSentVelocity
Definition: pscelclient.h:689
csWeakRefArray< iSector > sectors
Definition: pscelclient.h:96
csHash< int, csStringID > anim_hash
Definition: pscelclient.h:672
unsigned short gender
Definition: pscelclient.h:692
psShadowManager * GetShadowManager()
Definition: pscelclient.h:190