Commit 6027c802 authored by cutealien's avatar cutealien

Add missing serialization to CSceneNodeAnimatorCameraFPS and CSceneNodeAnimatorCameraMaya.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@5196 dfc29bdd-3216-0410-991c-e03cc46cb475
parent bf7692d4
--------------------------
Changes in 1.9 (not yet released)
- Fix: Add missing serialization to CSceneNodeAnimatorCameraFPS and CSceneNodeAnimatorCameraMaya
- Fix: File-open dialog now restores the original locale after modifying it internally
- Fix first calculation of the camerascenenode boundingsphere.
- Fix bug with ignored opening brace in .X files with DeclData section. Thx @Alin for bugreport and patch.
......
......@@ -19,10 +19,10 @@ namespace scene
CSceneNodeAnimatorCameraFPS::CSceneNodeAnimatorCameraFPS(gui::ICursorControl* cursorControl,
f32 rotateSpeed, f32 moveSpeed, f32 jumpSpeed,
SKeyMap* keyMapArray, u32 keyMapSize, bool noVerticalMovement, bool invertY)
: CursorControl(cursorControl), MaxVerticalAngle(88.0f),
: CursorControl(cursorControl), MaxVerticalAngle(88.0f), NoVerticalMovement(noVerticalMovement),
MoveSpeed(moveSpeed), RotateSpeed(rotateSpeed), JumpSpeed(jumpSpeed),
MouseYDirection(invertY ? -1.0f : 1.0f),
LastAnimationTime(0), firstUpdate(true), firstInput(true), NoVerticalMovement(noVerticalMovement)
LastAnimationTime(0), firstUpdate(true), firstInput(true)
{
#ifdef _DEBUG
setDebugName("CCameraSceneNodeAnimatorFPS");
......@@ -350,6 +350,56 @@ ISceneNodeAnimator* CSceneNodeAnimatorCameraFPS::createClone(ISceneNode* node, I
return newAnimator;
}
void CSceneNodeAnimatorCameraFPS::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
{
ISceneNodeAnimator::serializeAttributes(out, options);
out->addFloat("MaxVerticalAngle", MaxVerticalAngle);
out->addBool("NoVerticalMovement", NoVerticalMovement);
out->addFloat("MoveSpeed", MoveSpeed);
out->addFloat("RotateSpeed", RotateSpeed);
out->addFloat("JumpSpeed", JumpSpeed);
out->addFloat("MouseYDirection", MouseYDirection);
out->addInt("KeyMapSize", (s32)KeyMap.size());
for ( u32 i=0; i < KeyMap.size(); ++i )
{
core::stringc name("Action");
name += core::stringc(i);
out->addInt(name.c_str(), (int)KeyMap[i].Action);
name = core::stringc("KeyCode") + core::stringc(i);
out->addInt(name.c_str(), (int)KeyMap[i].KeyCode);
}
}
void CSceneNodeAnimatorCameraFPS::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
{
ISceneNodeAnimator::deserializeAttributes(in, options);
MaxVerticalAngle = in->getAttributeAsFloat("MaxVerticalAngle", MaxVerticalAngle);
NoVerticalMovement = in->getAttributeAsBool("NoVerticalMovement", NoVerticalMovement);
MoveSpeed = in->getAttributeAsFloat("MoveSpeed", MoveSpeed);
RotateSpeed = in->getAttributeAsFloat("RotateSpeed", RotateSpeed);
JumpSpeed = in->getAttributeAsFloat("JumpSpeed", JumpSpeed);
MouseYDirection = in->getAttributeAsFloat("MouseYDirection", MouseYDirection);
if ( in->findAttribute("KeyMapSize") )
{
KeyMap.clear();
s32 keyMapSize = in->getAttributeAsInt("KeyMapSize");
for ( u32 i=0; i < (u32)keyMapSize; ++i )
{
SKeyMap keyMapEntry;
core::stringc name("Action");
name += core::stringc(i);
keyMapEntry.Action = static_cast<EKEY_ACTION>(in->getAttributeAsInt(name.c_str()));
name = core::stringc("KeyCode") + core::stringc(i);
keyMapEntry.KeyCode = static_cast<EKEY_CODE>(in->getAttributeAsInt(name.c_str()));
KeyMap.push_back(keyMapEntry);
}
}
}
} // namespace scene
} // namespace irr
......
......@@ -91,12 +91,20 @@ namespace scene
done with it. */
virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0) _IRR_OVERRIDE_;
//! Writes attributes of the scene node animator.
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const _IRR_OVERRIDE_;
//! Reads attributes of the scene node animator.
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_;
private:
void allKeysUp();
gui::ICursorControl *CursorControl;
f32 MaxVerticalAngle;
bool NoVerticalMovement;
f32 MoveSpeed;
f32 RotateSpeed;
......@@ -113,7 +121,6 @@ namespace scene
bool firstUpdate;
bool firstInput;
bool NoVerticalMovement;
};
} // end namespace scene
......
......@@ -330,6 +330,28 @@ ISceneNodeAnimator* CSceneNodeAnimatorCameraMaya::createClone(ISceneNode* node,
return newAnimator;
}
void CSceneNodeAnimatorCameraMaya::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
{
ISceneNodeAnimator::serializeAttributes(out, options);
out->addFloat("TargetMinDistance", TargetMinDistance);
out->addFloat("ZoomSpeed", ZoomSpeed);
out->addFloat("RotateSpeed", RotateSpeed);
out->addFloat("TranslateSpeed", TranslateSpeed);
out->addFloat("CurrentZoom", CurrentZoom);
}
void CSceneNodeAnimatorCameraMaya::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
{
ISceneNodeAnimator::deserializeAttributes(in, options);
TargetMinDistance = in->getAttributeAsFloat("TargetMinDistance", TargetMinDistance);
ZoomSpeed = in->getAttributeAsFloat("ZoomSpeed", ZoomSpeed);
RotateSpeed = in->getAttributeAsFloat("RotateSpeed", RotateSpeed);
TranslateSpeed = in->getAttributeAsFloat("TranslateSpeed", TranslateSpeed);
CurrentZoom = in->getAttributeAsFloat("CurrentZoom", CurrentZoom);
}
} // end namespace
} // end namespace
......@@ -22,7 +22,7 @@ namespace scene
//! Special scene node animator for FPS cameras
/** This scene node animator can be attached to a camera to make it act
like a 3d modelling tool camera
like a 3d modeling tool camera
*/
class CSceneNodeAnimatorCameraMaya : public ISceneNodeAnimatorCameraMaya
{
......@@ -88,6 +88,12 @@ namespace scene
this. */
virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0) _IRR_OVERRIDE_;
//! Writes attributes of the scene node animator.
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const _IRR_OVERRIDE_;
//! Reads attributes of the scene node animator.
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_;
private:
void allKeysUp();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment