#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& metadata = this->getComponent(); transform.reference = &controllerTransform; } 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; } } 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& scene = uf::scene::getCurrentScene(); auto& controller = scene.getController(); auto& player = this->getParent().as(); auto& model = this->getChildren().front()->as(); auto& transform = this->getComponent>(); if ( player.getUid() == controller.getUid() ) { transform.scale = { 0, 0, 0 }; } else { transform.scale = uf::vector::decode( metadata["system"]["transform"]["scale"], pod::Vector3f{1,1,1} ); } } void ext::PlayerModelBehavior::destroy( uf::Object& self ){ } #undef this