diff --git a/Makefile b/Makefile index 812ea23a..904dd3d8 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CC = $(shell cat "./bin/exe/default.config") TARGET_NAME = program TARGET_EXTENSION = exe TARGET_LIB_EXTENSION = dll -RENDERER = opengl +RENDERER = vulkan include makefiles/$(ARCH).$(CC).make diff --git a/bin/data/config.json b/bin/data/config.json index 82ad0bdd..cc2431ee 100644 --- a/bin/data/config.json +++ b/bin/data/config.json @@ -24,7 +24,7 @@ }, "vxgi": { "limiter": 0.5, - "size": 128, + "size": 96, "dispatch": 8, "cascades": 4, "cascadePower": 2, @@ -72,9 +72,9 @@ "deferred alias output to swapchain": false, "vsync": true, "hdr": false, - "vxgi": false, + "vxgi": true, "deferred sampling": false, - "culling": false, + "culling": true, "bloom": true }, "formats": { diff --git a/bin/data/entities/playerModel.json b/bin/data/entities/playerModel.json index 78066453..ea3a455d 100644 --- a/bin/data/entities/playerModel.json +++ b/bin/data/entities/playerModel.json @@ -1,7 +1,7 @@ { "type": "Object", "name": "Player: Model", - "ignore": true, + "ignore": false, "assets": [ "/player/bear.glb" // { "filename": "/player/bear/graph.json", "delay": 0, "single threaded": false, "category": "models" } diff --git a/bin/data/scenes/ss2/medsci.json b/bin/data/scenes/ss2/medsci.json index 6175e242..5dc73ced 100644 --- a/bin/data/scenes/ss2/medsci.json +++ b/bin/data/scenes/ss2/medsci.json @@ -20,7 +20,7 @@ "metadata": { "model": { "baking": { - "enabled": true, + "enabled": false, "resolution": 8192, "shadows": 1024, "trigger": { "mode": "rendered" }, diff --git a/client/client/ext.cpp b/client/client/ext.cpp index c092278c..eb6a3f96 100644 --- a/client/client/ext.cpp +++ b/client/client/ext.cpp @@ -72,11 +72,6 @@ void client::initialize() { client::config["mouse"]["visible"] = payload.mouse.visible; client::config["window"]["mouse"]["center"] = !payload.mouse.visible; }); - uf::hooks.addHook( "window:Mouse.Lock", [&]( ext::json::Value& json ){ - if ( client::window.hasFocus() ) { - client::window.setMousePosition(client::window.getSize()/2); - } - }); uf::hooks.addHook( "window:Mouse.Lock", [&](){ if ( client::window.hasFocus() ) { client::window.setMousePosition(client::window.getSize()/2); diff --git a/client/main.cpp b/client/main.cpp index 23e2792e..c486936f 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv){ #endif /* static bool first = false; if ( !first ) { first = true; - uf::Serializer json; + ext::json::Value json; uf::hooks.call("window:Resized", pod::payloads::windowResized{ { "window:Resized", diff --git a/engine/inc/uf/engine/object/behavior.h b/engine/inc/uf/engine/object/behavior.h index 3c53a7f1..714f9cbe 100644 --- a/engine/inc/uf/engine/object/behavior.h +++ b/engine/inc/uf/engine/object/behavior.h @@ -17,11 +17,12 @@ namespace uf { UF_BEHAVIOR_DEFINE_FUNCTIONS(); UF_BEHAVIOR_DEFINE_METADATA( struct Queued { - uf::stl::string name; - pod::Hook::userdata_t userdata; - ext::json::Value json; + uf::stl::string name = ""; double timeout = 0; int_fast8_t type = 0; + + pod::Hook::userdata_t userdata{}; + ext::json::Value json{}; }; struct { size_t mtime = 0; diff --git a/engine/inc/uf/engine/object/object.h b/engine/inc/uf/engine/object/object.h index b2f74be5..0bf42157 100644 --- a/engine/inc/uf/engine/object/object.h +++ b/engine/inc/uf/engine/object/object.h @@ -35,19 +35,18 @@ namespace uf { uf::stl::string formatHookName( const uf::stl::string& name ); static uf::stl::string formatHookName( const uf::stl::string& name, size_t uid, bool fetch = true ); - void queueHook( const uf::stl::string&, const ext::json::Value& = ext::json::null(), float = 0 ); + template size_t addHook( const uf::stl::string& name, T function ); + + uf::Hooks::return_t callHook( const uf::stl::string& ); + uf::Hooks::return_t callHook( const uf::stl::string&, const pod::Hook::userdata_t& ); + template uf::Hooks::return_t callHook( const uf::stl::string& name, const T& payload ); + + void queueHook( const uf::stl::string&, float = 0 ); + void queueHook( const uf::stl::string&, const ext::json::Value& json, float = 0 ); template void queueHook( const uf::stl::string&, const T&, float = 0 ); - uf::Hooks::return_t callHook( const uf::stl::string& ); - uf::Hooks::return_t callHook( const uf::stl::string&, const ext::json::Value& ); - uf::Hooks::return_t callHook( const uf::stl::string&, const uf::Serializer& ); - uf::Hooks::return_t callHook( const uf::stl::string&, const pod::Hook::userdata_t& ); - - template size_t addHook( const uf::stl::string& name, T function ); - template uf::Hooks::return_t callHook( const uf::stl::string& name, const T& payload ); - uf::stl::string grabURI( const uf::stl::string& filename, const uf::stl::string& root = "" ); }; } diff --git a/engine/inc/uf/engine/object/object.inl b/engine/inc/uf/engine/object/object.inl index 81edbff6..15186695 100644 --- a/engine/inc/uf/engine/object/object.inl +++ b/engine/inc/uf/engine/object/object.inl @@ -20,19 +20,17 @@ template size_t uf::Object::addHook( const uf::stl::string& name, T callback ) { uf::stl::string parsed = this->formatHookName( name ); std::size_t id = uf::hooks.addHook( parsed, callback ); -#if UF_ENTITY_METADATA_USE_JSON - auto& metadata = this->getComponent(); - metadata["system"]["hooks"]["bound"][parsed].emplace_back(id); -#else + auto& metadata = this->getComponent(); metadata.hooks.bound[parsed].emplace_back(id); -#endif + return id; } template uf::Hooks::return_t uf::Object::callHook( const uf::stl::string& name, const T& p ) { - uf::Userdata payload; + pod::Hook::userdata_t payload; payload.create(p); + return uf::hooks.call( this->formatHookName( name ), payload ); } diff --git a/engine/inc/uf/ext/reactphysics/reactphysics.h b/engine/inc/uf/ext/reactphysics/reactphysics.h index 4774e509..b55664bd 100644 --- a/engine/inc/uf/ext/reactphysics/reactphysics.h +++ b/engine/inc/uf/ext/reactphysics/reactphysics.h @@ -16,6 +16,7 @@ namespace pod { struct UF_API Physics { size_t uid = 0; uf::Object* object = NULL; + bool shared = false; // share control of the transform both in-engine and bullet, set to true if you're directly modifying the transform rp3d::RigidBody* body = NULL; rp3d::CollisionShape* shape = NULL; @@ -35,7 +36,6 @@ namespace pod { struct { uint32_t flags = 0; - float mass = 0.0f; float friction = 0.8f; float restitution = 0.0f; diff --git a/engine/inc/uf/macros.h b/engine/inc/uf/macros.h index 6f0bf327..72789d15 100644 --- a/engine/inc/uf/macros.h +++ b/engine/inc/uf/macros.h @@ -101,17 +101,20 @@ #define UF_TIMER_MULTITRACE_END(X) UF_MSG_DEBUG(X); +#include +#define TYPE_SANITIZE(T) std::remove_cv_t> + #if UF_CTTI #include #define TYPE_INDEX_T ctti::type_id_t #define TYPE_HASH_T ctti::detail::hash_t - #define TYPE(T) ctti::type_id() + #define TYPE(T) ctti::type_id() #define TYPE_HASH(T) TYPE(T).hash() - #define TYPE_NAME(T) ctti::nameof() + #define TYPE_NAME(T) ctti::nameof().str() #else #define TYPE_INDEX_T std::type_index #define TYPE_HASH_T std::size_t - #define TYPE(T) typeid(T) + #define TYPE(T) typeid(TYPE_SANITIZE(T)) #define TYPE_HASH(T) TYPE(T).hash_code() #define TYPE_NAME(T) TYPE(T).name() #endif diff --git a/engine/inc/uf/spec/controller/dreamcast.h b/engine/inc/uf/spec/controller/dreamcast.h index 8b455d4a..e3b2c9d0 100644 --- a/engine/inc/uf/spec/controller/dreamcast.h +++ b/engine/inc/uf/spec/controller/dreamcast.h @@ -13,8 +13,8 @@ namespace spec { void UF_API terminate(); bool UF_API connected( size_t = 0 ); - bool UF_API pressed( const uf::stl::string&, size_t = 0 ); - float UF_API analog( const uf::stl::string&, size_t = 0 ); + // bool UF_API pressed( const uf::stl::string&, size_t = 0 ); + // float UF_API analog( const uf::stl::string&, size_t = 0 ); } } namespace controller = dreamcast::controller; diff --git a/engine/inc/uf/spec/controller/universal.h b/engine/inc/uf/spec/controller/universal.h index 24c4e08e..1009d92e 100644 --- a/engine/inc/uf/spec/controller/universal.h +++ b/engine/inc/uf/spec/controller/universal.h @@ -10,8 +10,8 @@ namespace spec { void UF_API terminate(); bool UF_API connected( size_t = 0 ); - bool UF_API pressed( const uf::stl::string&, size_t = 0 ); - float UF_API analog( const uf::stl::string&, size_t = 0 ); + // bool UF_API pressed( const uf::stl::string&, size_t = 0 ); + // float UF_API analog( const uf::stl::string&, size_t = 0 ); }; }; } \ No newline at end of file diff --git a/engine/inc/uf/spec/controller/windows.h b/engine/inc/uf/spec/controller/windows.h index d3bc352a..37bb4a9a 100644 --- a/engine/inc/uf/spec/controller/windows.h +++ b/engine/inc/uf/spec/controller/windows.h @@ -13,8 +13,8 @@ namespace spec { void UF_API terminate(); bool UF_API connected( size_t = 0 ); - bool UF_API pressed( const uf::stl::string&, size_t = 0 ); - float UF_API analog( const uf::stl::string&, size_t = 0 ); + // bool UF_API pressed( const uf::stl::string&, size_t = 0 ); + // float UF_API analog( const uf::stl::string&, size_t = 0 ); } } namespace controller = win32::controller; diff --git a/engine/inc/uf/utils/hook/hook.h b/engine/inc/uf/utils/hook/hook.h index 1fbb7380..2d3b867e 100644 --- a/engine/inc/uf/utils/hook/hook.h +++ b/engine/inc/uf/utils/hook/hook.h @@ -49,22 +49,20 @@ namespace uf { uf::Hooks::container_t m_container; public: bool exists( const name_t& name ); - size_t addHook( const name_t& name, const pod::Hook::function_t& callback, const pod::Hook::Type& = {UF_USERDATA_CTTI(void), 0} ); void removeHook( const name_t& name, size_t uid ); - return_t call( const name_t& name, const argument_t& payload ); - - return_t call( const name_t& name, const uf::stl::string& = "" ); - return_t call( const name_t& name, const ext::json::Value& ); - return_t call( const name_t& name, const uf::Serializer& ); + size_t addHook( const name_t& name, const pod::Hook::function_t& callback, const pod::Hook::Type& = {UF_USERDATA_CTTI(void), 0} ); size_t addHook( const name_t& name, const std::function& callback ); - template size_t addHook( const uf::Hooks::name_t& name, const std::function& callback ); template size_t addHook( const uf::Hooks::name_t& name, const std::function& callback ); template size_t addHook( const uf::Hooks::name_t& name, const Function& lambda ); + + // return_t call( const name_t& name ); + // return_t call( const name_t& name, const argument_t& payload ); + return_t call( const name_t& name, const argument_t& payload = {} ); template return_t call( const name_t& name, const T& payload ); @@ -72,14 +70,6 @@ namespace uf { extern UF_API uf::Hooks hooks; } -/* -namespace uf { - namespace HookHandler { - namespace Readable { - typedef std::function function_t; - } - } -} -*/ + #include "function_traits.inl" #include "hook.inl" \ No newline at end of file diff --git a/engine/inc/uf/utils/hook/hook.inl b/engine/inc/uf/utils/hook/hook.inl index fce998de..49458015 100644 --- a/engine/inc/uf/utils/hook/hook.inl +++ b/engine/inc/uf/utils/hook/hook.inl @@ -1,6 +1,6 @@ template size_t uf::Hooks::addHook( const uf::Hooks::name_t& name, const std::function& callback ) { - typedef typename std::remove_reference::type Argument; + typedef TYPE_SANITIZE(Arg) Argument; return addHook(name, [=]( const pod::Hook::userdata_t& userdata ){ pod::Hook::userdata_t ret; @@ -14,7 +14,7 @@ size_t uf::Hooks::addHook( const uf::Hooks::name_t& name, const std::function size_t uf::Hooks::addHook( const uf::Hooks::name_t& name, const std::function& callback ) { - typedef typename std::remove_reference::type Argument; + typedef TYPE_SANITIZE(Arg) Argument; return addHook(name, [=]( const pod::Hook::userdata_t& userdata ){ pod::Hook::userdata_t ret; @@ -36,5 +36,6 @@ template uf::Hooks::return_t uf::Hooks::call( const uf::Hooks::name_t& name, const T& p ) { pod::Hook::userdata_t payload; payload.create(p); + return call( name, payload ); } \ No newline at end of file diff --git a/engine/inc/uf/utils/io/inputs.h b/engine/inc/uf/utils/io/inputs.h index 1cd076f7..de985e57 100644 --- a/engine/inc/uf/utils/io/inputs.h +++ b/engine/inc/uf/utils/io/inputs.h @@ -2,7 +2,7 @@ #include #include - +#include namespace uf { namespace inputs { @@ -13,7 +13,10 @@ namespace uf { typedef const char* key_t; #define UF_KEY(x) x #endif + typedef bool state_t; + typedef float analog_t; + typedef pod::Vector2t analog2_t; namespace kbm { namespace enums { @@ -254,28 +257,42 @@ namespace uf { constexpr key_t START = UF_KEY("START"); }; namespace states { + // L/R for index controllers extern UF_API state_t R_DPAD_UP; extern UF_API state_t R_DPAD_DOWN; extern UF_API state_t R_DPAD_LEFT; extern UF_API state_t R_DPAD_RIGHT; - extern UF_API state_t R_JOYSTICK; extern UF_API state_t R_A; + extern UF_API state_t R_B; + extern UF_API state_t R_X; + extern UF_API state_t R_Y; + extern UF_API state_t L_DPAD_UP; extern UF_API state_t L_DPAD_DOWN; extern UF_API state_t L_DPAD_LEFT; extern UF_API state_t L_DPAD_RIGHT; - extern UF_API state_t L_JOYSTICK; extern UF_API state_t L_A; - extern UF_API state_t DPAD_UP; - extern UF_API state_t DPAD_DOWN; - extern UF_API state_t DPAD_LEFT; - extern UF_API state_t DPAD_RIGHT; - extern UF_API state_t A; - extern UF_API state_t B; - extern UF_API state_t X; - extern UF_API state_t Y; - extern UF_API state_t L_TRIGGER; - extern UF_API state_t R_TRIGGER; + extern UF_API state_t L_B; + extern UF_API state_t L_X; + extern UF_API state_t L_Y; + + // default controller mappings, aliased to L/R sides + extern UF_API state_t& DPAD_UP; // = L_DPAD_UP; + extern UF_API state_t& DPAD_DOWN; // = L_DPAD_DOWN; + extern UF_API state_t& DPAD_LEFT; // = L_DPAD_LEFT; + extern UF_API state_t& DPAD_RIGHT; // = L_DPAD_RIGHT; + + extern UF_API state_t& A; // = R_A; + extern UF_API state_t& B; // = R_B; + extern UF_API state_t& X; // = R_X; + extern UF_API state_t& Y; // = R_Y; + // analog inputs + extern UF_API analog_t L_TRIGGER; + extern UF_API analog_t R_TRIGGER; + + extern UF_API analog2_t L_JOYSTICK; + extern UF_API analog2_t R_JOYSTICK; + extern UF_API state_t START; }; } diff --git a/engine/inc/uf/utils/string/encoding/utf8.h b/engine/inc/uf/utils/string/encoding/utf8.h index a9be64f3..3d68a145 100644 --- a/engine/inc/uf/utils/string/encoding/utf8.h +++ b/engine/inc/uf/utils/string/encoding/utf8.h @@ -15,7 +15,7 @@ namespace uf { static Input UF_API_CALL decode( Input begin, Input end, Encoding::Literal& output, Encoding::Literal fallback = 0 ); template inline static Encoding::Literal UF_API_CALL decode( Input begin, Input end, Encoding::Literal fallback = 0 ) { - Encoding::Literal literal; + Encoding::Literal literal{}; Utf8::decode(begin, end, literal, fallback); return literal; } diff --git a/engine/inc/uf/utils/type/type.h b/engine/inc/uf/utils/type/type.h index 00ecb1a5..50e96676 100644 --- a/engine/inc/uf/utils/type/type.h +++ b/engine/inc/uf/utils/type/type.h @@ -1,49 +1 @@ #pragma once -#if 0 -#include -#include -#include - -#define UF_TYPE_REGISTER 1 - -#include -namespace pod { - struct UF_API TypeInfo { - size_t hash; - size_t size; - struct { - uf::stl::string pretty; - uf::stl::string compiler; - } name; - }; -} -namespace std { - template<> struct hash { - size_t operator()(const pod::TypeInfo& type) const { - return type.hash; - } - }; -} - -namespace uf { - namespace typeInfo { - typedef TYPE_INDEX_T index_t; - typedef pod::TypeInfo type_t; - - extern UF_API uf::stl::unordered_map* types; - - void UF_API registerType( const index_t&, size_t = 0, const uf::stl::string& = "" ); - const pod::TypeInfo& UF_API getType( size_t ); - const pod::TypeInfo& UF_API getType( const index_t& ); - - template - const std::type_index getIndex(); - template - void registerType( const uf::stl::string& pretty = "" ); - template - const pod::TypeInfo& getType(); - } -} - -#include "type.inl" -#endif \ No newline at end of file diff --git a/engine/inc/uf/utils/type/type.inl b/engine/inc/uf/utils/type/type.inl index b8732ca3..e69de29b 100644 --- a/engine/inc/uf/utils/type/type.inl +++ b/engine/inc/uf/utils/type/type.inl @@ -1,12 +0,0 @@ -template -const uf::typeInfo::index_t uf::typeInfo::getIndex() { - return TYPE(T); -} -template -void uf::typeInfo::registerType( const uf::stl::string& pretty ) { - return registerType(getIndex(), sizeof(T), pretty); -} -template -const pod::TypeInfo& uf::typeInfo::getType() { - return getType(getIndex()); -} \ No newline at end of file diff --git a/engine/inc/uf/utils/userdata/pointered.inl b/engine/inc/uf/utils/userdata/pointered.inl index c9f1147d..6210d5e4 100644 --- a/engine/inc/uf/utils/userdata/pointered.inl +++ b/engine/inc/uf/utils/userdata/pointered.inl @@ -89,7 +89,7 @@ pod::PointeredUserdata uf::pointeredUserdata::create( const T& data ) { } template pod::PointeredUserdata uf::pointeredUserdata::create( uf::MemoryPool& requestedMemoryPool, const T& data ) { -// uf::MemoryPool& memoryPool = uf::memoryPool::global.size() > 0 ? uf::memoryPool::global : requestedMemoryPool; +// if ( std::is_reference() ) return uf::pointeredUserdata::create::type>( requestedMemoryPool, data ); pod::PointeredUserdata userdata = uf::pointeredUserdata::create( requestedMemoryPool, sizeof(data), nullptr ); userdata.type = UF_USERDATA_CTTI(T); union { @@ -133,7 +133,7 @@ bool uf::pointeredUserdata::is( const pod::PointeredUserdata& userdata ) { template pod::PointeredUserdata& uf::PointeredUserdata::create( const T& data ) { this->destroy(); - return this->m_pod = uf::pointeredUserdata::create(data); + return this->m_pod = uf::pointeredUserdata::create(data); } // Easy way to get the userdata as a reference template diff --git a/engine/inc/uf/utils/userdata/userdata.h b/engine/inc/uf/utils/userdata/userdata.h index d9a4d9c1..7289ccf4 100644 --- a/engine/inc/uf/utils/userdata/userdata.h +++ b/engine/inc/uf/utils/userdata/userdata.h @@ -16,6 +16,8 @@ #define UF_USERDATA_CTTI_TYPE TYPE_HASH_T // size_t #define UF_USERDATA_CTTI(T) TYPE_HASH(T) +#define DEBUG_PRINT_TYPE(name, T) UF_MSG_DEBUG(name << ": " << TYPE_NAME(T) << " | " << TYPE_HASH(T) << " | " << sizeof(T) ); + namespace pod { struct UF_API Userdata { size_t len = 0; diff --git a/engine/inc/uf/utils/userdata/userdata.inl b/engine/inc/uf/utils/userdata/userdata.inl index 13723ab1..9d3e785f 100644 --- a/engine/inc/uf/utils/userdata/userdata.inl +++ b/engine/inc/uf/utils/userdata/userdata.inl @@ -7,6 +7,9 @@ pod::Userdata* uf::userdata::create( const T& data ) { } template pod::Userdata* uf::userdata::create( uf::MemoryPool& requestedMemoryPool, const T& data ) { + // CTTI information of a T& != T +// if ( std::is_reference() ) return uf::userdata::create::type>( requestedMemoryPool, data ); + pod::Userdata* userdata = uf::userdata::create( requestedMemoryPool, sizeof(data), nullptr ); userdata->type = UF_USERDATA_CTTI(T); union { @@ -50,7 +53,7 @@ bool uf::userdata::is( const pod::Userdata* userdata ) { template pod::Userdata* uf::Userdata::create( const T& data ) { this->destroy(); - return this->m_pod = uf::userdata::create(data); + return this->m_pod = uf::userdata::create(data); } // Easy way to get the userdata as a reference template diff --git a/engine/src/engine/asset/asset.cpp b/engine/src/engine/asset/asset.cpp index 77fd2c3e..3dd17af2 100644 --- a/engine/src/engine/asset/asset.cpp +++ b/engine/src/engine/asset/asset.cpp @@ -80,7 +80,7 @@ void uf::Asset::processQueue() { tasks.emplace_back([=](){ auto filename = job.type == "cache" ? this->cache(job.uri, job.hash, job.mime) : this->load(job.uri, job.hash, job.mime); if ( filename == "" ) return; - uf::Serializer payload; + ext::json::Value payload; payload["filename"] = filename; payload["hash"] = job.hash; payload["mime"] = job.mime; @@ -105,7 +105,7 @@ void uf::Asset::processQueue() { } uf::stl::string filename = type == "cache" ? this->cache(uri, hash, mime) : this->load(uri, hash, mime); if ( callback != "" && filename != "" ) { - uf::Serializer payload; + ext::json::Value payload; payload["filename"] = filename; payload["hash"] = hash; payload["mime"] = mime; @@ -130,7 +130,7 @@ void uf::Asset::processQueue() { } uf::stl::string filename = type == "cache" ? this->cache(uri, hash, mime) : this->load(uri, hash, mime); if ( callback != "" && filename != "" ) { - uf::Serializer payload; + ext::json::Value payload; payload["filename"] = filename; payload["hash"] = hash; payload["mime"] = mime; @@ -152,7 +152,7 @@ void uf::Asset::processQueue() { tasks.emplace_back([=](){ auto filename = job.type == "cache" ? this->cache(job.uri, job.hash, job.mime) : this->load(job.uri, job.hash, job.mime); if ( filename == "" ) return; - uf::Serializer payload; + ext::json::Value payload; payload["filename"] = filename; payload["hash"] = job.hash; payload["mime"] = job.mime; @@ -192,10 +192,11 @@ uf::Asset::Payload uf::Asset::resolveToPayload( const uf::stl::string& uri, cons { "json", uf::Asset::Type::JSON }, { "lua", uf::Asset::Type::LUA }, - + #if !UF_ENV_DREAMCAST { "glb", uf::Asset::Type::GRAPH }, { "gltf", uf::Asset::Type::GRAPH }, { "mdl", uf::Asset::Type::GRAPH }, + #endif }; payload.filename = uri; diff --git a/engine/src/engine/object/behavior.cpp b/engine/src/engine/object/behavior.cpp index 0673a56f..90e26b86 100644 --- a/engine/src/engine/object/behavior.cpp +++ b/engine/src/engine/object/behavior.cpp @@ -212,7 +212,6 @@ void uf::ObjectBehavior::tick( uf::Object& self ) { if ( !uf::Object::timer.running() ) uf::Object::timer.start(); double curTime = uf::Object::timer.elapsed().asDouble(); -#if 1 decltype(metadata.hooks.queue) unprocessed; unprocessed.reserve( metadata.hooks.queue.size() ); @@ -221,20 +220,11 @@ void uf::ObjectBehavior::tick( uf::Object& self ) { for ( auto& q : queue ) if ( q.timeout < curTime ) executeQueue.emplace_back(q); else unprocessed.emplace_back(q); for ( auto& q : executeQueue ) { - if ( q.type == 0 ) { - this->callHook( q.name, q.json ); - } else { - this->callHook( q.name, q.userdata ); - } + if ( q.type == 1 ) this->callHook( q.name, q.userdata ); + else if ( q.type == -1 ) this->callHook( q.name, q.json ); + else this->callHook( q.name ); } queue = std::move(unprocessed); -#else - for ( auto it = queue.begin(); it != queue.end(); ) { - auto& q = *it; - if ( q.timeout < curTime ) { this->callHook( q.name, q.payload ); it = queue.erase( it ); } - else ++it; - } -#endif #if UF_ENTITY_METADATA_USE_JSON metadata.serialize(self, metadataJson); diff --git a/engine/src/engine/object/behaviors/loading.cpp b/engine/src/engine/object/behaviors/loading.cpp index 8037c220..d151170b 100644 --- a/engine/src/engine/object/behaviors/loading.cpp +++ b/engine/src/engine/object/behaviors/loading.cpp @@ -17,7 +17,7 @@ UF_BEHAVIOR_TRAITS_CPP(uf::LoadingBehavior, ticks = true, renders = false, multi #define this (&self) void uf::LoadingBehavior::initialize( uf::Object& self ) { auto& metadata = this->getComponent(); - this->addHook( "system:Load.Finished.%UID%", [&](ext::json::Value& json){ + this->addHook( "system:Load.Finished.%UID%", [&](){ metadata["system"]["loaded"] = true; // this->removeBehavior(pod::Behavior{.type = uf::LoadingBehavior::type}); this->removeBehavior(pod::Behavior{.type = TYPE(uf::LoadingBehavior::Metadata)}); @@ -26,7 +26,7 @@ void uf::LoadingBehavior::initialize( uf::Object& self ) { auto& scene = uf::scene::getCurrentScene(); if ( parent.getUid() != scene.getUid() ) { scene.moveChild(*this); - uf::Serializer payload; + ext::json::Value payload; payload["uid"] = parent.getUid(); parent.getParent().removeChild(parent); parent.process([&]( uf::Entity* entity ) { diff --git a/engine/src/engine/object/object.cpp b/engine/src/engine/object/object.cpp index d2825853..fcfb61ce 100644 --- a/engine/src/engine/object/object.cpp +++ b/engine/src/engine/object/object.cpp @@ -20,24 +20,35 @@ UF_OBJECT_REGISTER_BEGIN(uf::Object) UF_OBJECT_REGISTER_BEHAVIOR(uf::ObjectBehavior) UF_OBJECT_REGISTER_END() uf::Object::Object() UF_BEHAVIOR_ENTITY_CPP_ATTACH(uf::Object) -void uf::Object::queueHook( const uf::stl::string& name, const ext::json::Value& json, float timeout ) { + +uf::Hooks::return_t uf::Object::callHook( const uf::stl::string& name ) { + return uf::hooks.call( this->formatHookName( name ) ); +} +uf::Hooks::return_t uf::Object::callHook( const uf::stl::string& name, const pod::Hook::userdata_t& payload ) { + return uf::hooks.call( this->formatHookName( name ), payload ); +} +void uf::Object::queueHook( const uf::stl::string& name, float timeout ) { if ( !uf::Object::timer.running() ) uf::Object::timer.start(); double start = uf::Object::timer.elapsed().asDouble(); -#if UF_ENTITY_METADATA_USE_JSON - uf::Serializer queue; - queue["name"] = name; - queue["payload"] = json; - queue["timeout"] = start + timeout; - uf::Serializer& metadata = this->getComponent(); - metadata["system"]["hooks"]["queue"].emplace_back(queue); -#else + auto& metadata = this->getComponent(); auto& queue = metadata.hooks.queue.emplace_back(uf::ObjectBehavior::Metadata::Queued{ .name = name, - .json = json, .timeout = start + timeout, + .type = 0, }); -#endif +} +void uf::Object::queueHook( const uf::stl::string& name, const ext::json::Value& payload, float timeout ) { + if ( !uf::Object::timer.running() ) uf::Object::timer.start(); + double start = uf::Object::timer.elapsed().asDouble(); + + auto& metadata = this->getComponent(); + auto& queue = metadata.hooks.queue.emplace_back(uf::ObjectBehavior::Metadata::Queued{ + .name = name, + .timeout = start + timeout, + .type = -1, + }); + queue.json = payload; } uf::stl::string uf::Object::formatHookName( const uf::stl::string& n, size_t uid, bool fetch ) { if ( fetch ) { @@ -70,18 +81,6 @@ uf::stl::string uf::Object::formatHookName( const uf::stl::string& n ) { return name; } -uf::Hooks::return_t uf::Object::callHook( const uf::stl::string& name ) { - return uf::hooks.call( this->formatHookName( name ), ext::json::null() ); -} -uf::Hooks::return_t uf::Object::callHook( const uf::stl::string& name, const ext::json::Value& json ) { - return uf::hooks.call( this->formatHookName( name ), json ); -} -uf::Hooks::return_t uf::Object::callHook( const uf::stl::string& name, const uf::Serializer& serializer ) { - return uf::hooks.call( this->formatHookName( name ), (const ext::json::Value&) serializer ); -} -uf::Hooks::return_t uf::Object::callHook( const uf::stl::string& name, const pod::Hook::userdata_t& payload ) { - return uf::hooks.call( this->formatHookName( name ), payload ); -} bool uf::Object::load( const uf::stl::string& f, bool inheritRoot ) { uf::Serializer json; uf::stl::string root = ""; @@ -109,11 +108,11 @@ bool uf::Object::reload( bool hard ) { uf::Serializer& metadata = this->getComponent(); if ( !metadata["system"]["source"].is() ) return false; uf::Serializer json; - uf::Serializer payload; uf::stl::string filename = metadata["system"]["source"].as(); if ( !json.readFromFile( filename ) ) return false; if ( hard ) return this->load(filename); + ext::json::Value payload; payload["old"] = metadata; ext::json::forEach( json["metadata"], [&]( const uf::stl::string& key, const ext::json::Value& value ){ metadata[key] = value; diff --git a/engine/src/ext/bullet/bullet.cpp b/engine/src/ext/bullet/bullet.cpp index 7aa3816f..9576618d 100644 --- a/engine/src/ext/bullet/bullet.cpp +++ b/engine/src/ext/bullet/bullet.cpp @@ -198,11 +198,11 @@ void ext::bullet::syncTo() { uf::Object* entity = (uf::Object*) body->getUserPointer(); if ( !entity || !entity->isValid() || !entity->hasComponent() ) continue; - auto& collider = entity->getComponent(); - if ( !collider.shared ) continue; + auto& state = entity->getComponent(); + if ( !state.shared ) continue; auto& physics = entity->getComponent(); - auto model = uf::transform::model( collider.transform ); + auto model = uf::transform::model( state.transform ); btTransform t = body->getWorldTransform(); t.setFromOpenGLMatrix(&model[0]); @@ -222,32 +222,34 @@ void ext::bullet::syncFrom() { btTransform t = body->getWorldTransform(); // body->getMotionState()->getWorldTransform(t); - uf::Object* entity = (uf::Object*) body->getUserPointer(); - if ( !entity || !entity->isValid() || !entity->hasComponent() ) continue; + uf::Object* object = (uf::Object*) body->getUserPointer(); + if ( !object || !object->isValid() || !object->hasComponent() ) continue; - auto& collider = entity->getComponent(); + auto& state = object->getComponent();; + auto& transform = object->getComponent>(); + auto& physics = object->getComponent(); - auto& transform = entity->getComponent>(); - transform.position.x = t.getOrigin().getX(); - transform.position.y = t.getOrigin().getY(); - transform.position.z = t.getOrigin().getZ(); + /*state.*/transform.position.x = t.getOrigin().getX(); + /*state.*/transform.position.y = t.getOrigin().getY(); + /*state.*/transform.position.z = t.getOrigin().getZ(); - transform.orientation.x = t.getRotation().getX(); - transform.orientation.y = t.getRotation().getY(); - transform.orientation.z = t.getRotation().getZ(); - transform.orientation.w = t.getRotation().getW(); - - { - auto& physics = entity->getComponent(); - physics.linear.velocity.x = body->getLinearVelocity().getX(); - physics.linear.velocity.y = body->getLinearVelocity().getY(); - physics.linear.velocity.z = body->getLinearVelocity().getZ(); - - physics.rotational.velocity.x = body->getAngularVelocity().getX(); - physics.rotational.velocity.y = body->getAngularVelocity().getY(); - physics.rotational.velocity.z = body->getAngularVelocity().getZ(); + // state transform is an offset, un-offset + if ( state.transform.reference ) { + transform.position -= state.transform.position; } + + /*state.*/transform.orientation.x = t.getRotation().getX(); + /*state.*/transform.orientation.y = t.getRotation().getY(); + /*state.*/transform.orientation.z = t.getRotation().getZ(); + /*state.*/transform.orientation.w = t.getRotation().getW(); + physics.linear.velocity.x = body->getLinearVelocity().getX(); + physics.linear.velocity.y = body->getLinearVelocity().getY(); + physics.linear.velocity.z = body->getLinearVelocity().getZ(); + + physics.rotational.velocity.x = body->getAngularVelocity().getX(); + physics.rotational.velocity.y = body->getAngularVelocity().getY(); + physics.rotational.velocity.z = body->getAngularVelocity().getZ(); transform = uf::transform::reorient( transform ); } @@ -377,9 +379,9 @@ pod::PhysicsState& ext::bullet::create( uf::Object& object, const uf::Mesh& mesh */ return collider; } -pod::PhysicsState& ext::bullet::create( uf::Object& object, const pod::Vector3f& corner ) { +pod::PhysicsState& ext::bullet::create( uf::Object& object, const pod::Vector3f& extent ) { auto& collider = ext::bullet::create( object ); - collider.shape = new btBoxShape(btVector3(corner.x, corner.y, corner.z)); + collider.shape = new btBoxShape(btVector3(abs(extent.x), abs(extent.y), abs(extent.z))); ext::bullet::attach( collider ); auto& transform = object.getComponent>(); diff --git a/engine/src/ext/lua/lua.cpp b/engine/src/ext/lua/lua.cpp index fa08fd28..c6e0c682 100644 --- a/engine/src/ext/lua/lua.cpp +++ b/engine/src/ext/lua/lua.cpp @@ -70,8 +70,8 @@ namespace binds { }); }; void call( const uf::stl::string& name, sol::table table = ext::lua::createTable() ) { - uf::Serializer payload = table; - uf::hooks.call( name, (ext::json::Value&) payload ); + ext::json::Value payload = uf::Serializer(table); + uf::hooks.call( name, payload ); return; }; } diff --git a/engine/src/ext/lua/usertypes/object.cpp b/engine/src/ext/lua/usertypes/object.cpp index 4809c0a8..fbd9ddf1 100644 --- a/engine/src/ext/lua/usertypes/object.cpp +++ b/engine/src/ext/lua/usertypes/object.cpp @@ -140,12 +140,12 @@ namespace binds { }); } void callHook( uf::Object& self, const uf::stl::string& name, sol::table table = ext::lua::createTable() ) { - uf::Serializer payload = table; - self.callHook( name, (ext::json::Value&) payload ); + ext::json::Value payload = uf::Serializer(table); + self.callHook( name, payload ); } void queueHook( uf::Object& self, const uf::stl::string& name, sol::table table, float delay = 0.0f ) { - uf::Serializer payload = table; - self.queueHook( name, (ext::json::Value&) payload, delay ); + ext::json::Value payload = uf::Serializer(table); + self.queueHook( name, payload, delay ); } uf::stl::string toString( uf::Object& self ) { return self.getName() + ": " + std::to_string( self.getUid() ); diff --git a/engine/src/ext/openvr/openvr.cpp b/engine/src/ext/openvr/openvr.cpp index fbe5ed36..9e60a692 100644 --- a/engine/src/ext/openvr/openvr.cpp +++ b/engine/src/ext/openvr/openvr.cpp @@ -297,7 +297,7 @@ void ext::openvr::tick() { texture.fromBuffers( (void*) queued.texture->rubTextureMapData, len, uf::renderer::enums::Format::R8G8B8A8_UNORM, queued.texture->unWidth, queued.texture->unHeight ); } // call hook - uf::Serializer payload; + ext::json::Value payload; payload["name"] = name; uf::hooks.call( "VR:Model.Loaded", payload ); @@ -340,7 +340,7 @@ void ext::openvr::tick() { pod::Vector3f delta = { data.deltaX, data.deltaY, data.deltaZ }; pod::Vector3f position = { data.x, data.y, data.z }; if ( data.bActive ) { - uf::Serializer payload; + ext::json::Value payload; uf::stl::vector split = uf::string::split( name, "/" ); uf::stl::string shortname = split.back(); split = uf::string::split( shortname, "." ); @@ -368,7 +368,7 @@ void ext::openvr::tick() { vr::InputDigitalActionData_t data; if ( vr::VRInputError_None == vr::VRInput()->GetDigitalActionData(handle, &data, sizeof(data), vr::k_ulInvalidInputValueHandle) ) { if ( data.bActive ) { - uf::Serializer payload; + ext::json::Value payload; uf::stl::vector split = uf::string::split( name, "/" ); uf::stl::string shortname = split.back(); split = uf::string::split( shortname, "." ); diff --git a/engine/src/ext/reactphysics/reactphysics.cpp b/engine/src/ext/reactphysics/reactphysics.cpp index c6f596de..ed484db0 100644 --- a/engine/src/ext/reactphysics/reactphysics.cpp +++ b/engine/src/ext/reactphysics/reactphysics.cpp @@ -309,6 +309,8 @@ void ext::reactphysics::syncFrom() { physics.rotational.velocity.x = rotationalVelocity.x; physics.rotational.velocity.y = rotationalVelocity.y; physics.rotational.velocity.z = rotationalVelocity.z; + + transform = uf::transform::reorient( transform ); } } // apply impulse diff --git a/engine/src/ext/vulkan/device.cpp b/engine/src/ext/vulkan/device.cpp index 6d61f336..4115bf92 100644 --- a/engine/src/ext/vulkan/device.cpp +++ b/engine/src/ext/vulkan/device.cpp @@ -62,7 +62,7 @@ namespace { } void enableRequestedDeviceFeatures( ext::vulkan::Device& device ) { - uf::Serializer json; + ext::json::Value json; #define CHECK_FEATURE( NAME )\ if ( feature == #NAME ) {\ @@ -140,8 +140,8 @@ namespace { } #undef CHECK_FEATURE2 } - uf::Serializer retrieveDeviceFeatures( ext::vulkan::Device& device ) { - uf::Serializer json; + ext::json::Value retrieveDeviceFeatures( ext::vulkan::Device& device ) { + ext::json::Value json; #define CHECK_FEATURE( NAME )\ json[#NAME]["supported"] = device.features.NAME;\ @@ -783,12 +783,12 @@ void ext::vulkan::Device::initialize() { UF_EXCEPTION("Vulkan error: failed to create logical device!"); } { - uf::Serializer payload = ext::json::array(); + ext::json::Value payload = ext::json::array(); for ( auto* c_str : deviceExtensions ) payload.emplace_back( uf::stl::string(c_str) ); uf::hooks.call("vulkan:Device.ExtensionsEnabled", payload); } { - uf::Serializer payload = retrieveDeviceFeatures( *this ); + ext::json::Value payload = retrieveDeviceFeatures( *this ); if ( ext::vulkan::settings::validation ) uf::iostream << payload.dump() << "\n"; uf::hooks.call("vulkan:Device.FeaturesEnabled", payload); } diff --git a/engine/src/spec/controller/dreamcast.cpp b/engine/src/spec/controller/dreamcast.cpp index 3c13ace9..ec118f6b 100644 --- a/engine/src/spec/controller/dreamcast.cpp +++ b/engine/src/spec/controller/dreamcast.cpp @@ -72,79 +72,37 @@ void spec::dreamcast::controller::tick() { if ( !::controller.state ) return; -// uf::inputs::controller::states::C = ::controller.state->buttons & CONT_C; - uf::inputs::controller::states::B = ::controller.state->buttons & CONT_B; uf::inputs::controller::states::A = ::controller.state->buttons & CONT_A; + uf::inputs::controller::states::B = ::controller.state->buttons & CONT_B; + uf::inputs::controller::states::X = ::controller.state->buttons & CONT_X; + uf::inputs::controller::states::Y = ::controller.state->buttons & CONT_Y; + uf::inputs::controller::states::START = ::controller.state->buttons & CONT_START; + uf::inputs::controller::states::DPAD_UP = ::controller.state->buttons & CONT_DPAD_UP; uf::inputs::controller::states::DPAD_DOWN = ::controller.state->buttons & CONT_DPAD_DOWN; uf::inputs::controller::states::DPAD_LEFT = ::controller.state->buttons & CONT_DPAD_LEFT; uf::inputs::controller::states::DPAD_RIGHT = ::controller.state->buttons & CONT_DPAD_RIGHT; -// uf::inputs::controller::states::Z = ::controller.state->buttons & CONT_Z; - uf::inputs::controller::states::Y = ::controller.state->buttons & CONT_Y; - uf::inputs::controller::states::X = ::controller.state->buttons & CONT_X; + +// uf::inputs::controller::states::C = ::controller.state->buttons & CONT_C; // uf::inputs::controller::states::D = ::controller.state->buttons & CONT_D; +// uf::inputs::controller::states::Z = ::controller.state->buttons & CONT_Z; - uf::inputs::controller::states::L_DPAD_UP = ::controller.state->buttons & CONT_DPAD_UP; - uf::inputs::controller::states::L_DPAD_DOWN = ::controller.state->buttons & CONT_DPAD_DOWN; - uf::inputs::controller::states::L_DPAD_LEFT = ::controller.state->buttons & CONT_DPAD_LEFT; - uf::inputs::controller::states::L_DPAD_RIGHT = ::controller.state->buttons & CONT_DPAD_RIGHT; + uf::inputs::controller::states::L_TRIGGER = NORMALIZE(::controller.state->ltrig); + uf::inputs::controller::states::R_TRIGGER = NORMALIZE(::controller.state->rtrig); - uf::inputs::controller::states::R_DPAD_UP = ::controller.state->buttons & CONT_DPAD2_UP; - uf::inputs::controller::states::R_DPAD_DOWN = ::controller.state->buttons & CONT_DPAD2_DOWN; - uf::inputs::controller::states::R_DPAD_LEFT = ::controller.state->buttons & CONT_DPAD2_LEFT; - uf::inputs::controller::states::R_DPAD_RIGHT = ::controller.state->buttons & CONT_DPAD2_RIGHT; + uf::inputs::controller::states::L_JOYSTICK.x = NORMALIZE(::controller.state->joyx); + uf::inputs::controller::states::L_JOYSTICK.y = NORMALIZE(::controller.state->joyy); -/* - if ( uf::inputs::controller::states::B ) UF_MSG_DEBUG("[Pressed] B"); - if ( uf::inputs::controller::states::A ) UF_MSG_DEBUG("[Pressed] A"); - if ( uf::inputs::controller::states::START ) UF_MSG_DEBUG("[Pressed] START"); - if ( uf::inputs::controller::states::DPAD_UP ) UF_MSG_DEBUG("[Pressed] DPAD_UP"); - if ( uf::inputs::controller::states::DPAD_DOWN ) UF_MSG_DEBUG("[Pressed] DPAD_DOWN"); - if ( uf::inputs::controller::states::DPAD_LEFT ) UF_MSG_DEBUG("[Pressed] DPAD_LEFT"); - if ( uf::inputs::controller::states::DPAD_RIGHT ) UF_MSG_DEBUG("[Pressed] DPAD_RIGHT"); - if ( uf::inputs::controller::states::Y ) UF_MSG_DEBUG("[Pressed] Y"); - if ( uf::inputs::controller::states::X ) UF_MSG_DEBUG("[Pressed] X"); - - if ( uf::inputs::controller::states::L_DPAD_UP ) UF_MSG_DEBUG("[Pressed] L_DPAD_UP"); - if ( uf::inputs::controller::states::L_DPAD_DOWN ) UF_MSG_DEBUG("[Pressed] L_DPAD_DOWN"); - if ( uf::inputs::controller::states::L_DPAD_LEFT ) UF_MSG_DEBUG("[Pressed] L_DPAD_LEFT"); - if ( uf::inputs::controller::states::L_DPAD_RIGHT ) UF_MSG_DEBUG("[Pressed] L_DPAD_RIGHT"); - - if ( uf::inputs::controller::states::R_DPAD_UP ) UF_MSG_DEBUG("[Pressed] R_DPAD_UP"); - if ( uf::inputs::controller::states::R_DPAD_DOWN ) UF_MSG_DEBUG("[Pressed] R_DPAD_DOWN"); - if ( uf::inputs::controller::states::R_DPAD_LEFT ) UF_MSG_DEBUG("[Pressed] R_DPAD_LEFT"); - if ( uf::inputs::controller::states::R_DPAD_RIGHT ) UF_MSG_DEBUG("[Pressed] R_DPAD_RIGHT"); -*/ - -#if 0 - uf::stl::vector str; - pod::Vector2f joystick = { analog("L_JOYSTICK_X"), analog("L_JOYSTICK_Y") }; - if ( joystick ) str.emplace_back("Joystick: " + uf::vector::toString(joystick)); - if ( pressed("C") ) str.emplace_back("C"); - if ( pressed("B") ) str.emplace_back("B"); - if ( pressed("A") ) str.emplace_back("A"); - if ( pressed("START") ) str.emplace_back("START"); - if ( pressed("L_DPAD_UP") ) str.emplace_back("L_DPAD_UP"); - if ( pressed("L_DPAD_DOWN") ) str.emplace_back("L_DPAD_DOWN"); - if ( pressed("L_DPAD_LEFT") ) str.emplace_back("L_DPAD_LEFT"); - if ( pressed("L_DPAD_RIGHT") ) str.emplace_back("L_DPAD_RIGHT"); - if ( pressed("Z") ) str.emplace_back("Z"); - if ( pressed("Y") ) str.emplace_back("Y"); - if ( pressed("X") ) str.emplace_back("X"); - if ( pressed("D") ) str.emplace_back("D"); - if ( pressed("R_DPAD_UP") ) str.emplace_back("R_DPAD_UP"); - if ( pressed("R_DPAD_DOWN") ) str.emplace_back("R_DPAD_DOWN"); - if ( pressed("R_DPAD_LEFT") ) str.emplace_back("R_DPAD_LEFT"); - if ( pressed("R_DPAD_RIGHT") ) str.emplace_back("R_DPAD_RIGHT"); - if ( !str.empty() ) UF_MSG_DEBUG(uf::string::join( str, " | " )); -#endif + uf::inputs::controller::states::R_JOYSTICK.x = NORMALIZE(::controller.state->joy2x); + uf::inputs::controller::states::R_JOYSTICK.y = NORMALIZE(::controller.state->joy2y); } void spec::dreamcast::controller::terminate() { } bool spec::dreamcast::controller::connected( size_t i ) { return ::controller.state; } +/* bool spec::dreamcast::controller::pressed( const uf::stl::string& str, size_t i ) { if ( !::controller.state ) return false; return ::controller.state->buttons & GetKeyCode( str ); @@ -162,5 +120,5 @@ float spec::dreamcast::controller::analog( const uf::stl::string& str, size_t i else if ( str == "R_JOYSTICK_Y" ) return NORMALIZE(::controller.state->joy2y); return 0.0f; } - +*/ #endif \ No newline at end of file diff --git a/engine/src/spec/controller/universal.cpp b/engine/src/spec/controller/universal.cpp index a8810309..cee8244f 100644 --- a/engine/src/spec/controller/universal.cpp +++ b/engine/src/spec/controller/universal.cpp @@ -4,5 +4,7 @@ void spec::uni::controller::initialize() {} void spec::uni::controller::tick() {} void spec::uni::controller::terminate() {} bool spec::uni::controller::connected( size_t ) { return false; } +/* bool spec::uni::controller::pressed( const uf::stl::string&, size_t ) { return false; } -float spec::uni::controller::analog( const uf::stl::string&, size_t ) { return 0; } \ No newline at end of file +float spec::uni::controller::analog( const uf::stl::string&, size_t ) { return 0; } +*/ \ No newline at end of file diff --git a/engine/src/spec/controller/windows.cpp b/engine/src/spec/controller/windows.cpp index 0f60de81..83f04723 100644 --- a/engine/src/spec/controller/windows.cpp +++ b/engine/src/spec/controller/windows.cpp @@ -7,7 +7,59 @@ #endif void spec::win32::controller::initialize() {} -void spec::win32::controller::tick() {} +void spec::win32::controller::tick() { +#if 0 || UF_USE_OPENVR + if ( ext::openvr::context ) { + uf::stl::string key = ""; + if ( name == "R_DPAD_UP" ) { i = vr::Controller_Hand::Hand_Right; key = "dpadUp"; } + else if ( name == "R_DPAD_DOWN" ) { i = vr::Controller_Hand::Hand_Right; key = "dpadDown"; } + else if ( name == "R_DPAD_LEFT" ) { i = vr::Controller_Hand::Hand_Right; key = "dpadLeft"; } + else if ( name == "R_DPAD_RIGHT" ) { i = vr::Controller_Hand::Hand_Right; key = "dpadRight"; } + else if ( name == "R_JOYSTICK" ) { i = vr::Controller_Hand::Hand_Right; key = "thumbclick"; } + else if ( name == "R_A" ) { i = vr::Controller_Hand::Hand_Right; key = "a"; } + else if ( name == "R_B" ) { i = vr::Controller_Hand::Hand_Right; key = "b"; } + else if ( name == "DPAD_UP" && i == vr::Controller_Hand::Hand_Right ) key = "dpadUp"; + else if ( name == "DPAD_DOWN" && i == vr::Controller_Hand::Hand_Right ) key = "dpadDown"; + else if ( name == "DPAD_LEFT" && i == vr::Controller_Hand::Hand_Right ) key = "dpadLeft"; + else if ( name == "DPAD_RIGHT" && i == vr::Controller_Hand::Hand_Right ) key = "dpadRight"; + else if ( name == "JOYSTICK" && i == vr::Controller_Hand::Hand_Right ) key = "thumbclick"; + else if ( name == "A" && i == vr::Controller_Hand::Hand_Right ) key = "a"; + else if ( name == "B" && i == vr::Controller_Hand::Hand_Right ) key = "b"; + + else if ( name == "L_DPAD_UP" ) { i = vr::Controller_Hand::Hand_Left; key = "dpadUp"; } + else if ( name == "L_DPAD_DOWN" ) { i = vr::Controller_Hand::Hand_Left; key = "dpadDown"; } + else if ( name == "L_DPAD_LEFT" ) { i = vr::Controller_Hand::Hand_Left; key = "dpadLeft"; } + else if ( name == "L_DPAD_RIGHT" ) { i = vr::Controller_Hand::Hand_Left; key = "dpadRight"; } + else if ( name == "L_JOYSTICK" ) { i = vr::Controller_Hand::Hand_Left; key = "thumbclick"; } + else if ( name == "L_A" ) { i = vr::Controller_Hand::Hand_Left; key = "a"; } + else if ( name == "L_B" ) { i = vr::Controller_Hand::Hand_Left; key = "b"; } + else if ( name == "DPAD_UP" && i == vr::Controller_Hand::Hand_Left ) key = "dpadUp"; + else if ( name == "DPAD_DOWN" && i == vr::Controller_Hand::Hand_Left ) key = "dpadDown"; + else if ( name == "DPAD_LEFT" && i == vr::Controller_Hand::Hand_Left ) key = "dpadLeft"; + else if ( name == "DPAD_RIGHT" && i == vr::Controller_Hand::Hand_Left ) key = "dpadRight"; + else if ( name == "JOYSTICK" && i == vr::Controller_Hand::Hand_Left ) key = "thumbclick"; + else if ( name == "A" && i == vr::Controller_Hand::Hand_Left ) key = "a"; + else if ( name == "B" && i == vr::Controller_Hand::Hand_Left ) key = "b"; + + if ( name != "" ) return ext::openvr::controllerState( i == 0 ? vr::Controller_Hand::Hand_Left : vr::Controller_Hand::Hand_Right, key )["state"].as(); + } + if ( ext::openvr::context ) { + size_t offset = 0; + uf::stl::string key = ""; + if ( name == "R_JOYSTICK_X" ) { i = vr::Controller_Hand::Hand_Right; key = "thumbstick"; offset = 0; } + else if ( name == "JOYSTICK_X" && i == vr::Controller_Hand::Hand_Right ) { key = "thumbstick"; offset = 0;} + else if ( name == "R_JOYSTICK_Y" ) { i = vr::Controller_Hand::Hand_Right; key = "thumbstick"; offset = 1; } + else if ( name == "JOYSTICK_Y" && i == vr::Controller_Hand::Hand_Right ) { key = "thumbstick"; offset = 1; } + + else if ( name == "L_JOYSTICK_X" ) { i = vr::Controller_Hand::Hand_Left; key = "thumbstick"; offset = 0; } + else if ( name == "JOYSTICK_X" && i == vr::Controller_Hand::Hand_Left ) { key = "thumbstick"; offset = 0;} + else if ( name == "L_JOYSTICK_Y" ) { i = vr::Controller_Hand::Hand_Left; key = "thumbstick"; offset = 1; } + else if ( name == "JOYSTICK_Y" && i == vr::Controller_Hand::Hand_Left ) { key = "thumbstick"; offset = 1; } + + if ( name != "" ) return ext::openvr::controllerState( i == 0 ? vr::Controller_Hand::Hand_Left : vr::Controller_Hand::Hand_Right, key )["analog"]["position"][offset].as(); + } +#endif +} void spec::win32::controller::terminate() {} bool spec::win32::controller::connected( size_t i ) { #if UF_USE_OPENVR @@ -15,6 +67,7 @@ bool spec::win32::controller::connected( size_t i ) { #endif return false; } +/* bool spec::win32::controller::pressed( const uf::stl::string& _name, size_t i ) { uf::stl::string name = uf::string::uppercase(_name); #if UF_USE_OPENVR @@ -76,5 +129,5 @@ float spec::win32::controller::analog( const uf::stl::string& _name, size_t i ) #endif return 0; } - +*/ #endif \ No newline at end of file diff --git a/engine/src/spec/window/dreamcast.cpp b/engine/src/spec/window/dreamcast.cpp index 5157b168..0293e312 100644 --- a/engine/src/spec/window/dreamcast.cpp +++ b/engine/src/spec/window/dreamcast.cpp @@ -19,6 +19,9 @@ INIT_MALLOCSTATS -- Enable a call to malloc_stats() right before shutdown #include +#define UF_HOOK_USE_USERDATA 1 +#define UF_HOOK_USE_JSON 0 + extern uint8 romdisk[]; KOS_INIT_FLAGS(INIT_DEFAULT | INIT_MALLOCSTATS); KOS_INIT_ROMDISK(romdisk); @@ -519,8 +522,8 @@ void UF_API_CALL spec::dreamcast::Window::processEvents() { } } }; - #if UF_USE_JSON - uf::Serializer json; + #if UF_HOOK_USE_JSON + ext::json::Value json; json["type"] = event.type + "." + ((event.key.state == -1)?"Pressed":"Released"); json["invoker"] = event.invoker; json["key"]["code"] = ""; @@ -537,11 +540,11 @@ void UF_API_CALL spec::dreamcast::Window::processEvents() { event.key.code = code; event.key.raw = key; - #if UF_USE_USERDATA + #if UF_HOOK_USE_USERDATA this->pushEvent(event.type, event); this->pushEvent(event.type + "." + code, event); #endif - #if UF_USE_JSON + #if UF_HOOK_USE_JSON json["key"]["code"] = code; json["key"]["raw"] = key; this->pushEvent(event.type, json); @@ -559,7 +562,7 @@ bool UF_API_CALL spec::dreamcast::Window::pollEvents( bool block ) { while ( !this->m_events.empty() ) { auto& event = this->m_events.front(); - if ( event.payload.is() ) { + /*if ( event.payload.is() ) { ext::json::Value payload = uf::Serializer( event.payload.as() ); uf::hooks.call( "window:Event", payload ); uf::hooks.call( event.name, payload ); @@ -571,7 +574,7 @@ bool UF_API_CALL spec::dreamcast::Window::pollEvents( bool block ) { ext::json::Value& payload = event.payload.as(); uf::hooks.call( "window:Event", payload ); uf::hooks.call( event.name, payload ); - } else { + } else */{ uf::hooks.call( "window:Event", event.payload ); uf::hooks.call( event.name, event.payload ); } diff --git a/engine/src/spec/window/universal.cpp b/engine/src/spec/window/universal.cpp index 20582a10..7bd7c5b1 100644 --- a/engine/src/spec/window/universal.cpp +++ b/engine/src/spec/window/universal.cpp @@ -44,6 +44,7 @@ void UF_API_CALL spec::uni::Window::pushEvent( const uf::OptimalHook::argument_t this->m_events.optimal.back().argument = userdata; } */ +/* void UF_API_CALL spec::uni::Window::pushEvent( const uf::Hooks::name_t& name, const uf::stl::string& payload ) { auto& event = this->m_events.emplace(); event.name = name; @@ -59,6 +60,7 @@ void UF_API_CALL spec::uni::Window::pushEvent( const uf::Hooks::name_t& name, co event.name = name; event.payload.create( uf::Serializer(payload) ); } +*/ void UF_API_CALL spec::uni::Window::pushEvent( const uf::Hooks::name_t& name, const pod::Hook::userdata_t& payload ) { auto& event = this->m_events.emplace(); event.name = name; @@ -88,6 +90,7 @@ bool UF_API_CALL spec::uni::Window::pollEvents( bool block ) { // doesnt get used while ( !this->m_events.empty() ) { auto& event = this->m_events.front(); + /* if ( event.payload.is() ) { ext::json::Value payload = uf::Serializer( event.payload.as() ); uf::hooks.call( "window:Event", payload ); @@ -100,7 +103,7 @@ bool UF_API_CALL spec::uni::Window::pollEvents( bool block ) { ext::json::Value& payload = event.payload.as(); uf::hooks.call( "window:Event", payload ); uf::hooks.call( event.name, payload ); - } else { + } else */ { uf::hooks.call( "window:Event", event.payload ); uf::hooks.call( event.name, event.payload ); } diff --git a/engine/src/spec/window/windows.cpp b/engine/src/spec/window/windows.cpp index 08a67fc6..dbf1d544 100644 --- a/engine/src/spec/window/windows.cpp +++ b/engine/src/spec/window/windows.cpp @@ -806,7 +806,7 @@ void UF_API_CALL spec::win32::Window::processEvents() { } }; #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type + "." + ((event.key.state == -1)?"Pressed":"Released"); json["invoker"] = event.invoker; json["key"]["code"] = ""; @@ -845,6 +845,7 @@ bool UF_API_CALL spec::win32::Window::pollEvents( bool block ) { while ( !this->m_events.empty() ) { auto& event = this->m_events.front(); + /* if ( event.payload.is() ) { ext::json::Value payload = uf::Serializer( event.payload.as() ); uf::hooks.call( "window:Event", payload ); @@ -857,7 +858,7 @@ bool UF_API_CALL spec::win32::Window::pollEvents( bool block ) { ext::json::Value& payload = event.payload.as(); uf::hooks.call( "window:Event", payload ); uf::hooks.call( event.name, payload ); - } else { + } else */ { uf::hooks.call( "window:Event", event.payload ); uf::hooks.call( event.name, event.payload ); } @@ -935,7 +936,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, uf::stl::stringstream serializer; bool labelAsDelta = true; - uf::Serializer json; + ext::json::Value json; switch (message) { case WM_DESTROY: @@ -953,7 +954,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; this->pushEvent(event.type, json); @@ -974,7 +975,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; json["window"]["size"] = uf::vector::encode(event.window.size); @@ -1002,7 +1003,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; json["window"]["size"] = uf::vector::encode(event.window.size); @@ -1017,7 +1018,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; this->pushEvent(event.type, json); @@ -1058,7 +1059,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; switch ( message ) { @@ -1104,7 +1105,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; json["text"]["uint32_t"] = event.text.utf32; @@ -1150,7 +1151,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type + "." + event.key.code, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type + "." + ((event.key.state == -1)?"Pressed":"Released"); json["invoker"] = event.invoker; json["key"]["state"] = (event.key.state == -1) ? "Down" : "Up"; @@ -1189,7 +1190,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; json["mouse"]["position"] = uf::vector::encode(event.mouse.position); @@ -1254,7 +1255,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; json["mouse"]["position"] = uf::vector::encode(event.mouse.position); @@ -1292,7 +1293,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; switch (event.mouse.state) { @@ -1359,7 +1360,7 @@ void UF_API_CALL spec::win32::Window::processEvent(UINT message, WPARAM wParam, this->pushEvent(event.type, event); #endif #if UF_HOOK_USE_JSON - uf::Serializer json; + ext::json::Value json; json["type"] = event.type; json["invoker"] = event.invoker; diff --git a/engine/src/utils/hook/hook.cpp b/engine/src/utils/hook/hook.cpp index 174d223c..a3f1f08d 100644 --- a/engine/src/utils/hook/hook.cpp +++ b/engine/src/utils/hook/hook.cpp @@ -21,43 +21,31 @@ void uf::Hooks::removeHook( const uf::Hooks::name_t& name, size_t uid ) { } } } +/* +uf::Hooks::return_t uf::Hooks::call( const uf::Hooks::name_t& name ) { + pod::Hook::userdata_t payload{}; + return call( name, payload ); +} +*/ uf::Hooks::return_t uf::Hooks::call( const uf::Hooks::name_t& name, const pod::Hook::userdata_t& payload ) { auto& container = this->m_container[name]; uf::stl::vector results; results.reserve( container.size() ); - + for ( auto& hook : container ) { - #if UF_USERDATA_USE_CTTI + // if ( payload.type() != hook.type.hash ) continue; // UF_MSG_DEBUG( name << ": " << payload.type() << " == " << hook.type.hash << "\t\t" << payload.size() << " == " << hook.type.size ); - if ( payload.type() != hook.type.hash ) continue; - #endif - if ( payload.size() != hook.type.size ) continue; + if ( payload.size() != hook.type.size && hook.type.size > 0 ) continue; + pod::Hook::userdata_t& unconst_payload = const_cast(payload); pod::Hook::userdata_t hookResult = hook.callback(unconst_payload); auto& returnResult = results.emplace_back(); returnResult.move( hookResult ); } - return results; } -uf::Hooks::return_t uf::Hooks::call( const uf::Hooks::name_t& name, const uf::stl::string& s ) { - pod::Hook::userdata_t payload; - payload.create(); - auto& value = payload.get(); - value = uf::Serializer(s); - return call(name, payload); -} -uf::Hooks::return_t uf::Hooks::call( const uf::Hooks::name_t& name, const ext::json::Value& s ) { - pod::Hook::userdata_t payload; - payload.create( s ); - return call(name, payload); -} -uf::Hooks::return_t uf::Hooks::call( const uf::Hooks::name_t& name, const uf::Serializer& s ) { - pod::Hook::userdata_t payload; - payload.create( (const ext::json::Value&) s ); - return call(name, payload); -} + // specialization: void function size_t uf::Hooks::addHook( const uf::Hooks::name_t& name, const std::function& callback ) { return addHook( name, [=]( const pod::Hook::userdata_t& userdata ){ diff --git a/engine/src/utils/io/inputs.cpp b/engine/src/utils/io/inputs.cpp index 8aabe63c..3556ad84 100644 --- a/engine/src/utils/io/inputs.cpp +++ b/engine/src/utils/io/inputs.cpp @@ -106,22 +106,34 @@ uf::inputs::state_t uf::inputs::controller::states::R_DPAD_UP = false; uf::inputs::state_t uf::inputs::controller::states::R_DPAD_DOWN = false; uf::inputs::state_t uf::inputs::controller::states::R_DPAD_LEFT = false; uf::inputs::state_t uf::inputs::controller::states::R_DPAD_RIGHT = false; -uf::inputs::state_t uf::inputs::controller::states::R_JOYSTICK = false; uf::inputs::state_t uf::inputs::controller::states::R_A = false; +uf::inputs::state_t uf::inputs::controller::states::R_B = false; +uf::inputs::state_t uf::inputs::controller::states::R_X = false; +uf::inputs::state_t uf::inputs::controller::states::R_Y = false; + uf::inputs::state_t uf::inputs::controller::states::L_DPAD_UP = false; uf::inputs::state_t uf::inputs::controller::states::L_DPAD_DOWN = false; uf::inputs::state_t uf::inputs::controller::states::L_DPAD_LEFT = false; uf::inputs::state_t uf::inputs::controller::states::L_DPAD_RIGHT = false; -uf::inputs::state_t uf::inputs::controller::states::L_JOYSTICK = false; uf::inputs::state_t uf::inputs::controller::states::L_A = false; -uf::inputs::state_t uf::inputs::controller::states::DPAD_UP = false; -uf::inputs::state_t uf::inputs::controller::states::DPAD_DOWN = false; -uf::inputs::state_t uf::inputs::controller::states::DPAD_LEFT = false; -uf::inputs::state_t uf::inputs::controller::states::DPAD_RIGHT = false; -uf::inputs::state_t uf::inputs::controller::states::A = false; -uf::inputs::state_t uf::inputs::controller::states::B = false; -uf::inputs::state_t uf::inputs::controller::states::X = false; -uf::inputs::state_t uf::inputs::controller::states::Y = false; -uf::inputs::state_t uf::inputs::controller::states::L_TRIGGER = false; -uf::inputs::state_t uf::inputs::controller::states::R_TRIGGER = false; +uf::inputs::state_t uf::inputs::controller::states::L_B = false; +uf::inputs::state_t uf::inputs::controller::states::L_X = false; +uf::inputs::state_t uf::inputs::controller::states::L_Y = false; + +uf::inputs::state_t& uf::inputs::controller::states::DPAD_UP = uf::inputs::controller::states::L_DPAD_UP; +uf::inputs::state_t& uf::inputs::controller::states::DPAD_DOWN = uf::inputs::controller::states::L_DPAD_DOWN; +uf::inputs::state_t& uf::inputs::controller::states::DPAD_LEFT = uf::inputs::controller::states::L_DPAD_LEFT; +uf::inputs::state_t& uf::inputs::controller::states::DPAD_RIGHT = uf::inputs::controller::states::L_DPAD_RIGHT; + +uf::inputs::state_t& uf::inputs::controller::states::A = uf::inputs::controller::states::R_A; +uf::inputs::state_t& uf::inputs::controller::states::B = uf::inputs::controller::states::R_B; +uf::inputs::state_t& uf::inputs::controller::states::X = uf::inputs::controller::states::R_X; +uf::inputs::state_t& uf::inputs::controller::states::Y = uf::inputs::controller::states::R_Y; + +uf::inputs::analog2_t uf::inputs::controller::states::L_JOYSTICK = {}; +uf::inputs::analog2_t uf::inputs::controller::states::R_JOYSTICK = {}; + +uf::inputs::analog_t uf::inputs::controller::states::L_TRIGGER = false; +uf::inputs::analog_t uf::inputs::controller::states::R_TRIGGER = false; + uf::inputs::state_t uf::inputs::controller::states::START = false; \ No newline at end of file diff --git a/engine/src/utils/mesh/mesh.cpp b/engine/src/utils/mesh/mesh.cpp index b68a9f11..35033c7e 100644 --- a/engine/src/utils/mesh/mesh.cpp +++ b/engine/src/utils/mesh/mesh.cpp @@ -104,7 +104,7 @@ void uf::Mesh::insert( const uf::Mesh& mesh ) { void uf::Mesh::generateIndices() { // deduce type size_t size = sizeof(uint32_t); - uf::renderer::enums::Type::type_t type; + uf::renderer::enums::Type::type_t type{}; /*if ( vertex.count <= std::numeric_limits::max() ) { size = sizeof(uint8_t); type = uf::renderer::typeToEnum(); } else*/ if ( vertex.count <= std::numeric_limits::max() ) { size = sizeof(uint16_t); type = uf::renderer::typeToEnum(); } else if ( vertex.count <= std::numeric_limits::max() ) { size = sizeof(uint32_t); type = uf::renderer::typeToEnum(); } diff --git a/engine/src/utils/window/window.cpp b/engine/src/utils/window/window.cpp index 72b366ab..a5d7fc03 100644 --- a/engine/src/utils/window/window.cpp +++ b/engine/src/utils/window/window.cpp @@ -77,7 +77,7 @@ void UF_API_CALL uf::Window::setTitle( const spec::uni::Window::title_t& title ) if ( !this->m_window ) return; this->m_window->setTitle(title); - uf::Serializer json; + ext::json::Value json; uf::stl::string hook = "window:Title.Changed"; json["type"] = hook; json["invoker"] = "os"; diff --git a/ext/behaviors/baking/behavior.cpp b/ext/behaviors/baking/behavior.cpp index 8019301d..d45fd5de 100644 --- a/ext/behaviors/baking/behavior.cpp +++ b/ext/behaviors/baking/behavior.cpp @@ -128,7 +128,7 @@ SAVE: { UF_MSG_DEBUG("Reverted shadow limits"); - uf::Serializer payload; + ext::json::Value payload; payload["uid"] = this->getUid(); uf::scene::getCurrentScene().queueHook("system:Destroy", payload); #endif diff --git a/ext/behaviors/player/behavior.cpp b/ext/behaviors/player/behavior.cpp index e0af02f4..45d6913c 100644 --- a/ext/behaviors/player/behavior.cpp +++ b/ext/behaviors/player/behavior.cpp @@ -111,7 +111,7 @@ void ext::PlayerBehavior::initialize( uf::Object& self ) { uf::Serializer charaData = masterDataGet("Chara", cardData["character_id"].as()); uf::stl::string leader = charaData["name"].as(); - uf::Serializer payload = json; + ext::json::Value payload = json; payload["details"] = "Leader: " + leader; uf::hooks.call( "discord:Activity.Update", payload ); }); @@ -212,8 +212,8 @@ void ext::PlayerBehavior::tick( uf::Object& self ) { stats.noclipped = metadata.system.noclipped; stats.floored = stats.noclipped; auto& collider = this->getComponent(); - if ( !stats.floored && collider.body && uf::physics::impl::rayCast( transform.position, transform.position - pod::Vector3f{0,1,0} ) >= 0.0f ) stats.floored = true; else - stats.floored |= fabs(physics.linear.velocity.y) < 0.01f; + if ( !stats.floored && collider.body && uf::physics::impl::rayCast( transform.position, transform.position - pod::Vector3f{0,1,0} ) >= 0.0f ) stats.floored = true; + else stats.floored |= fabs(physics.linear.velocity.y) < 0.01f; TIMER(0.125, keys.use && ) { size_t uid = 0; @@ -224,7 +224,7 @@ void ext::PlayerBehavior::tick( uf::Object& self ) { float depth = uf::physics::impl::rayCast( pos, pos + dir, pointer ); if ( pointer ) { - uf::Serializer payload; + ext::json::Value payload; payload["uid"] = this->getUid(); payload["depth"] = depth; pointer->callHook( "entity:Use.%UID%", payload ); @@ -256,9 +256,6 @@ void ext::PlayerBehavior::tick( uf::Object& self ) { float air = 1.0f; } speed; { float scale = 1; - #if UF_USE_OPENGL - scale = 10; - #endif speed.rotate = metadata.movement.rotate * uf::physics::time::delta; speed.move = metadata.movement.move * scale; @@ -286,13 +283,10 @@ void ext::PlayerBehavior::tick( uf::Object& self ) { pod::payloads::menuOpen payload; payload.name = "pause"; uf::hooks.call("menu:Open", payload); - } - else if ( !metadata.system.control ) { + } else if ( !metadata.system.control ) { stats.menu = "menu"; - } else if ( stats.menu == "" ) { - metadata.system.control = true; - } else { - metadata.system.control = false; + } else { + metadata.system.control = stats.menu == ""; } metadata.system.menu = stats.menu; @@ -461,7 +455,7 @@ void ext::PlayerBehavior::tick( uf::Object& self ) { TRACK_ORIENTATION(camera.getTransform().orientation); float magnitude = uf::quaternion::magnitude( combinedDeltaOrientation ); if ( magnitude > 0.0001f ) { - uf::Serializer payload; + ext::json::Value payload; payload["delta"] = uf::vector::encode( combinedDeltaOrientation ); payload["angle"]["pitch"] = combinedDeltaAngles.x; payload["angle"]["yaw"] = combinedDeltaAngles.y; @@ -517,7 +511,7 @@ void ext::PlayerBehavior::Metadata::deserialize( uf::Object& self, uf::Serialize auto& serializerCameraLimit = serializerCamera["limit"]; /*this->*/system.menu = serializerSystem["menu"].as(); - /*this->*/system.control = serializerSystem["control"].as(); + /*this->*/system.control = serializerSystem["control"].as(true); /*this->*/system.crouching = serializerSystem["crouching"].as(); /*this->*/system.noclipped = serializerSystem["noclipped"].as(); /*this->*/movement.friction = serializerSystemPhysics["friction"].as(); diff --git a/ext/behaviors/scene/behavior.cpp b/ext/behaviors/scene/behavior.cpp index 7ecc69f2..a2938332 100644 --- a/ext/behaviors/scene/behavior.cpp +++ b/ext/behaviors/scene/behavior.cpp @@ -81,7 +81,7 @@ void ext::ExtSceneBehavior::initialize( uf::Object& self ) { uf::Object* manager = (uf::Object*) this->globalFindByName("Gui Manager"); if ( !manager ) return; - uf::Serializer payload; + ext::json::Value payload; uf::stl::string config = metadataJson["menus"]["pause"].as("/entites/gui/pause/menu.json"); uf::Object& gui = manager->loadChild(config, false); payload["uid"] = gui.getUid(); diff --git a/ext/behaviors/soundemitter/behavior.cpp b/ext/behaviors/soundemitter/behavior.cpp index 29d2bba3..f4087e76 100644 --- a/ext/behaviors/soundemitter/behavior.cpp +++ b/ext/behaviors/soundemitter/behavior.cpp @@ -84,7 +84,7 @@ void ext::SoundEmitterBehavior::initialize( uf::Object& self ) { if ( !assetLoader.has(payload.filename) ) return; - uf::Serializer json = metadata["audio"]; + ext::json::Value json = metadata["audio"]; json["filename"] = payload.filename; this->callHook("sound:Emit.%UID%", json); }); diff --git a/ext/gui/behavior.cpp b/ext/gui/behavior.cpp index 32d6aa0a..01d699df 100644 --- a/ext/gui/behavior.cpp +++ b/ext/gui/behavior.cpp @@ -488,11 +488,10 @@ void ext::GuiBehavior::initialize( uf::Object& self ) { this->callHook("gui:Mouse.Clicked.%UID%", payload); } ); - this->addHook( "gui:Clicked.%UID%", [&](pod::payloads::windowMouseClick& payload){ - UF_MSG_DEBUG("CLICKED"); + this->addHook( "gui:Clicked.%UID%", [&](pod::payloads::windowMouseClick& payload){ if ( ext::json::isObject( metadataJson["events"]["click"] ) ) { - uf::Serializer event = metadataJson["events"]["click"]; + ext::json::Value event = metadataJson["events"]["click"]; metadataJson["events"]["click"] = ext::json::array(); metadataJson["events"]["click"][0] = event; } else if ( !ext::json::isArray( metadataJson["events"]["click"] ) ) { @@ -500,8 +499,8 @@ void ext::GuiBehavior::initialize( uf::Object& self ) { return; } for ( int i = 0; i < metadataJson["events"]["click"].size(); ++i ) { - uf::Serializer event = metadataJson["events"]["click"][i]; - uf::Serializer payload = event["payload"]; + ext::json::Value event = metadataJson["events"]["click"][i]; + ext::json::Value payload = event["payload"]; if ( event["delay"].is() ) { this->queueHook(event["name"].as(), payload, event["delay"].as()); } else { @@ -552,7 +551,7 @@ void ext::GuiBehavior::initialize( uf::Object& self ) { this->addHook( "gui:Hovered.%UID%", [&](ext::json::Value& json){ if ( ext::json::isObject( metadataJson["events"]["hover"] ) ) { - uf::Serializer event = metadataJson["events"]["hover"]; + ext::json::Value event = metadataJson["events"]["hover"]; metadataJson["events"]["hover"] = ext::json::array(); //Json::arrayValue; metadataJson["events"]["hover"][0] = event; } else if ( !ext::json::isArray( metadataJson["events"]["hover"] ) ) { @@ -560,8 +559,8 @@ void ext::GuiBehavior::initialize( uf::Object& self ) { return; } for ( int i = 0; i < metadataJson["events"]["hover"].size(); ++i ) { - uf::Serializer event = metadataJson["events"]["hover"][i]; - uf::Serializer payload = event["payload"]; + ext::json::Value event = metadataJson["events"]["hover"][i]; + ext::json::Value payload = event["payload"]; float delay = event["delay"].as(); if ( event["delay"].is() ) { this->queueHook(event["name"].as(), payload, event["delay"].as()); @@ -589,7 +588,7 @@ void ext::GuiBehavior::initialize( uf::Object& self ) { this->addHook( "object:Reload.%UID%", [&](ext::json::Value& json){ if ( json["old"]["text settings"]["string"] == json["new"]["text settings"]["string"] ) return; - this->queueHook( "gui:UpdateString.%UID%"); + this->queueHook( "gui:UpdateString.%UID%", ext::json::Value{}); }); this->addHook( "gui:UpdateString.%UID%", [&](ext::json::Value& json){ ext::json::forEach(::defaultSettings["metadata"]["text settings"], [&]( const uf::stl::string& key, ext::json::Value& value ){ @@ -708,7 +707,7 @@ void ext::GuiBehavior::initialize( uf::Object& self ) { graphic.getPipeline().update( graphic ); } }); - this->callHook("gui:UpdateString.%UID%"); + this->callHook("gui:UpdateString.%UID%", ext::json::Value{}); } #endif } diff --git a/ext/inits/persistence.inl b/ext/inits/persistence.inl index 238dcdf3..4e2d7d83 100644 --- a/ext/inits/persistence.inl +++ b/ext/inits/persistence.inl @@ -17,7 +17,7 @@ } /* Update window size */ { - uf::Serializer json; + ext::json::Value json; uf::stl::string hook = "window:Resized"; json["type"] = hook; json["invoker"] = "ext"; @@ -28,7 +28,7 @@ uf::hooks.call(hook, json); } /* Update window title */ { - uf::Serializer json; + ext::json::Value json; uf::stl::string hook = "window:Title.Changed"; json["type"] = hook; json["invoker"] = "ext"; diff --git a/ext/main.cpp b/ext/main.cpp index 9a876b7c..d1b9be57 100644 --- a/ext/main.cpp +++ b/ext/main.cpp @@ -524,7 +524,7 @@ void EXT_API ext::initialize() { } /* Initialize root scene*/ { - uf::Serializer payload; + ext::json::Value payload; payload["scene"] = ::config["engine"]["scenes"]["start"]; payload["immediate"] = true; uf::hooks.call("game:Scene.Load", payload);