1 // Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
2 // Copyright (C) 2010 Winch Gate Property Limited
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU Affero General Public License as
6 // published by the Free Software Foundation, either version 3 of the
7 // License, or (at your option) any later version.
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 Affero General Public License for more details.
14 // You should have received a copy of the GNU Affero General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef NL_PROPERTY_DECODER_H
20 #define NL_PROPERTY_DECODER_H
25 #include "nel/misc/types_nl.h"
26 #include "nel/misc/vector.h"
27 #include "nel/misc/vectord.h"
29 #include "game_share/entity_types.h"
30 #include "game_share/action.h"
33 * An engine that allows to encode/decode continuous properties using delta values.
34 * \author Benjamin Legros
35 * \author Nevrax France
38 class CPropertyDecoder
42 /// A property entry, containing Garanted, ToGaranty and LastReceived values of action
46 CLFECOMMON::CAction::TValue LastReceived;
47 CLFECOMMON::TPacketNumber Packet;
48 void init() { Packet = 0xFFFFFFFF; LastReceived = 0; }
52 /// An entity entry, containing properties for this entity
56 CEntityEntry() : AssociationBits(0), EntryUsed(false), PosIsRelative(false), PosIsInterior(false) {}
57 CLFECOMMON::TSheetId Sheet
;
58 uint16 AssociationBits
;
62 // CPropertyEntry Properties[CLFECOMMON::LAST_CONTINUOUS_PROPERTY+1];
65 /// The entity entries
66 std::vector
<CEntityEntry
> _Entities
;
82 void init(uint maximum
) { setMaximumEntities(maximum
); clear (); }
83 void setMaximumEntities(uint maximum
);
85 void addEntity(CLFECOMMON::TCLEntityId entity
, CLFECOMMON::TSheetId sheet
);
86 bool removeEntity(CLFECOMMON::TCLEntityId entity
);
87 uint16
& associationBits( CLFECOMMON::TCLEntityId entity
) { return _Entities
[entity
].AssociationBits
; }
89 bool isUsed(CLFECOMMON::TCLEntityId entity
) const { return _Entities
[entity
].EntryUsed
; }
90 CLFECOMMON::TSheetId
sheet(CLFECOMMON::TCLEntityId entity
) const { return _Entities
[entity
].Sheet
; }
93 /** Receives actions from the front end. Actually transmits actions received
94 * by the client to the property decoder.
95 * \param packetNumber the number of the packet received
96 * \param ack the number of the acknowledged packet by the front end
97 * \param actions the actions sent to the client by the front end
99 void receive(CLFECOMMON::TPacketNumber packetNumber
, CLFECOMMON::TPacketNumber ack
, std::vector
<CLFECOMMON::CAction
*> &actions
);
101 /** Receives single action from the front end. Actually transmits action received
102 * by the client to the property decoder.
103 * \param packetNumber the number of the packet received
104 * \param ack the number of the acknowledged packet by the front end
105 * \param action the action sent to the client by the front end
107 void receive(CLFECOMMON::TPacketNumber packetNumber
, CLFECOMMON::CAction
*action
);
110 void decodeAbsPos2D( sint32
& x
, sint32
& y
, uint16 x16
, uint16 y16
)
112 x
= _RefPosX
+ (((sint32
)((sint16
)(x16
- _RefBitsX
))) << 4);
113 y
= _RefPosY
+ (((sint32
)((sint16
)(y16
- _RefBitsY
))) << 4);
116 /// Set player's reference position
117 void setReferencePosition(const NLMISC::CVectorD
&position
);
120 /// Retrieves a property value.
121 // const CLFECOMMON::CAction::TValue &getProperty(CLFECOMMON::TCLEntityId entity, CLFECOMMON::TProperty property) const;
123 /// Retrieves an entity position.
124 // void getPosition(CLFECOMMON::TCLEntityId entity, CLFECOMMON::CAction::TValue &posx, CLFECOMMON::CAction::TValue &posy, CLFECOMMON::CAction::TValue &posz) const;
128 #endif // NL_PROPERTY_DECODER_H
130 /* End of property_decoder.h */