61 lines
2.2 KiB
C++
61 lines
2.2 KiB
C++
#include "behavior.h"
|
|
#include "../behavior.h"
|
|
#include <uf/utils/serialize/serializer.h>
|
|
#include <uf/utils/hook/hook.h>
|
|
#include <uf/utils/time/time.h>
|
|
#include <uf/utils/serialize/serializer.h>
|
|
#include <uf/utils/userdata/userdata.h>
|
|
#include <uf/utils/window/window.h>
|
|
#include <uf/utils/camera/camera.h>
|
|
#include <uf/utils/audio/audio.h>
|
|
#include <uf/ext/openvr/openvr.h>
|
|
#include <uf/utils/math/physics.h>
|
|
#include <uf/utils/renderer/renderer.h>
|
|
|
|
UF_BEHAVIOR_REGISTER_CPP(ext::PlayerModelBehavior)
|
|
#define this ((uf::Scene*) &self)
|
|
|
|
void ext::PlayerModelBehavior::initialize( uf::Object& self ) {
|
|
auto& scene = uf::scene::getCurrentScene();
|
|
auto& controller = scene.getController();
|
|
auto& controllerTransform = controller.getComponent<pod::Transform<>>();
|
|
auto& transform = this->getComponent<pod::Transform<>>();
|
|
auto& metadataJson = this->getComponent<uf::Serializer>();
|
|
transform.reference = &controllerTransform;
|
|
|
|
auto& metadata = this->getComponent<ext::PlayerModelBehavior::Metadata>();
|
|
metadata.serialize = [&]() {
|
|
metadataJson["track"] = metadata.track;
|
|
metadataJson["hide"] = metadata.hide;
|
|
};
|
|
metadata.deserialize = [&](){
|
|
metadata.track = metadataJson["track"].as<bool>();
|
|
metadata.hide = metadataJson["hide"].as<bool>();
|
|
metadata.scale = transform.scale;
|
|
|
|
transform.reference = metadata.track ? &controllerTransform : NULL;
|
|
};
|
|
this->addHook( "object:UpdateMetadata.%UID%", metadata.deserialize);
|
|
this->addHook( "object:Reload.%UID%", metadata.deserialize);
|
|
metadata.deserialize();
|
|
}
|
|
void ext::PlayerModelBehavior::tick( uf::Object& self ) {
|
|
if ( this->getChildren().size() != 1 ) return;
|
|
auto& metadata = this->getComponent<uf::Serializer>();
|
|
#if UF_ENTITY_METADATA_USE_JSON
|
|
metadata.deserialize();
|
|
#endif
|
|
}
|
|
|
|
void ext::PlayerModelBehavior::render( uf::Object& self ){
|
|
if ( this->getChildren().size() != 1 ) return;
|
|
|
|
auto& metadata = this->getComponent<ext::PlayerModelBehavior::Metadata>();
|
|
if ( !metadata.hide ) return;
|
|
auto& transform = this->getComponent<pod::Transform<>>();
|
|
transform.scale = uf::renderer::currentRenderMode->getName() == "Gui" ? pod::Vector3f{ 0, 0, 0 } : metadata.scale;
|
|
}
|
|
void ext::PlayerModelBehavior::destroy( uf::Object& self ){
|
|
|
|
}
|
|
#undef this |