Starting new VN Structure
This commit is contained in:
101
assets/games/liminal/example-scene.xml
Normal file
101
assets/games/liminal/example-scene.xml
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
<vnscene name="ExampleScene">
|
||||||
|
<item ref="eth" prefab="preafbs/charactersEthereality" />
|
||||||
|
<item ref="craig" prefab="preafbs/characters/Craig" />
|
||||||
|
<item ref="bg" prefab="preafbs/backgrounds/School" />
|
||||||
|
<item ref="square" prefab="prefabs/visualnovel/VisualNovelSquare" />
|
||||||
|
<property type="" ref="easeOut" value="easeOutQuad" />
|
||||||
|
|
||||||
|
<events>
|
||||||
|
<!-- Set the default values -->
|
||||||
|
<position item="bg" x="0" y="0" z="0" />
|
||||||
|
<position item="craig" x="0" y="0" z="1" />
|
||||||
|
<position item="eth" x="0" y="0" z="1" />
|
||||||
|
<position item="square" x="0" y="0" z="10" />
|
||||||
|
|
||||||
|
<set property="square->material->color" value="COLOR_BLACK" />
|
||||||
|
<set property="craig->material->color.a" value="0" />
|
||||||
|
|
||||||
|
<!-- Fade out the black overlay -->
|
||||||
|
<animate item="square->material->color.a" from="1" to="0" time="1" curve="easeOut" />
|
||||||
|
|
||||||
|
<!-- Example Text, also showing how in future we can support multiple languages -->
|
||||||
|
<text character="eth">
|
||||||
|
<string lang="en">Hi, I'm Ethereality.</string>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<!-- Fade in craig -->
|
||||||
|
<animate item="craig->material->color.a" from="0" to="1" time="1" curve="easeOut" />
|
||||||
|
<text character="craig">
|
||||||
|
<string lang="en">Hi, I'm Craig.</string>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Because each event stops things happening until it's complete, let's
|
||||||
|
assume we want to do two things at once, say move and fade out a character
|
||||||
|
at the same time. This will make craig exit screen left.
|
||||||
|
-->
|
||||||
|
<parallel>
|
||||||
|
<animate item="craig->material->color.a" from="1" to="0" time="1" curve="easeOut" />
|
||||||
|
<animate item="craig" x="-2" time="1" curve="easeOut" />
|
||||||
|
</parallel>
|
||||||
|
|
||||||
|
<!-- Now Craig is gone, so sad, let's now fade the screen out and present some choices -->
|
||||||
|
<animate item="square->material->color.a" from="0" to="1" time="1" curve="easeOut" />
|
||||||
|
|
||||||
|
<!-- Here I am creating a marker -->
|
||||||
|
<marker name="craigCool" />
|
||||||
|
|
||||||
|
<choices character="eth" key="isCraigCool">
|
||||||
|
<title>
|
||||||
|
<string lang="en">Do you think Craig is cool?</string>
|
||||||
|
</title>
|
||||||
|
<choice value="no">
|
||||||
|
<string lang="en">Yes</string>
|
||||||
|
</choice>
|
||||||
|
<choice value="yes">
|
||||||
|
<string lang="en">No</string>
|
||||||
|
</choice>
|
||||||
|
<choice value="maybe">
|
||||||
|
<string lang="en">Maybe</string>
|
||||||
|
</choice>
|
||||||
|
</choices>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Now we have a choice, we can use the key to get the value of the choice
|
||||||
|
and do something with it. In this case, we'll just show a different
|
||||||
|
message depending on the choice.
|
||||||
|
|
||||||
|
If the user selects "Maybe", we basically just display a message and then
|
||||||
|
go back to the choices indefinitely.
|
||||||
|
-->
|
||||||
|
<if key="isCraigCool" value="maybe">
|
||||||
|
<text character="eth">
|
||||||
|
<string lang="en">Are you unsure?</string>
|
||||||
|
</text>
|
||||||
|
<goto-marker name="craigCool" />
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if key="isCraigCool" value="yes">
|
||||||
|
<text character="eth">
|
||||||
|
<string lang="en">I agree, Craig is cool.</string>
|
||||||
|
</text>
|
||||||
|
</if>
|
||||||
|
<if key="isCraigCool" value="no">
|
||||||
|
<text character="eth">
|
||||||
|
<string lang="en">I disagree, Craig is cool.</string>
|
||||||
|
</text>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<!-- We can also modify values/set values too. -->
|
||||||
|
<choice-set key="isCraigCool" value="yes" />
|
||||||
|
|
||||||
|
<!-- We can also wait some time -->
|
||||||
|
<wait time="1" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Now change scenes. Changing scenes is handled in-engine to stop the game
|
||||||
|
crashing from a lack of memory.
|
||||||
|
-->
|
||||||
|
<scene-change name="scenes/ExampleScene2" />
|
||||||
|
</events>
|
||||||
|
</vnscene>
|
10
cmake/targets/target-liminal-linux64-glfw/CMakeLists.txt
Normal file
10
cmake/targets/target-liminal-linux64-glfw/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
set(DAWN_BUILDING dawnliminal CACHE INTERNAL ${DAWN_CACHE_TARGET})
|
||||||
|
set(DAWN_TARGET_LINUX64 true CACHE INTERNAL ${DAWN_CACHE_TARGET})
|
||||||
|
set(DAWN_TARGET_GLFW true CACHE INTERNAL ${DAWN_CACHE_TARGET})
|
||||||
|
set(DAWN_TARGET_NAME "Liminal" CACHE INTERNAL ${DAWN_CACHE_TARGET})
|
||||||
|
set(DAWN_VISUAL_NOVEL true CACHE INTERNAL ${DAWN_CACHE_TARGET})
|
@ -4,9 +4,9 @@
|
|||||||
# https://opensource.org/licenses/MIT
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
# Subdirs
|
# Subdirs
|
||||||
add_subdirectory(poker)
|
# add_subdirectory(poker)
|
||||||
add_subdirectory(tictactoe)
|
add_subdirectory(tictactoe)
|
||||||
|
|
||||||
if(DAWN_VISUAL_NOVEL)
|
if(DAWN_VISUAL_NOVEL)
|
||||||
add_subdirectory(visualnovel)
|
add_subdirectory(vn)
|
||||||
endif()
|
endif()
|
8
src/dawn/games/vn/CMakeLists.txt
Normal file
8
src/dawn/games/vn/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Subdirs
|
||||||
|
add_subdirectory(components)
|
||||||
|
add_subdirectory(events)
|
10
src/dawn/games/vn/components/CMakeLists.txt
Normal file
10
src/dawn/games/vn/components/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Sources
|
||||||
|
target_sources(${DAWN_TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
VNManager.cpp
|
||||||
|
)
|
36
src/dawn/games/vn/components/VNManager.cpp
Normal file
36
src/dawn/games/vn/components/VNManager.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright (c) 2022 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "VNManager.hpp"
|
||||||
|
#include "games/vn/events/VNEvent.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
VNManager::VNManager(SceneItem *item) :
|
||||||
|
SceneItemComponent(item)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNManager::onStart() {
|
||||||
|
if(this->currentEvent != nullptr) {
|
||||||
|
this->currentEvent->start(nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNManager::setEvent(VNEvent *event) {
|
||||||
|
this->currentEvent = event;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNManager::nextEvent() {
|
||||||
|
if(this->currentEvent == nullptr) return;
|
||||||
|
auto old = this->currentEvent;
|
||||||
|
old->end();
|
||||||
|
this->currentEvent = old->getNextEvent();
|
||||||
|
if(this->currentEvent != nullptr) this->currentEvent->start(old);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNManager::onDispose() {
|
||||||
|
|
||||||
|
}
|
60
src/dawn/games/vn/components/VNManager.hpp
Normal file
60
src/dawn/games/vn/components/VNManager.hpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
// Copyright (c) 2022 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "scene/SceneItemComponent.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
class VNEvent;
|
||||||
|
|
||||||
|
class VNManager : public SceneItemComponent {
|
||||||
|
protected:
|
||||||
|
std::vector<VNEvent*> events;
|
||||||
|
VNEvent *currentEvent = nullptr;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Constructs a visual novel manager, scene item component.
|
||||||
|
*
|
||||||
|
* @param item Item that the VN manager belongs to.
|
||||||
|
*/
|
||||||
|
VNManager(SceneItem *item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creats an event for you to decide how to queue.
|
||||||
|
*/
|
||||||
|
template<class T>
|
||||||
|
T * createEvent() {
|
||||||
|
auto event = new T();
|
||||||
|
event->init(this);
|
||||||
|
this->events.push_back(event);
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the currently active visual novel event. This is assumed to be
|
||||||
|
* the only way to handle events (no multiples currently).
|
||||||
|
*
|
||||||
|
* @param event Event to set.
|
||||||
|
*/
|
||||||
|
void setEvent(VNEvent *event);
|
||||||
|
|
||||||
|
void nextEvent();
|
||||||
|
|
||||||
|
// template <class T>
|
||||||
|
// T * setEvent(T *event) {
|
||||||
|
// auto oldCurrent = this->currentEvent;
|
||||||
|
// this->currentEvent = event;
|
||||||
|
// if(this->hasInitialized && event != nullptr) event->start(oldCurrent);
|
||||||
|
// delete oldCurrent;
|
||||||
|
// return event;
|
||||||
|
// }
|
||||||
|
|
||||||
|
void onStart() override;
|
||||||
|
void onDispose() override;
|
||||||
|
|
||||||
|
friend class VNEvent;
|
||||||
|
};
|
||||||
|
}
|
10
src/dawn/games/vn/events/CMakeLists.txt
Normal file
10
src/dawn/games/vn/events/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Sources
|
||||||
|
target_sources(${DAWN_TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
VNEvent.cpp
|
||||||
|
)
|
17
src/dawn/games/vn/events/VNDummyEvent.hpp
Normal file
17
src/dawn/games/vn/events/VNDummyEvent.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "VNEvent.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
class VNDummyEvent : public VNEvent {
|
||||||
|
protected:
|
||||||
|
void onStart() override {
|
||||||
|
std::cout << "Test" << std::endl;
|
||||||
|
this->next();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
38
src/dawn/games/vn/events/VNEvent.cpp
Normal file
38
src/dawn/games/vn/events/VNEvent.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "VNEvent.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
void VNEvent::init(VNManager *manager) {
|
||||||
|
this->manager = manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNEvent::start(VNEvent *previous) {
|
||||||
|
this->onStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
Scene * VNEvent::getScene() {
|
||||||
|
return this->manager->getScene();
|
||||||
|
}
|
||||||
|
|
||||||
|
VNEvent * VNEvent::getNextEvent() {
|
||||||
|
return this->doNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNEvent::next() {
|
||||||
|
assertNotNull(this->manager);
|
||||||
|
assertTrue(this->manager->currentEvent == this);
|
||||||
|
this->manager->nextEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNEvent::end() {
|
||||||
|
this->unsubscribeAllEvents();
|
||||||
|
this->onEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VNEvent::onStart() {}
|
||||||
|
void VNEvent::onEnd() {}
|
79
src/dawn/games/vn/events/VNEvent.hpp
Normal file
79
src/dawn/games/vn/events/VNEvent.hpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "games/vn/components/VNManager.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
class VNEvent : public StateOwner {
|
||||||
|
protected:
|
||||||
|
VNManager *manager = nullptr;
|
||||||
|
VNEvent *doNext = nullptr;
|
||||||
|
VNEvent *previous = nullptr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the event. This is called by the VNManager, and should not
|
||||||
|
* be called by anything else.
|
||||||
|
* @param manager The VNManager that is running this event.
|
||||||
|
*/
|
||||||
|
void init(VNManager *manager);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoked by the VNManager, this is the start of the event.
|
||||||
|
* @param previous The previous event that was running before this one.
|
||||||
|
*/
|
||||||
|
void start(VNEvent *previous);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoked by the VNManager, this is the end of the event. Perform the
|
||||||
|
* necessary cleanup, but remember that events may be re-started again
|
||||||
|
* later.
|
||||||
|
*/
|
||||||
|
void end();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrideable method that is called when the event is started.
|
||||||
|
*/
|
||||||
|
virtual void onStart();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrideable method that is called when the event is ended.
|
||||||
|
*/
|
||||||
|
virtual void onEnd();
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Returns the scene this event is running in.
|
||||||
|
* @return Pointer to the scene.
|
||||||
|
*/
|
||||||
|
Scene * getScene();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* End this event and move on to the next event.
|
||||||
|
*/
|
||||||
|
void next();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the next event to be executed after this one. Can be overridden
|
||||||
|
* to return a different event other than the doNext event.
|
||||||
|
* @return Pointer to the next event.
|
||||||
|
*/
|
||||||
|
virtual VNEvent * getNextEvent();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chains an event to be executed after this event has finished.
|
||||||
|
*
|
||||||
|
* @param next Event to process next.
|
||||||
|
* @return Whatever you pass in to next.
|
||||||
|
*/
|
||||||
|
template<class T>
|
||||||
|
T * then(T *next) {
|
||||||
|
this->doNext = next;
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend class VNManager;
|
||||||
|
};
|
||||||
|
}
|
@ -6,8 +6,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "prefab/SceneItemPrefab.hpp"
|
#include "prefab/SceneItemPrefab.hpp"
|
||||||
#include "display/mesh/CubeMesh.hpp"
|
#include "display/mesh/CubeMesh.hpp"
|
||||||
#include "scene/components/display/MeshRenderer.hpp"
|
#include "scene/components/display/mesh/MeshRenderer.hpp"
|
||||||
#include "scene/components/display/CubeMeshHost.hpp"
|
#include "scene/components/display/mesh/CubeMeshHost.hpp"
|
||||||
#include "scene/components/display/material/SimpleTexturedMaterial.hpp"
|
#include "scene/components/display/material/SimpleTexturedMaterial.hpp"
|
||||||
#include "scene/components/example/ExampleSpin.hpp"
|
#include "scene/components/example/ExampleSpin.hpp"
|
||||||
#include "scene/components/physics/3d/CubeCollider.hpp"
|
#include "scene/components/physics/3d/CubeCollider.hpp"
|
||||||
|
@ -44,6 +44,36 @@ namespace Dawn {
|
|||||||
private:
|
private:
|
||||||
std::vector<IStateEvent*> eventsSubscribed;
|
std::vector<IStateEvent*> eventsSubscribed;
|
||||||
std::vector<IStateOwnerEventLegacy*> eventLegacyBridge;
|
std::vector<IStateOwnerEventLegacy*> eventLegacyBridge;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* Removes all currently subscribed effects and events.
|
||||||
|
*/
|
||||||
|
void unsubscribeAllEvents() {
|
||||||
|
auto providers = this->_stateProviderListeners;
|
||||||
|
auto itProvider = providers.begin();
|
||||||
|
while(itProvider != providers.end()) {
|
||||||
|
(*itProvider)();
|
||||||
|
++itProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto it = this->eventsSubscribed.begin();
|
||||||
|
while(it != this->eventsSubscribed.end()) {
|
||||||
|
(*it)->_stateOwnerDestroyed(this);
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto itBridge = this->eventLegacyBridge.begin();
|
||||||
|
while(itBridge != this->eventLegacyBridge.end()) {
|
||||||
|
(*itBridge)->removeListener();
|
||||||
|
delete *itBridge;
|
||||||
|
++itBridge;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->_stateProviderListeners.clear();
|
||||||
|
this->eventsSubscribed.clear();
|
||||||
|
this->eventLegacyBridge.clear();
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<std::function<void()>> _stateProviderListeners;
|
std::vector<std::function<void()>> _stateProviderListeners;
|
||||||
@ -123,7 +153,11 @@ namespace Dawn {
|
|||||||
auto itProp = props.begin();
|
auto itProp = props.begin();
|
||||||
while(itProp != props.end()) {
|
while(itProp != props.end()) {
|
||||||
auto property = *itProp;
|
auto property = *itProp;
|
||||||
if(property->owner == nullptr) { property->owner = this; } else { assertTrue(property->owner == this); }
|
if(property->owner == nullptr) {
|
||||||
|
property->owner = this;
|
||||||
|
} else {
|
||||||
|
assertTrue(property->owner == this);
|
||||||
|
}
|
||||||
property->_effectListners.push_back(fn);
|
property->_effectListners.push_back(fn);
|
||||||
++itProp;
|
++itProp;
|
||||||
}
|
}
|
||||||
@ -230,25 +264,7 @@ namespace Dawn {
|
|||||||
* useEffects or useEvents.
|
* useEffects or useEvents.
|
||||||
*/
|
*/
|
||||||
virtual ~StateOwner() {
|
virtual ~StateOwner() {
|
||||||
auto providers = this->_stateProviderListeners;
|
this->unsubscribeAllEvents();
|
||||||
auto itProvider = providers.begin();
|
|
||||||
while(itProvider != providers.end()) {
|
|
||||||
(*itProvider)();
|
|
||||||
++itProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto it = this->eventsSubscribed.begin();
|
|
||||||
while(it != this->eventsSubscribed.end()) {
|
|
||||||
(*it)->_stateOwnerDestroyed(this);
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto itBridge = this->eventLegacyBridge.begin();
|
|
||||||
while(itBridge != this->eventLegacyBridge.end()) {
|
|
||||||
(*itBridge)->removeListener();
|
|
||||||
delete *itBridge;
|
|
||||||
++itBridge;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
17
src/dawnliminal/CMakeLists.txt
Normal file
17
src/dawnliminal/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Build Project
|
||||||
|
add_executable(${DAWN_TARGET_NAME})
|
||||||
|
|
||||||
|
# Includes
|
||||||
|
target_include_directories(${DAWN_TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Subdirs
|
||||||
|
add_subdirectory(game)
|
||||||
|
add_subdirectory(save)
|
10
src/dawnliminal/game/CMakeLists.txt
Normal file
10
src/dawnliminal/game/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Sources
|
||||||
|
target_sources(${DAWN_TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
LiminalGame.cpp
|
||||||
|
)
|
13
src/dawnliminal/game/LiminalGame.cpp
Normal file
13
src/dawnliminal/game/LiminalGame.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "game/DawnGame.hpp"
|
||||||
|
#include "scenes/HelloWorldScene.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
Scene * Dawn::dawnGameGetInitialScene(DawnGame *game) {
|
||||||
|
return new HelloWorldScene(game);
|
||||||
|
}
|
19
src/dawnliminal/input/InputBinds.hpp
Normal file
19
src/dawnliminal/input/InputBinds.hpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "input/InputManager.hpp"
|
||||||
|
|
||||||
|
#define INPUT_BIND(n) ((inputbind_t)n)
|
||||||
|
|
||||||
|
#define INPUT_BIND_ACCEPT INPUT_BIND(1)
|
||||||
|
#define INPUT_BIND_NEGATIVE_X INPUT_BIND(2)
|
||||||
|
#define INPUT_BIND_POSITIVE_X INPUT_BIND(3)
|
||||||
|
#define INPUT_BIND_NEGATIVE_Y INPUT_BIND(4)
|
||||||
|
#define INPUT_BIND_POSITIVE_Y INPUT_BIND(5)
|
||||||
|
#define INPUT_BIND_MOUSE_X INPUT_BIND(6)
|
||||||
|
#define INPUT_BIND_MOUSE_Y INPUT_BIND(7)
|
||||||
|
#define INPUT_BIND_MOUSE_CLICK INPUT_BIND(8)
|
||||||
|
#define INPUT_BIND_CANCEL INPUT_BIND(9)
|
10
src/dawnliminal/save/CMakeLists.txt
Normal file
10
src/dawnliminal/save/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Sources
|
||||||
|
target_sources(${DAWN_TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
LiminalSave.cpp
|
||||||
|
)
|
12
src/dawnliminal/save/LiminalSave.cpp
Normal file
12
src/dawnliminal/save/LiminalSave.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "save/SaveManager.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
bool_t Dawn::saveValidateFile(struct SaveFile raw) {
|
||||||
|
return false;
|
||||||
|
}
|
48
src/dawnliminal/scenes/HelloWorldScene.hpp
Normal file
48
src/dawnliminal/scenes/HelloWorldScene.hpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "scene/Scene.hpp"
|
||||||
|
#include "scene/components/display/Camera.hpp"
|
||||||
|
#include "prefabs/SimpleSpinningCubePrefab.hpp"
|
||||||
|
#include "games/vn/components/VNManager.hpp"
|
||||||
|
#include "games/vn/events/VNDummyEvent.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
class HelloWorldScene : public Scene {
|
||||||
|
protected:
|
||||||
|
Camera *camera;
|
||||||
|
UICanvas *canvas;
|
||||||
|
|
||||||
|
void stage() override {
|
||||||
|
canvas = UICanvas::create(this);
|
||||||
|
|
||||||
|
camera = Camera::create(this);
|
||||||
|
camera->fov = 0.436332f;
|
||||||
|
camera->transform->lookAt(glm::vec3(10, 10, 10), glm::vec3(0, 0, 0));
|
||||||
|
|
||||||
|
auto cube = SimpleSpinningCubePrefab::create(this);
|
||||||
|
|
||||||
|
auto vnItem = this->createSceneItem();
|
||||||
|
auto vnManager = vnItem->addComponent<VNManager>();
|
||||||
|
|
||||||
|
auto eventTest = vnManager->createEvent<VNDummyEvent>();
|
||||||
|
eventTest
|
||||||
|
->then(vnManager->createEvent<VNDummyEvent>())
|
||||||
|
->then(vnManager->createEvent<VNDummyEvent>())
|
||||||
|
;
|
||||||
|
vnManager->setEvent(eventTest);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<Asset*> getRequiredAssets() override {
|
||||||
|
auto assMan = &this->game->assetManager;
|
||||||
|
std::vector<Asset*> assets;
|
||||||
|
return assets;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
HelloWorldScene(DawnGame *game) : Scene(game) {}
|
||||||
|
};
|
||||||
|
}
|
@ -40,8 +40,6 @@ void HurtHazard::onStart() {
|
|||||||
otherHealth->damage({
|
otherHealth->damage({
|
||||||
.amount = damage
|
.amount = damage
|
||||||
});
|
});
|
||||||
|
|
||||||
std::cout << "Trigger" << std::endl;
|
|
||||||
}, this->trigger->eventTriggerEnter);
|
}, this->trigger->eventTriggerEnter);
|
||||||
}, this->trigger)();
|
}, this->trigger)();
|
||||||
}
|
}
|
17
src/dawnrose/scene/components/entity/EntityInteractable.cpp
Normal file
17
src/dawnrose/scene/components/entity/EntityInteractable.cpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "EntityInteractable.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
EntityInteractable::EntityInteractable(SceneItem* item) : SceneItemComponent(item) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EntityInteractable::interact() {
|
||||||
|
std::cout << "Interact!" << std::endl;
|
||||||
|
}
|
20
src/dawnrose/scene/components/entity/EntityInteractable.hpp
Normal file
20
src/dawnrose/scene/components/entity/EntityInteractable.hpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "scene/SceneItemComponent.hpp"
|
||||||
|
#include "scene/components/physics/2d/TriggerController2D.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
class EntityInteractable : public SceneItemComponent {
|
||||||
|
public:
|
||||||
|
EntityInteractable(SceneItem *item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when one entity interacts with this entity.
|
||||||
|
*/
|
||||||
|
void interact();
|
||||||
|
};
|
||||||
|
}
|
27
src/dawnrose/scene/components/entity/EntityInteractor.cpp
Normal file
27
src/dawnrose/scene/components/entity/EntityInteractor.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "EntityInteractor.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
EntityInteractor::EntityInteractor(SceneItem* item) :
|
||||||
|
trigger(nullptr),
|
||||||
|
SceneItemComponent(item)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityInteractor::onStart() {
|
||||||
|
this->evtTriggerEnter = [&]{};
|
||||||
|
|
||||||
|
useEffect([&]{
|
||||||
|
this->evtTriggerEnter();
|
||||||
|
if(this->trigger == nullptr) return;
|
||||||
|
|
||||||
|
this->evtTriggerEnter = useEvent([&](EntityInteractable *interactable) {
|
||||||
|
interactable->interact();
|
||||||
|
}, this->trigger->eventTriggerEnter);
|
||||||
|
}, this->trigger)();
|
||||||
|
}
|
21
src/dawnrose/scene/components/entity/EntityInteractor.hpp
Normal file
21
src/dawnrose/scene/components/entity/EntityInteractor.hpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "EntityInteractable.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
class EntityInteractor : public SceneItemComponent {
|
||||||
|
private:
|
||||||
|
std::function<void()> evtTriggerEnter;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// @optional
|
||||||
|
StateProperty<TriggerController2D*> trigger;
|
||||||
|
|
||||||
|
EntityInteractor(SceneItem* item);
|
||||||
|
void onStart() override;
|
||||||
|
};
|
||||||
|
}
|
@ -20,4 +20,5 @@ include(util/CMakeLists.txt)
|
|||||||
|
|
||||||
# Tools
|
# Tools
|
||||||
add_subdirectory(prefabtool)
|
add_subdirectory(prefabtool)
|
||||||
add_subdirectory(texturetool)
|
add_subdirectory(texturetool)
|
||||||
|
# add_subdirectory(vnscenetool)
|
63
src/dawntools/vnscenetool/CMakeLists.txt
Normal file
63
src/dawntools/vnscenetool/CMakeLists.txt
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Msters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Texture Build Tool
|
||||||
|
project(vnscenetool VERSION 1.0)
|
||||||
|
add_executable(vnscenetool)
|
||||||
|
|
||||||
|
# Subdirs
|
||||||
|
add_subdirectory(events)
|
||||||
|
|
||||||
|
# Sources
|
||||||
|
target_sources(vnscenetool
|
||||||
|
PRIVATE
|
||||||
|
${DAWN_SHARED_SOURCES}
|
||||||
|
${DAWN_TOOL_SOURCES}
|
||||||
|
VNSceneTool.cpp
|
||||||
|
VNSceneParser.cpp
|
||||||
|
VNSceneEventsParser.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Includes
|
||||||
|
target_include_directories(vnscenetool
|
||||||
|
PUBLIC
|
||||||
|
${DAWN_SHARED_INCLUDES}
|
||||||
|
${DAWN_TOOL_INCLUDES}
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Definitions
|
||||||
|
target_compile_definitions(vnscenetool
|
||||||
|
PUBLIC
|
||||||
|
${DAWN_SHARED_DEFINITIONS}
|
||||||
|
DAWN_TOOL_INSTANCE=VNSceneTool
|
||||||
|
DAWN_TOOL_HEADER="VNSceneTool.hpp"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
target_link_libraries(vnscenetool
|
||||||
|
PUBLIC
|
||||||
|
${DAWN_BUILD_HOST_LIBS}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Tool Function
|
||||||
|
function(tool_vnscene in)
|
||||||
|
set(DEPS "")
|
||||||
|
if(DAWN_BUILD_TOOLS)
|
||||||
|
set(DEPS vnscenetool)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
STRING(REGEX REPLACE "[\.|\\|\/]" "-" prefab_name ${in})
|
||||||
|
add_custom_target(prefab_${prefab_name}
|
||||||
|
COMMAND vnscenetool --input="${DAWN_ASSETS_SOURCE_DIR}/${in}"
|
||||||
|
COMMENT "Generating prefab from ${in}"
|
||||||
|
DEPENDS ${DEPS}
|
||||||
|
)
|
||||||
|
target_include_directories(${DAWN_TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${DAWN_GENERATED_DIR}/generatedprefabs
|
||||||
|
)
|
||||||
|
add_dependencies(${DAWN_TARGET_NAME} prefab_${prefab_name})
|
||||||
|
endfunction()
|
42
src/dawntools/vnscenetool/VNSceneEventsParser.cpp
Normal file
42
src/dawntools/vnscenetool/VNSceneEventsParser.cpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "VNSceneEventsParser.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
std::vector<std::string> VNSceneEventsParser::getRequiredAttributes() {
|
||||||
|
return { };
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, std::string> VNSceneEventsParser::getOptionalAttributes() {
|
||||||
|
return { };
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t VNSceneEventsParser::onParse(
|
||||||
|
Xml *node,
|
||||||
|
std::map<std::string, std::string> values,
|
||||||
|
struct VNSceneEvent *out,
|
||||||
|
std::string *error
|
||||||
|
) {
|
||||||
|
int32_t ret;
|
||||||
|
|
||||||
|
auto itChildren = node->children.begin();
|
||||||
|
while(itChildren != node->children.end()) {
|
||||||
|
Xml *child = *itChildren;
|
||||||
|
|
||||||
|
// Parse event(s)
|
||||||
|
if(child->node == "position") {
|
||||||
|
struct VNPosition position;
|
||||||
|
ret = (VNPositionParser()).parse(child, &position, error);
|
||||||
|
if(ret != 0) return ret;
|
||||||
|
out->position = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
itChildren++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
26
src/dawntools/vnscenetool/VNSceneEventsParser.hpp
Normal file
26
src/dawntools/vnscenetool/VNSceneEventsParser.hpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "util/XmlParser.hpp"
|
||||||
|
#include "events/VNPositionParser.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
struct VNSceneEvent {
|
||||||
|
int32_t bruh;
|
||||||
|
};
|
||||||
|
|
||||||
|
class VNSceneEventsParser : public XmlParser<struct VNSceneEvent> {
|
||||||
|
protected:
|
||||||
|
std::vector<std::string> getRequiredAttributes() override;
|
||||||
|
std::map<std::string, std::string> getOptionalAttributes() override;
|
||||||
|
int32_t onParse(
|
||||||
|
Xml *node,
|
||||||
|
std::map<std::string, std::string> values,
|
||||||
|
struct VNSceneEvent *out,
|
||||||
|
std::string *error
|
||||||
|
) override;
|
||||||
|
};
|
||||||
|
}
|
44
src/dawntools/vnscenetool/VNSceneParser.cpp
Normal file
44
src/dawntools/vnscenetool/VNSceneParser.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "VNSceneParser.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
std::vector<std::string> VNSceneParser::getRequiredAttributes() {
|
||||||
|
return { };
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, std::string> VNSceneParser::getOptionalAttributes() {
|
||||||
|
return { };
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t VNSceneParser::onParse(
|
||||||
|
Xml *node,
|
||||||
|
std::map<std::string, std::string> values,
|
||||||
|
struct VNScene *out,
|
||||||
|
std::string *error
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
int32_t ret;
|
||||||
|
|
||||||
|
auto itChildren = node->children.begin();
|
||||||
|
while(itChildren != node->children.end()) {
|
||||||
|
Xml *child = *itChildren;
|
||||||
|
|
||||||
|
// Parse event(s)
|
||||||
|
if(child->node == "events") {
|
||||||
|
struct VNSceneEvent scene;
|
||||||
|
ret = (VNSceneEventsParser()).parse(child, &scene, error);
|
||||||
|
if(ret != 0) return ret;
|
||||||
|
out->events.push_back(scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
itChildren++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
25
src/dawntools/vnscenetool/VNSceneParser.hpp
Normal file
25
src/dawntools/vnscenetool/VNSceneParser.hpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "VNSceneEventsParser.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
struct VNScene {
|
||||||
|
std::vector<struct VNSceneEvent> events;
|
||||||
|
};
|
||||||
|
|
||||||
|
class VNSceneParser : public XmlParser<struct VNScene> {
|
||||||
|
protected:
|
||||||
|
std::vector<std::string> getRequiredAttributes() override;
|
||||||
|
std::map<std::string, std::string> getOptionalAttributes() override;
|
||||||
|
int32_t onParse(
|
||||||
|
Xml *node,
|
||||||
|
std::map<std::string, std::string> values,
|
||||||
|
struct VNScene *out,
|
||||||
|
std::string *error
|
||||||
|
) override;
|
||||||
|
};
|
||||||
|
}
|
43
src/dawntools/vnscenetool/VNSceneTool.cpp
Normal file
43
src/dawntools/vnscenetool/VNSceneTool.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "VNSceneTool.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
std::vector<std::string> VNSceneTool::getRequiredFlags() {
|
||||||
|
return { "input" };
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, std::string> VNSceneTool::getOptionalFlags() {
|
||||||
|
return std::map<std::string, std::string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t VNSceneTool::start() {
|
||||||
|
File input = File(flags["input"]);
|
||||||
|
if(!input.exists()) {
|
||||||
|
std::cout << "Input file does not exist!" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string data;
|
||||||
|
if(!input.readString(&data)) {
|
||||||
|
std::cout << "Failed to read input file!" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto xml = Xml::load(data);
|
||||||
|
std::string error;
|
||||||
|
struct VNScene scene;
|
||||||
|
auto result = ((VNSceneParser()).parse(&xml, &scene, &error));
|
||||||
|
if(result != 0) {
|
||||||
|
std::cout << "Failed to parse scene: " << error << std::endl;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate output
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
20
src/dawntools/vnscenetool/VNSceneTool.hpp
Normal file
20
src/dawntools/vnscenetool/VNSceneTool.hpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "util/DawnTool.hpp"
|
||||||
|
#include "VNSceneParser.hpp"
|
||||||
|
#include "util/File.hpp"
|
||||||
|
|
||||||
|
namespace Dawn {
|
||||||
|
class VNSceneTool : public DawnTool {
|
||||||
|
protected:
|
||||||
|
std::vector<std::string> getRequiredFlags() override;
|
||||||
|
std::map<std::string, std::string> getOptionalFlags() override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
int32_t start();
|
||||||
|
};
|
||||||
|
}
|
10
src/dawntools/vnscenetool/events/CMakeLists.txt
Normal file
10
src/dawntools/vnscenetool/events/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) 2023 Dominic Masters
|
||||||
|
#
|
||||||
|
# This software is released under the MIT License.
|
||||||
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
# Sources
|
||||||
|
target_sources(vnscenetool
|
||||||
|
PRIVATE
|
||||||
|
VNPositionParser.cpp
|
||||||
|
)
|
25
src/dawntools/vnscenetool/events/VNPositionParser.cpp
Normal file
25
src/dawntools/vnscenetool/events/VNPositionParser.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#include "VNPositionParser.hpp"
|
||||||
|
|
||||||
|
using namespace Dawn;
|
||||||
|
|
||||||
|
std::vector<std::string> VNPositionParser::getRequiredAttributes() {
|
||||||
|
return { };
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, std::string> VNPositionParser::getOptionalAttributes() {
|
||||||
|
return { };
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t VNPositionParser::onParse(
|
||||||
|
Xml *node,
|
||||||
|
std::map<std::string, std::string> values,
|
||||||
|
struct VNPosition *out,
|
||||||
|
std::string *error
|
||||||
|
) {
|
||||||
|
return 0;
|
||||||
|
}
|
6
src/dawntools/vnscenetool/events/VNPositionParser.hpp
Normal file
6
src/dawntools/vnscenetool/events/VNPositionParser.hpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Copyright (c) 2023 Dominic Masters
|
||||||
|
//
|
||||||
|
// This software is released under the MIT License.
|
||||||
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
#pragma once
|
Reference in New Issue
Block a user