// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "VNAnimateEvent.hpp" #define VN_POSITION_EVENT_VALUE_UNCHANGED std::numeric_limits::min() namespace Dawn { class VNPositionEvent : public VNAnimateEvent { public: SceneItem *item = nullptr; VNPositionEvent() { from = glm::vec3( VN_POSITION_EVENT_VALUE_UNCHANGED, VN_POSITION_EVENT_VALUE_UNCHANGED, VN_POSITION_EVENT_VALUE_UNCHANGED ); to = glm::vec3( VN_POSITION_EVENT_VALUE_UNCHANGED, VN_POSITION_EVENT_VALUE_UNCHANGED, VN_POSITION_EVENT_VALUE_UNCHANGED ); } protected: SimplerCallbackAnimation animation; void onStart() override { assertNotNull(item); auto start = item->transform.getLocalPosition(); if(from.x == VN_POSITION_EVENT_VALUE_UNCHANGED) start.x = from.x; if(from.y == VN_POSITION_EVENT_VALUE_UNCHANGED) start.y = from.y; if(from.z == VN_POSITION_EVENT_VALUE_UNCHANGED) start.z = from.z; if(to.x == VN_POSITION_EVENT_VALUE_UNCHANGED) to.x = start.x; if(to.y == VN_POSITION_EVENT_VALUE_UNCHANGED) to.y = start.y; if(to.z == VN_POSITION_EVENT_VALUE_UNCHANGED) to.z = start.z; VNAnimateEvent::onStart(); } void setValue(glm::vec3 value) override { this->item->transform.setLocalPosition(value); } }; }