#include "behavior.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../../ext.h" #include "../../gui/gui.h" #include #include namespace { uf::Object* circleIn; uf::Object* circleOut; } EXT_BEHAVIOR_REGISTER_CPP(StartMenuBehavior) EXT_BEHAVIOR_REGISTER_AS_OBJECT(StartMenuBehavior, StartMenu) #define this ((uf::Scene*) &self) void ext::StartMenuBehavior::initialize( uf::Object& self ) { uf::Serializer& metadata = this->getComponent(); uf::Asset& assetLoader = this->getComponent(); /* Magic Circle Outter */ { // circleOut = (uf::Object*) this->findByUid( this->loadChildUid("./gui/mainmenu/circle-out.json", true) ); circleOut = this->loadChildPointer("./gui/mainmenu/circle-out.json", true); } /* Magic Circle Inner */ { // circleIn = (uf::Object*) this->findByUid( this->loadChildUid("./gui/mainmenu/circle-in.json", true) ); circleIn = this->loadChildPointer("./gui/mainmenu/circle-in.json", true); } // update camera { auto& controller = this->getController(); controller.getComponent().update(true); pod::Transform<>& transform = controller.getComponent>(); uf::Serializer json; json.readFromFile("./data/entities/player.json"); controller.getComponent()["overlay"] = json["metadata"]["overlay"]; } } void ext::StartMenuBehavior::tick( uf::Object& self ) { uf::Serializer& metadata = this->getComponent(); uf::Asset& assetLoader = this->getComponent(); if ( circleIn ) { pod::Transform<>& transform = circleIn->getComponent>(); static float time = 0.0f; float speed = 0.0125f; uf::Serializer& metadata = circleIn->getComponent(); if ( metadata["hovered"].asBool() ) speed = 0.25f; time += uf::physics::time::delta * -speed; transform.orientation = uf::quaternion::axisAngle( { 0.0f, 0.0f, 1.0f }, time ); static pod::Vector3f start = { transform.position.x, -2.0f, 0.0f }; static pod::Vector3f end = transform.position; static float delta = 0.0f; if ( !metadata["initialized"].asBool() ) delta = 0.0f; metadata["initialized"] = true; if ( delta >= 1 ) delta = 1; else { delta += uf::physics::time::delta * 1.5f; transform.position = uf::vector::lerp( start, end, delta ); } // metadata["color"][3] = alpha; } if ( circleOut ) { pod::Transform<>& transform = circleOut->getComponent>(); uf::Serializer& metadata = circleOut->getComponent(); static float time = 0.0f; float speed = 0.0125f; if ( metadata["hovered"].asBool() ) speed = 0.25f; time += uf::physics::time::delta * speed; transform.orientation = uf::quaternion::axisAngle( { 0.0f, 0.0f, 1.0f }, time ); static pod::Vector3f start = { transform.position.x, 2.0f, 0.0f }; static pod::Vector3f end = transform.position; static float delta = 0.0f; if ( !metadata["initialized"].asBool() ) delta = 0.0f; metadata["initialized"] = true; if ( delta >= 1 ) delta = 1; else { delta += uf::physics::time::delta * 1.5f; transform.position = uf::vector::lerp( start, end, delta ); } // metadata["color"][3] = alpha; } { auto& controller = this->getController(); auto& camera = controller.getComponent(); camera.updateView(); } } void ext::StartMenuBehavior::render( uf::Object& self ) { } void ext::StartMenuBehavior::destroy( uf::Object& self ) { } #undef this