#include "behavior.h" #include "../behavior.h" #include #include #include #include #include #include #include #include #include #include #include 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>(); auto& transform = this->getComponent>(); auto& metadataJson = this->getComponent(); transform.reference = &controllerTransform; auto& metadata = this->getComponent(); metadata.serialize = [&]() { metadataJson["track"] = metadata.track; metadataJson["hide"] = metadata.hide; }; metadata.deserialize = [&](){ metadata.track = metadataJson["track"].as(); metadata.hide = metadataJson["hide"].as(); 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(); #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(); if ( !metadata.hide ) return; auto& transform = this->getComponent>(); transform.scale = uf::renderer::currentRenderMode->getName() == "Gui" ? pod::Vector3f{ 0, 0, 0 } : metadata.scale; } void ext::PlayerModelBehavior::destroy( uf::Object& self ){ } #undef this