Files
SunnyLand/src/engine/component/physics_component.cpp
T

41 lines
1.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "physics_component.h"
#include "transform_component.h"
#include "../object/game_object.h"
#include "../physics/physics_engine.h"
#include <spdlog/spdlog.h>
namespace engine::component {
PhysicsComponent::PhysicsComponent(engine::physics::PhysicsEngine* physics_engine, bool use_gravity, float mass)
: physics_engine_(physics_engine), mass_(mass >= 0.0f ? mass : 1.0f), use_gravity_(use_gravity) {
if (!physics_engine_) {
spdlog::error("PhysicsComponent构造函数中,PhysicsEngine指针不能为nullptr!");
}
spdlog::trace("物理组件创建完成,质量: {}, 使用重力: {}", mass_, use_gravity_);
}
void PhysicsComponent::init() {
if (!owner_) {
spdlog::error("物理组件初始化前需要一个GameObject作为所有者!");
return;
}
if (!physics_engine_) {
spdlog::error("物理组件初始化时,PhysicsEngine未正确初始化。");
return;
}
transform_ = owner_->getComponent<TransformComponent>();
if (!transform_) {
spdlog::warn("物理组件初始化时,同一GameObject上没有找到TransformComponent组件。");
}
// 注册到PhysicsEngine
physics_engine_->registerComponent(this);
spdlog::trace("物理组件初始化完成。");
}
void PhysicsComponent::clean()
{
physics_engine_->unregisterComponent(this);
spdlog::trace("物理组件清理完成。");
}
} // namespace engine::component