#include "behavior.h" #include "../behavior.h" #include #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["hide player model"] = metadata.hide; }; metadata.deserialize = [&](){ metadata.hide = metadataJson["hide player model"].as(); metadata.scale = transform.scale; }; 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(); auto& scene = uf::scene::getCurrentScene(); auto& controller = scene.getController(); auto& controllerTransform = controller.getComponent>(); auto& transform = this->getComponent>(); /* if ( metadata["track via reference"].as() ) transform.reference = metadata["track player"].as() ? &controllerTransform : NULL; else if ( metadata["track player"].as() ) { transform.position = controllerTransform.position; transform.orientation = controllerTransform.orientation; } */ #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 player model"].as() ) return; auto& metadata = this->getComponent(); if ( !metadata.hide ) return; auto& scene = uf::scene::getCurrentScene(); auto& controller = scene.getController(); auto& player = this->getParent().as(); auto& model = this->getChildren().front()->as(); auto& transform = this->getComponent>(); // auto& renderMode = *uf::renderer::currentRenderMode; // if ( renderMode.getType() == "Deferred" ) { if ( player.getUid() == controller.getUid() && uf::renderer::currentRenderMode->getName() != "RenderTarget" ) { transform.scale = { 0, 0, 0 }; } else { transform.scale = metadata.scale; } } void ext::PlayerModelBehavior::destroy( uf::Object& self ){ } #undef this