Commit for 2022.01.01 23-17-04.7z
This commit is contained in:
parent
ae6bb02cdd
commit
eef9cac83b
2
Makefile
2
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
|
||||
|
||||
|
||||
@ -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": {
|
||||
|
||||
@ -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" }
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
"metadata": {
|
||||
"model": {
|
||||
"baking": {
|
||||
"enabled": true,
|
||||
"enabled": false,
|
||||
"resolution": 8192,
|
||||
"shadows": 1024,
|
||||
"trigger": { "mode": "rendered" },
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<typename T> 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<typename T> 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<typename T>
|
||||
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<typename T> size_t addHook( const uf::stl::string& name, T function );
|
||||
template<typename T> 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 = "" );
|
||||
};
|
||||
}
|
||||
|
||||
@ -20,19 +20,17 @@ template<typename T>
|
||||
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<uf::Serializer>();
|
||||
metadata["system"]["hooks"]["bound"][parsed].emplace_back(id);
|
||||
#else
|
||||
|
||||
auto& metadata = this->getComponent<uf::ObjectBehavior::Metadata>();
|
||||
metadata.hooks.bound[parsed].emplace_back(id);
|
||||
#endif
|
||||
|
||||
return id;
|
||||
}
|
||||
template<typename T>
|
||||
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<T>(p);
|
||||
|
||||
return uf::hooks.call( this->formatHookName( name ), payload );
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -101,17 +101,20 @@
|
||||
|
||||
#define UF_TIMER_MULTITRACE_END(X) UF_MSG_DEBUG(X);
|
||||
|
||||
#include <type_traits>
|
||||
#define TYPE_SANITIZE(T) std::remove_cv_t<std::remove_reference_t<T>>
|
||||
|
||||
#if UF_CTTI
|
||||
#include <ctti/type_id.hpp>
|
||||
#define TYPE_INDEX_T ctti::type_id_t
|
||||
#define TYPE_HASH_T ctti::detail::hash_t
|
||||
#define TYPE(T) ctti::type_id<T>()
|
||||
#define TYPE(T) ctti::type_id<TYPE_SANITIZE(T)>()
|
||||
#define TYPE_HASH(T) TYPE(T).hash()
|
||||
#define TYPE_NAME(T) ctti::nameof<T>()
|
||||
#define TYPE_NAME(T) ctti::nameof<T>().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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 );
|
||||
};
|
||||
};
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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<void()>& callback );
|
||||
|
||||
template<typename Arg>
|
||||
size_t addHook( const uf::Hooks::name_t& name, const std::function<void(Arg)>& callback );
|
||||
template<typename R, typename Arg>
|
||||
size_t addHook( const uf::Hooks::name_t& name, const std::function<R(Arg)>& callback );
|
||||
template<typename Function>
|
||||
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<typename T>
|
||||
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<uf::stl::string(const uf::stl::string&)> function_t;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
#include "function_traits.inl"
|
||||
#include "hook.inl"
|
||||
@ -1,6 +1,6 @@
|
||||
template<typename Arg>
|
||||
size_t uf::Hooks::addHook( const uf::Hooks::name_t& name, const std::function<void(Arg)>& callback ) {
|
||||
typedef typename std::remove_reference<Arg>::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<vo
|
||||
}
|
||||
template<typename R, typename Arg>
|
||||
size_t uf::Hooks::addHook( const uf::Hooks::name_t& name, const std::function<R(Arg)>& callback ) {
|
||||
typedef typename std::remove_reference<Arg>::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<typename T>
|
||||
uf::Hooks::return_t uf::Hooks::call( const uf::Hooks::name_t& name, const T& p ) {
|
||||
pod::Hook::userdata_t payload;
|
||||
payload.create<T>(p);
|
||||
|
||||
return call( name, payload );
|
||||
}
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
#include <uf/config.h>
|
||||
#include <uf/utils/string/string.h>
|
||||
|
||||
#include <uf/utils/math/vector.h>
|
||||
|
||||
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<analog_t> 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;
|
||||
};
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ namespace uf {
|
||||
static Input UF_API_CALL decode( Input begin, Input end, Encoding::Literal& output, Encoding::Literal fallback = 0 );
|
||||
template<typename Input>
|
||||
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;
|
||||
}
|
||||
|
||||
@ -1,49 +1 @@
|
||||
#pragma once
|
||||
#if 0
|
||||
#include <uf/config.h>
|
||||
#include <typeindex>
|
||||
#include <uf/utils/memory/unordered_map.h>
|
||||
|
||||
#define UF_TYPE_REGISTER 1
|
||||
|
||||
#include <uf/utils/memory/string.h>
|
||||
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<pod::TypeInfo> {
|
||||
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<index_t, pod::TypeInfo>* 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<typename T>
|
||||
const std::type_index getIndex();
|
||||
template<typename T>
|
||||
void registerType( const uf::stl::string& pretty = "" );
|
||||
template<typename T>
|
||||
const pod::TypeInfo& getType();
|
||||
}
|
||||
}
|
||||
|
||||
#include "type.inl"
|
||||
#endif
|
||||
@ -1,12 +0,0 @@
|
||||
template<typename T>
|
||||
const uf::typeInfo::index_t uf::typeInfo::getIndex() {
|
||||
return TYPE(T);
|
||||
}
|
||||
template<typename T>
|
||||
void uf::typeInfo::registerType( const uf::stl::string& pretty ) {
|
||||
return registerType(getIndex<T>(), sizeof(T), pretty);
|
||||
}
|
||||
template<typename T>
|
||||
const pod::TypeInfo& uf::typeInfo::getType() {
|
||||
return getType(getIndex<T>());
|
||||
}
|
||||
@ -89,7 +89,7 @@ pod::PointeredUserdata uf::pointeredUserdata::create( const T& data ) {
|
||||
}
|
||||
template<typename T>
|
||||
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<T>() ) return uf::pointeredUserdata::create<typename std::remove_reference<T>::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<typename T>
|
||||
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<T>(data);
|
||||
}
|
||||
// Easy way to get the userdata as a reference
|
||||
template<typename T>
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -7,6 +7,9 @@ pod::Userdata* uf::userdata::create( const T& data ) {
|
||||
}
|
||||
template<typename T>
|
||||
pod::Userdata* uf::userdata::create( uf::MemoryPool& requestedMemoryPool, const T& data ) {
|
||||
// CTTI information of a T& != T
|
||||
// if ( std::is_reference<T>() ) return uf::userdata::create<typename std::remove_reference<T>::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<typename T>
|
||||
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<T>(data);
|
||||
}
|
||||
// Easy way to get the userdata as a reference
|
||||
template<typename T>
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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<uf::Serializer>();
|
||||
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 ) {
|
||||
|
||||
@ -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<uf::Serializer>();
|
||||
metadata["system"]["hooks"]["queue"].emplace_back(queue);
|
||||
#else
|
||||
|
||||
auto& metadata = this->getComponent<uf::ObjectBehavior::Metadata>();
|
||||
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<uf::ObjectBehavior::Metadata>();
|
||||
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<uf::Serializer>();
|
||||
if ( !metadata["system"]["source"].is<uf::stl::string>() ) return false;
|
||||
uf::Serializer json;
|
||||
uf::Serializer payload;
|
||||
uf::stl::string filename = metadata["system"]["source"].as<uf::stl::string>();
|
||||
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;
|
||||
|
||||
@ -198,11 +198,11 @@ void ext::bullet::syncTo() {
|
||||
uf::Object* entity = (uf::Object*) body->getUserPointer();
|
||||
if ( !entity || !entity->isValid() || !entity->hasComponent<pod::PhysicsState>() ) continue;
|
||||
|
||||
auto& collider = entity->getComponent<pod::PhysicsState>();
|
||||
if ( !collider.shared ) continue;
|
||||
auto& state = entity->getComponent<pod::PhysicsState>();
|
||||
if ( !state.shared ) continue;
|
||||
|
||||
auto& physics = entity->getComponent<pod::Physics>();
|
||||
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<pod::PhysicsState>() ) continue;
|
||||
uf::Object* object = (uf::Object*) body->getUserPointer();
|
||||
if ( !object || !object->isValid() || !object->hasComponent<pod::PhysicsState>() ) continue;
|
||||
|
||||
auto& collider = entity->getComponent<pod::PhysicsState>();
|
||||
auto& state = object->getComponent<pod::PhysicsState>();;
|
||||
auto& transform = object->getComponent<pod::Transform<>>();
|
||||
auto& physics = object->getComponent<pod::Physics>();
|
||||
|
||||
auto& transform = entity->getComponent<pod::Transform<>>();
|
||||
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<pod::Physics>();
|
||||
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<pod::Transform<>>();
|
||||
|
||||
@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@ -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() );
|
||||
|
||||
@ -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<uf::stl::string> 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<uf::stl::string> split = uf::string::split( name, "/" );
|
||||
uf::stl::string shortname = split.back();
|
||||
split = uf::string::split( shortname, "." );
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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<uf::stl::string> 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
|
||||
@ -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; }
|
||||
float spec::uni::controller::analog( const uf::stl::string&, size_t ) { return 0; }
|
||||
*/
|
||||
@ -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<bool>();
|
||||
}
|
||||
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<float>();
|
||||
}
|
||||
#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
|
||||
@ -19,6 +19,9 @@ INIT_MALLOCSTATS -- Enable a call to malloc_stats() right before shutdown
|
||||
|
||||
#include <kos.h>
|
||||
|
||||
#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<uf::stl::string>() ) {
|
||||
/*if ( event.payload.is<uf::stl::string>() ) {
|
||||
ext::json::Value payload = uf::Serializer( event.payload.as<uf::stl::string>() );
|
||||
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<ext::json::Value>();
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -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<ext::json::Value>( 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<uf::stl::string>() ) {
|
||||
ext::json::Value payload = uf::Serializer( event.payload.as<uf::stl::string>() );
|
||||
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<ext::json::Value>();
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -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<uf::stl::string>() ) {
|
||||
ext::json::Value payload = uf::Serializer( event.payload.as<uf::stl::string>() );
|
||||
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<ext::json::Value>();
|
||||
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;
|
||||
|
||||
|
||||
@ -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<pod::Hook::userdata_t> 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<pod::Hook::userdata_t&>(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<ext::json::Value>();
|
||||
auto& value = payload.get<ext::json::Value>();
|
||||
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<ext::json::Value>( 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<ext::json::Value>( (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<void()>& callback ) {
|
||||
return addHook( name, [=]( const pod::Hook::userdata_t& userdata ){
|
||||
|
||||
@ -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;
|
||||
@ -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<uint8_t>::max() ) { size = sizeof(uint8_t); type = uf::renderer::typeToEnum<uint8_t>(); }
|
||||
else*/ if ( vertex.count <= std::numeric_limits<uint16_t>::max() ) { size = sizeof(uint16_t); type = uf::renderer::typeToEnum<uint16_t>(); }
|
||||
else if ( vertex.count <= std::numeric_limits<uint32_t>::max() ) { size = sizeof(uint32_t); type = uf::renderer::typeToEnum<uint32_t>(); }
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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
|
||||
|
||||
@ -111,7 +111,7 @@ void ext::PlayerBehavior::initialize( uf::Object& self ) {
|
||||
uf::Serializer charaData = masterDataGet("Chara", cardData["character_id"].as<uf::stl::string>());
|
||||
uf::stl::string leader = charaData["name"].as<uf::stl::string>();
|
||||
|
||||
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<pod::PhysicsState>();
|
||||
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<uf::stl::string>();
|
||||
/*this->*/system.control = serializerSystem["control"].as<bool>();
|
||||
/*this->*/system.control = serializerSystem["control"].as<bool>(true);
|
||||
/*this->*/system.crouching = serializerSystem["crouching"].as<bool>();
|
||||
/*this->*/system.noclipped = serializerSystem["noclipped"].as<bool>();
|
||||
/*this->*/movement.friction = serializerSystemPhysics["friction"].as<float>();
|
||||
|
||||
@ -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<uf::stl::string>("/entites/gui/pause/menu.json");
|
||||
uf::Object& gui = manager->loadChild(config, false);
|
||||
payload["uid"] = gui.getUid();
|
||||
|
||||
@ -84,7 +84,7 @@ void ext::SoundEmitterBehavior::initialize( uf::Object& self ) {
|
||||
|
||||
if ( !assetLoader.has<uf::Audio>(payload.filename) ) return;
|
||||
|
||||
uf::Serializer json = metadata["audio"];
|
||||
ext::json::Value json = metadata["audio"];
|
||||
json["filename"] = payload.filename;
|
||||
this->callHook("sound:Emit.%UID%", json);
|
||||
});
|
||||
|
||||
@ -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<float>() ) {
|
||||
this->queueHook(event["name"].as<uf::stl::string>(), payload, event["delay"].as<float>());
|
||||
} 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<float>();
|
||||
if ( event["delay"].is<double>() ) {
|
||||
this->queueHook(event["name"].as<uf::stl::string>(), payload, event["delay"].as<float>());
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user