void GOComponent::SetOwnerOrientation(const Ogre::Quaternion &orientation, bool updateReferences, bool updateChildren)
	{
		GameObjectPtr owner = mOwnerGO.lock();
		if (!owner.get()) return;
		owner->SetGlobalOrientation(orientation, false, updateReferences, updateChildren);
		Msg msg; msg.typeID = GameObject::MessageIDs::UPDATE_COMPONENT_ORIENTATION;
		msg.params.AddOgreQuat("Orientation", orientation);
		owner->BroadcastObjectMessage(msg, this);
	}
	void GOComponent::SetOwnerTransform(const Ogre::Vector3 &position, const Ogre::Quaternion &orientation, bool updateReferences, bool updateChildren)
	{
		GameObjectPtr owner = mOwnerGO.lock();
		if (!owner.get()) return;
		owner->SetGlobalPosition(position, false, updateReferences, updateChildren);
		owner->SetGlobalOrientation(orientation, false, updateReferences, updateChildren);
		Msg msg; msg.typeID = GameObject::MessageIDs::UPDATE_COMPONENT_TRANSFORM;
		owner->BroadcastObjectMessage(msg, this);
	}
	void GOComponent::SetOwnerPosition(const Ogre::Vector3 &position, bool updateReferences, bool updateChildren)
	{
		GameObjectPtr owner = mOwnerGO.lock();
		if (!owner.get()) return;
		owner->SetGlobalPosition(position, false, updateReferences, updateChildren);
		Msg msg; msg.typeID = GameObject::MessageIDs::UPDATE_COMPONENT_POSITION;
		msg.params.AddOgreVec3("Position", position);
		owner->BroadcastObjectMessage(msg, this);
	}
	void GOComponent::BroadcastObjectMessage(Msg &msg)
	{
		GameObjectPtr owner = mOwnerGO.lock();
		IceAssert(owner.get())
		owner->BroadcastObjectMessage(msg, this);
	}