From 13b72276c8d9b4e343f1ffa3f4dbc55bc692f6e1 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Tue, 28 Oct 2014 17:17:25 +0200 Subject: [PATCH] games: Fix everything --- doc/todo.txt | 2 -- games/digger/main/main.cpp | 2 +- games/entitytest/main/main.cpp | 22 +++++++++++++++++----- games/entitytest/main/meta.json | 1 + games/geometry/main/main.cpp | 23 +++++++++++++++++------ games/geometry/main/meta.json | 1 + games/geometry2/main/main.cpp | 26 +++++++++++++++++++------- games/geometry2/main/meta.json | 1 + games/test/test1/test1.cpp | 3 ++- games/test/test2/test2.cpp | 3 ++- games/uitest/main/main.cpp | 3 ++- 11 files changed, 63 insertions(+), 24 deletions(-) diff --git a/doc/todo.txt b/doc/todo.txt index 64a4cf8..2503d44 100644 --- a/doc/todo.txt +++ b/doc/todo.txt @@ -65,5 +65,3 @@ Buildat TODO - Make some kind of an ace of spades clone (or less of a clone); something that requires the game to control the creation and deletion of the world anyway, and implement the required interfaces -- Fix everything in /games/ - - Use builtin/main_context diff --git a/games/digger/main/main.cpp b/games/digger/main/main.cpp index 9de15a1..7529c0e 100644 --- a/games/digger/main/main.cpp +++ b/games/digger/main/main.cpp @@ -433,7 +433,7 @@ struct Module: public interface::Module // TODO: Store main scene reference // Just do this for now main_context::access(m_server, [&](main_context::Interface *imc){ - m_main_scene = imc->create_scene(); + imc->delete_scene(m_main_scene); }); } diff --git a/games/entitytest/main/main.cpp b/games/entitytest/main/main.cpp index c790c58..adeaa15 100644 --- a/games/entitytest/main/main.cpp +++ b/games/entitytest/main/main.cpp @@ -2,6 +2,7 @@ #include "client_file/api.h" #include "network/api.h" #include "replicate/api.h" +#include "main_context/api.h" #include "interface/module.h" #include "interface/server.h" #include "interface/event.h" @@ -22,14 +23,18 @@ namespace entitytest { -using interface::Event; using namespace Urho3D; +using interface::Event; +using main_context::SceneReference; + struct Module: public interface::Module { interface::Server *m_server; uint m_slow_count = 0; + SceneReference m_main_scene; + Module(interface::Server *server): interface::Module(MODULE), m_server(server) @@ -66,8 +71,10 @@ struct Module: public interface::Module void on_start() { - m_server->access_scene([&](Scene *scene) - { + main_context::access(m_server, [&](main_context::Interface *imc){ + m_main_scene = imc->create_scene(); + + Scene *scene = imc->get_scene(m_main_scene); Context *context = scene->GetContext(); ResourceCache *cache = context->GetSubsystem(); auto *m = cache->GetResource("Materials/Stone.xml"); @@ -137,7 +144,8 @@ struct Module: public interface::Module log_d(MODULE, "entitytest::on_tick"); static uint a = 0; if(((a++) % 100) == 0){ - m_server->access_scene([&](Scene *scene){ + main_context::access(m_server, [&](main_context::Interface *imc){ + Scene *scene = imc->get_scene(m_main_scene); Node *n = scene->GetChild("Box"); n->SetPosition(Vector3(0.0f, 6.0f, 0.0f)); n->SetRotation(Quaternion(30, 60, 90)); @@ -159,7 +167,8 @@ struct Module: public interface::Module }); return; } - m_server->access_scene([&](Scene *scene){ + main_context::access(m_server, [&](main_context::Interface *imc){ + Scene *scene = imc->get_scene(m_main_scene); Node *n = scene->GetChild("Box"); //n->Translate(Vector3(0.1f, 0, 0)); Vector3 p = n->GetPosition(); @@ -183,6 +192,9 @@ struct Module: public interface::Module { log_v(MODULE, "on_files_transmitted(): recipient=%zu", event.recipient); + replicate::access(m_server, [&](replicate::Interface *ireplicate){ + ireplicate->assign_scene_to_peer(m_main_scene, event.recipient); + }); network::access(m_server, [&](network::Interface *inetwork){ inetwork->send(event.recipient, "core:run_script", "buildat.run_script_file(\"main/init.lua\")"); diff --git a/games/entitytest/main/meta.json b/games/entitytest/main/meta.json index 0264c9c..c8646bf 100644 --- a/games/entitytest/main/meta.json +++ b/games/entitytest/main/meta.json @@ -3,6 +3,7 @@ {"module": "network"}, {"module": "client_lua"}, {"module": "client_data"}, + {"module": "main_context"}, {"module": "replicate"} ] } diff --git a/games/geometry/main/main.cpp b/games/geometry/main/main.cpp index ff32040..50428bc 100644 --- a/games/geometry/main/main.cpp +++ b/games/geometry/main/main.cpp @@ -2,6 +2,7 @@ #include "client_file/api.h" #include "network/api.h" #include "replicate/api.h" +#include "main_context/api.h" #include "interface/module.h" #include "interface/server.h" #include "interface/event.h" @@ -23,14 +24,18 @@ namespace geometry { -using interface::Event; using namespace Urho3D; +using interface::Event; +using main_context::SceneReference; + struct Module: public interface::Module { interface::Server *m_server; uint m_slow_count = 0; + SceneReference m_main_scene; + Module(interface::Server *server): interface::Module(MODULE), m_server(server) @@ -58,8 +63,10 @@ struct Module: public interface::Module void on_start() { - m_server->access_scene([&](Scene *scene) - { + main_context::access(m_server, [&](main_context::Interface *imc){ + m_main_scene = imc->create_scene(); + + Scene *scene = imc->get_scene(m_main_scene); Context *context = scene->GetContext(); ResourceCache *cache = context->GetSubsystem(); @@ -116,8 +123,8 @@ struct Module: public interface::Module void update_scene() { - m_server->access_scene([&](Scene *scene) - { + main_context::access(m_server, [&](main_context::Interface *imc){ + Scene *scene = imc->get_scene(m_main_scene); Context *context = scene->GetContext(); ResourceCache *cache = context->GetSubsystem(); @@ -170,7 +177,8 @@ struct Module: public interface::Module float rx = (float)rand() / RAND_MAX * 180; float ry = (float)rand() / RAND_MAX * 180; float rz = (float)rand() / RAND_MAX * 180; - m_server->access_scene([&](Scene *scene){ + main_context::access(m_server, [&](main_context::Interface *imc){ + Scene *scene = imc->get_scene(m_main_scene); Node *n = scene->GetChild("Testbox"); n->SetRotation(Quaternion(rx, ry, rz)); n->SetPosition(Vector3(-0.5f, 8.0f, 0.0f)); @@ -181,6 +189,9 @@ struct Module: public interface::Module void on_files_transmitted(const client_file::FilesTransmitted &event) { + replicate::access(m_server, [&](replicate::Interface *ireplicate){ + ireplicate->assign_scene_to_peer(m_main_scene, event.recipient); + }); network::access(m_server, [&](network::Interface *inetwork){ inetwork->send(event.recipient, "core:run_script", "buildat.run_script_file(\"main/init.lua\")"); diff --git a/games/geometry/main/meta.json b/games/geometry/main/meta.json index 0264c9c..c8646bf 100644 --- a/games/geometry/main/meta.json +++ b/games/geometry/main/meta.json @@ -3,6 +3,7 @@ {"module": "network"}, {"module": "client_lua"}, {"module": "client_data"}, + {"module": "main_context"}, {"module": "replicate"} ] } diff --git a/games/geometry2/main/main.cpp b/games/geometry2/main/main.cpp index 4f57d60..ff44c81 100644 --- a/games/geometry2/main/main.cpp +++ b/games/geometry2/main/main.cpp @@ -2,6 +2,7 @@ #include "client_file/api.h" #include "network/api.h" #include "replicate/api.h" +#include "main_context/api.h" #include "interface/module.h" #include "interface/server.h" #include "interface/event.h" @@ -24,9 +25,10 @@ namespace geometry { -using interface::Event; -using namespace Urho3D; namespace magic = Urho3D; +using namespace Urho3D; +using interface::Event; +using main_context::SceneReference; struct Module: public interface::Module { @@ -35,6 +37,8 @@ struct Module: public interface::Module sp_ m_atlas_reg; sp_ m_voxel_reg; + SceneReference m_main_scene; + Module(interface::Server *server): interface::Module(MODULE), m_server(server) @@ -52,8 +56,10 @@ struct Module: public interface::Module m_server->sub_event(this, Event::t("core:tick")); m_server->sub_event(this, Event::t("client_file:files_transmitted")); - m_server->access_scene([&](Scene *scene) - { + main_context::access(m_server, [&](main_context::Interface *imc){ + m_main_scene = imc->create_scene(); + + Scene *scene = imc->get_scene(m_main_scene); Context *context = scene->GetContext(); m_atlas_reg.reset(interface::createAtlasRegistry(context)); { @@ -126,8 +132,9 @@ struct Module: public interface::Module void on_start() { - m_server->access_scene([&](Scene *scene) + main_context::access(m_server, [&](main_context::Interface *imc) { + Scene *scene = imc->get_scene(m_main_scene); Context *context = scene->GetContext(); ResourceCache *cache = context->GetSubsystem(); @@ -192,8 +199,9 @@ struct Module: public interface::Module void update_scene() { - m_server->access_scene([&](Scene *scene) + main_context::access(m_server, [&](main_context::Interface *imc) { + Scene *scene = imc->get_scene(m_main_scene); Context *context = scene->GetContext(); ResourceCache *cache = context->GetSubsystem(); @@ -251,7 +259,8 @@ struct Module: public interface::Module { static uint a = 0; if(((a++) % 100) == 0){ - m_server->access_scene([&](Scene *scene){ + main_context::access(m_server, [&](main_context::Interface *imc){ + Scene *scene = imc->get_scene(m_main_scene); Node *n = scene->GetChild("Testbox"); //n->SetPosition(Vector3(0.0f, 8.0f, 0.0f)); n->SetRotation(Quaternion(30, 60, 90)); @@ -265,6 +274,9 @@ struct Module: public interface::Module void on_files_transmitted(const client_file::FilesTransmitted &event) { + replicate::access(m_server, [&](replicate::Interface *ireplicate){ + ireplicate->assign_scene_to_peer(m_main_scene, event.recipient); + }); network::access(m_server, [&](network::Interface *inetwork){ inetwork->send(event.recipient, "core:run_script", "buildat.run_script_file(\"main/init.lua\")"); diff --git a/games/geometry2/main/meta.json b/games/geometry2/main/meta.json index 0264c9c..c8646bf 100644 --- a/games/geometry2/main/meta.json +++ b/games/geometry2/main/meta.json @@ -3,6 +3,7 @@ {"module": "network"}, {"module": "client_lua"}, {"module": "client_data"}, + {"module": "main_context"}, {"module": "replicate"} ] } diff --git a/games/test/test1/test1.cpp b/games/test/test1/test1.cpp index 405aa5e..4d5dbc5 100644 --- a/games/test/test1/test1.cpp +++ b/games/test/test1/test1.cpp @@ -7,6 +7,7 @@ #include "core/log.h" #include #include +#define MODULE "test1" using interface::Event; @@ -19,7 +20,7 @@ struct Module: public interface::Module Event::Type m_EventType_test1_thing; // You can cache these for more speed Module(interface::Server *server): - interface::Module("test1"), + interface::Module(MODULE), m_server(server), m_EventType_test1_thing(Event::t("test1:thing")) { diff --git a/games/test/test2/test2.cpp b/games/test/test2/test2.cpp index 5362348..86e285e 100644 --- a/games/test/test2/test2.cpp +++ b/games/test/test2/test2.cpp @@ -3,6 +3,7 @@ #include "interface/event.h" #include "test1/api.h" #include "core/log.h" +#define MODULE "test2" using interface::Event; @@ -14,7 +15,7 @@ struct Module: public interface::Module Event::Type m_EventType_core_start; Module(interface::Server *server): - interface::Module("test2"), + interface::Module(MODULE), m_server(server), m_EventType_core_start(Event::t("core:start")) { diff --git a/games/uitest/main/main.cpp b/games/uitest/main/main.cpp index 83f23a0..3f04fef 100644 --- a/games/uitest/main/main.cpp +++ b/games/uitest/main/main.cpp @@ -4,6 +4,7 @@ #include "interface/event.h" #include "network/api.h" #include "client_file/api.h" +#define MODULE "main" using interface::Event; @@ -14,7 +15,7 @@ struct Module: public interface::Module interface::Server *m_server; Module(interface::Server *server): - interface::Module("main"), + interface::Module(MODULE), m_server(server) { log_v(MODULE, "main construct");