// NeL - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef ENTITIES_H #define ENTITIES_H // // Includes // #include #include #include #include #include #include #include #include #include "physics.h" #include "animation.h" // // External definitions // namespace NLSOUND { class USource; } namespace NLPACS { class UMovePrimitive; } namespace NL3D { class UVisualCollisionEntity; class UPlayList; } namespace SBCLIENT { // // External classes // // An entity that will move through the landscape. // The possible entities are the Self (the player's avatar), the Other and the Snowball class CEntity { public: // Create a default entity CEntity () : Id(0xffffffff), Name(""), Angle(0.0f), AuxiliaryAngle(0.0f), InterpolatedAuxiliaryAngle(0.0f), AutoMove(false), Instance(NULL), Skeleton(NULL), Particule(NULL), Source(NULL), IsWalking(false), WasWalking(false), IsAiming(false), WasAiming(false), /*CurrentAnim(NoAnim), */NextEmptySlot(0), PlayList(NULL), BotState(0) { } // The id of the entity uint32 Id; // The name of the entity std::string Name; // Contain the target position for this entity NLMISC::CVector ServerPosition; // Contain the current position of the entity NLMISC::CVector Position; // The immediate speed of the entity NLMISC::CVector ImmediateSpeed; // The maximum speed of the entity float Speed, // The angle of the entity Angle, // Various angle controls for the interpolation AuxiliaryAngle, InterpolatedAuxiliaryAngle; // The trajectory (only for snowballs, defined in physics.h) CTrajectory Trajectory; // The state enum of the entity enum TState { Appear, Normal, Disappear }; // The state of this entity TState State; // The date of the beginning of this state NLMISC::TLocalTime StateStartTime; // The type enum of the entity enum TType { Self, Other, Snowball }; // The type of this entity TType Type; // Is it an auto-moving entity bool AutoMove; // The PACS move primitive NLPACS::UMovePrimitive *MovePrimitive; // The collision entity (for ground snapping) NL3D::UVisualCollisionEntity *VisualCollisionEntity; // The mesh instance associated to this entity NL3D::UInstance Instance; // The skeleton binded to the instance NL3D::USkeleton Skeleton; // The particle system (for appear and disappear effects) NL3D::UInstance Particule; // The sound source associated to the entity NLSOUND::USource *Source; void setState (TState state); bool IsWalking; bool WasWalking; bool IsAiming; bool WasAiming; // Playlist linked to this entity // EAnim CurrentAnim; uint NextEmptySlot; NL3D::UPlayList *PlayList; std::queue AnimQueue; NL3D::CAnimationTime StartAnimationTime; uint BotState; NLMISC::TLocalTime BotStateStart; }; // // Enums // // The collision bits used by pacs (dynamic collisions) enum { SelfCollisionBit = 1, OtherCollisionBit = 2, SnowballCollisionBit = 4, StaticCollisionBit = 8 }; // // External variables // // The entity representing the player avatar extern CEntity *Self; // The speed of the player extern float PlayerSpeed; // The speed of the snowball extern float SnowballSpeed; // The entities storage extern std::map Entities; typedef std::map::iterator EIT; extern uint32 NextEID; // // External functions // EIT findEntity (uint32 eid, bool needAssert = true); void addEntity (uint32 eid, std::string name, CEntity::TType type, const NLMISC::CVector &startPosition, const NLMISC::CVector &serverPosition); void removeEntity (uint32 eid); // when we turn online, we need to clear all offline entities void removeAllEntitiesExceptUs (); void deleteAllEntities(); void initEntities(); void updateEntities(); void releaseEntities(); // Reset the pacs position of an entity (in case pacs went wrong) void resetEntityPosition(uint32 eid); // Process the event when an entity shoots a snowball void shotSnowball(uint32 sid, uint32 eid, const NLMISC::CVector &start, const NLMISC::CVector &target, float speed, float deflagRadius); void renderEntitiesNames (); } /* namespace SBCLIENT */ #endif // ENTITIES_H /* End of entities.h */