| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #include "Scene/BsSceneActor.h"
- #include "Scene/BsSceneObject.h"
- namespace bs
- {
- SceneActor::SceneActor()
- :mMobility(ObjectMobility::Movable), mActive(true), mHash(0)
- {
-
- }
- SceneActor::~SceneActor()
- {
-
- }
- void SceneActor::setTransform(const Transform& transform)
- {
- if (mMobility != ObjectMobility::Movable)
- return;
- mTransform = transform;
- _markCoreDirty(ActorDirtyFlag::Transform);
- }
- void SceneActor::setMobility(ObjectMobility mobility)
- {
- mMobility = mobility;
- _markCoreDirty(ActorDirtyFlag::Mobility);
- }
- void SceneActor::setActive(bool active)
- {
- mActive = active;
- _markCoreDirty(ActorDirtyFlag::Active);
- }
- void SceneActor::_updateState(const SceneObject& so, bool force)
- {
- UINT32 curHash = so.getTransformHash();
- if (curHash != mHash || force)
- {
- setTransform(so.getTransform());
- mHash = curHash;
- }
- if (so.getActive() != mActive || force)
- setActive(so.getActive());
- if (so.getMobility() != mMobility || force)
- setMobility(so.getMobility());
- }
- char* SceneActor::syncActorTo(char* data)
- {
- data = rttiWriteElem(mTransform.getPosition(), data);
- data = rttiWriteElem(mTransform.getRotation(), data);
- data = rttiWriteElem(mTransform.getScale(), data);
- data = rttiWriteElem(mActive, data);
- data = rttiWriteElem(mMobility, data);
-
- return data;
- }
- char* SceneActor::syncActorFrom(char* data)
- {
- Vector3 position;
- Quaternion rotation;
- Vector3 scale;
- data = rttiReadElem(position, data);
- data = rttiReadElem(rotation, data);
- data = rttiReadElem(scale, data);
- data = rttiReadElem(mActive, data);
- data = rttiReadElem(mMobility, data);
- mTransform.setPosition(position);
- mTransform.setRotation(rotation);
- mTransform.setScale(scale);
- return data;
- }
- UINT32 SceneActor::getActorSyncDataSize() const
- {
- UINT32 size =
- rttiGetElemSize(mTransform.getPosition()) +
- rttiGetElemSize(mTransform.getRotation()) +
- rttiGetElemSize(mTransform.getScale()) +
- rttiGetElemSize(mActive) +
- rttiGetElemSize(mMobility);
- return size;
- }
- }
|