51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
// 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<float>::min()
|
|
|
|
namespace Dawn {
|
|
class VNPositionEvent : public VNAnimateEvent<glm::vec3> {
|
|
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<glm::vec3> 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);
|
|
}
|
|
};
|
|
} |