// Ryzom - 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 RY_ENTITY_STATE_H
#define RY_ENTITY_STATE_H
#include "nel/misc/vector_2d.h"
#include "nel/misc/vector.h"
#include "game_share/far_position.h"
#include "game_share/mirror_prop_value.h"
/**
* CEntityState
* \author Stephane Coutelas
* \author Nevrax France
* \date 2002
*/
class CEntityState
{
public:
// Start by declaring methods for persistent load/ save operations
// The following macro is defined in persistent_data.h
// At time of writing it evaluated to:
// void store(CPersistentDataRecord &pdr) const;
// void apply(CPersistentDataRecord &pdr);
DECLARE_PERSISTENCE_METHODS
CMirrorPropValueAlice< sint32, CPropLocationPacked<2> > X;
CMirrorPropValueAlice< sint32, CPropLocationPacked<2> > Y;
CMirrorPropValueAlice< sint32, CPropLocationPacked<2> > Z;
CMirrorPropValueAlice< float, CPropLocationPacked<2> > Heading;
CEntityState()
{
clear();
}
void clear()
{
X=0;
Y=0;
Z=0;
Heading=0;
}
const CEntityState &operator = (const COfflineEntityState &s)
{
X = s.X;
Y = s.Y;
Z = s.Z;
Heading = s.Heading;
return *this;
}
/**
* operator=
*/
void setCOfflineEntityState( COfflineEntityState &s ) const
{
s.X = X;
s.Y = Y;
s.Z = Z;
s.Heading = Heading;
}
/**
* Store temporaryly the state from an COfflineEntityState object (for later mirrorizing)
*/
void storeToTemp( const COfflineEntityState& state )
{
X= state.X;
Y= state.Y;
Z= state.Z;
Heading= state.Heading;
}
/**
* Serial (read to temp storage, or write from mirror)
*/
void serial(NLMISC::IStream &f) throw(NLMISC::EStream)
{
X.serialRTWM( f );
Y.serialRTWM( f );
Z.serialRTWM( f );
Heading.serialRTWM( f );
}
/**
* Fill vector in meter corresponding to state
*/
void getVector( NLMISC::CVector& v ) const
{
v.x = X * 0.001f;
v.y = Y * 0.001f;
v.z = Z * 0.001f;
}
/**
* Fill a CVectorfD in meter corresponding to state
*/
void getVector2f( NLMISC::CVector2f& v ) const
{
v.x = X * 0.001f;
v.y = Y * 0.001f;
}
};
inline COfflineEntityState::COfflineEntityState(const CEntityState& state)
{
X = state.X;
Y = state.Y;
Z = state.Z;
Heading = state.Heading;
}
#endif // RY_ENTITY_STATE_H
/* entity_state.h */