Dawn/src/dawn/games/vn/events/VNPositionEvent.hpp
2023-04-21 23:30:33 -07:00

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);
}
};
}