#include "behavior.h" #include "../behavior.h" #include #include #include #include #include #include #include #include #include #include #include #include #include UF_BEHAVIOR_REGISTER_CPP(ext::PlayerModelBehavior) UF_BEHAVIOR_TRAITS_CPP(ext::PlayerModelBehavior, ticks = true, renders = false, multithread = false) #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& metadata = this->getComponent(); auto& metadataJson = this->getComponent(); transform.reference = &controllerTransform; metadata.reference = &controllerTransform; this->addHook( "object:UpdateMetadata.%UID%", [&](){ metadata.deserialize(self, metadataJson); }); metadata.deserialize(self, metadataJson); } void ext::PlayerModelBehavior::tick( uf::Object& self ) { auto& metadata = this->getComponent(); if ( !metadata.hide || metadata.set || this->getChildren().size() != 1 ) return; auto& metadataJson = this->getComponent(); #if UF_ENTITY_METADATA_USE_JSON metadata.deserialize(); #endif this->process([&](uf::Entity* entity){ if ( !entity->hasComponent() ) return; auto& graphic = entity->getComponent(); auto& pipeline = graphic.getPipeline(); pipeline.metadata.process = false; metadata.set = true; }); metadata.set = true; } void ext::PlayerModelBehavior::render( uf::Object& self ){} void ext::PlayerModelBehavior::destroy( uf::Object& self ){} void ext::PlayerModelBehavior::Metadata::serialize( uf::Object& self, uf::Serializer& serializer ){ auto& transform = this->getComponent>(); /*this->*/track = serializer["track"].as(); /*this->*/hide = serializer["hide"].as(); /*this->*/scale = transform.scale; transform.reference = /*this->*/track ? /*this->*/reference : NULL; } void ext::PlayerModelBehavior::Metadata::deserialize( uf::Object& self, uf::Serializer& serializer ){ serializer["track"] = /*this->*/track; serializer["hide"] = /*this->*/hide; } #undef this