| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // ----------------------------------------------------------------
- // From Game Programming in C++ by Sanjay Madhav
- // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
- //
- // Released under the BSD License
- // See LICENSE in root directory for full details.
- // ----------------------------------------------------------------
- #include "BoxComponent.h"
- #include "Actor.h"
- #include "Game.h"
- #include "PhysWorld.h"
- #include "LevelLoader.h"
- BoxComponent::BoxComponent(Actor* owner, int updateOrder)
- :Component(owner, updateOrder)
- ,mObjectBox(Vector3::Zero, Vector3::Zero)
- ,mWorldBox(Vector3::Zero, Vector3::Zero)
- ,mShouldRotate(true)
- {
- mOwner->GetGame()->GetPhysWorld()->AddBox(this);
- }
- BoxComponent::~BoxComponent()
- {
- mOwner->GetGame()->GetPhysWorld()->RemoveBox(this);
- }
- void BoxComponent::OnUpdateWorldTransform()
- {
- // Reset to object space box
- mWorldBox = mObjectBox;
- // Scale
- mWorldBox.mMin *= mOwner->GetScale();
- mWorldBox.mMax *= mOwner->GetScale();
- // Rotate (if we want to)
- if (mShouldRotate)
- {
- mWorldBox.Rotate(mOwner->GetRotation());
- }
- // Translate
- mWorldBox.mMin += mOwner->GetPosition();
- mWorldBox.mMax += mOwner->GetPosition();
- }
- void BoxComponent::LoadProperties(const rapidjson::Value& inObj)
- {
- Component::LoadProperties(inObj);
- JsonHelper::GetVector3(inObj, "objectMin", mObjectBox.mMin);
- JsonHelper::GetVector3(inObj, "objectMax", mObjectBox.mMax);
- JsonHelper::GetVector3(inObj, "worldMin", mWorldBox.mMin);
- JsonHelper::GetVector3(inObj, "worldMax", mWorldBox.mMax);
- JsonHelper::GetBool(inObj, "shouldRotate", mShouldRotate);
- }
- void BoxComponent::SaveProperties(rapidjson::Document::AllocatorType & alloc, rapidjson::Value & inObj) const
- {
- Component::SaveProperties(alloc, inObj);
- JsonHelper::AddVector3(alloc, inObj, "objectMin", mObjectBox.mMin);
- JsonHelper::AddVector3(alloc, inObj, "objectMax", mObjectBox.mMax);
- JsonHelper::AddVector3(alloc, inObj, "worldMin", mWorldBox.mMin);
- JsonHelper::AddVector3(alloc, inObj, "worldMax", mWorldBox.mMax);
- JsonHelper::AddBool(alloc, inObj, "shouldRotate", mShouldRotate);
- }
|