diff --git a/src/mode.cpp b/src/mode.cpp index 0a070b0..3b044ec 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -38,6 +38,18 @@ void setMode(ModeId value) { config_set_dirty(); } +void modeMove(int index, int x, int y) { + if (mode != nullptr) { + mode->move(index, x, y); + } +} + +void modeFire(int index) { + if (mode != nullptr) { + mode->fire(index); + } +} + void setSpeed(double speed) { speed = min(max(0.01, speed), 10000.0); if (config.speed == speed) { diff --git a/src/mode.h b/src/mode.h index 89d8ed8..ef0aa31 100644 --- a/src/mode.h +++ b/src/mode.h @@ -9,4 +9,8 @@ void setMode(ModeId value); void setSpeed(double speed); +void modeMove(int index, int x, int y); + +void modeFire(int index); + #endif diff --git a/src/mode/Mode.h b/src/mode/Mode.h index f0b74d4..afa3049 100644 --- a/src/mode/Mode.h +++ b/src/mode/Mode.h @@ -94,6 +94,14 @@ public: virtual const char *getName() = 0; + virtual void move(int index, int x, int y) { + // + }; + + virtual void fire(int index) { + // + }; + void loop(microseconds_t microseconds) { handleRealtime(); handleTimers(microseconds); diff --git a/src/server.cpp b/src/server.cpp index c1c8f6b..5e06ba2 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -6,10 +6,50 @@ #include "display.h" #include "config.h" +static const char *const style = R"( + +)"; + +static const char *const script = R"( + +)"; + WebServer server(80); void web_index(); +void web_player(); + +void web_player_move(); + +void web_player_fire(); + void web_setMode(); void web_brighter(); @@ -26,6 +66,9 @@ void web_fps_off(); void server_setup() { server.on("/", web_index); + server.on("/player", web_player); + server.on("/player/move", web_player_move); + server.on("/player/fire", web_player_fire); server.on("/mode", web_setMode); server.on("/brighter", web_brighter); server.on("/darker", web_darker); @@ -43,24 +86,9 @@ void server_loop() { void web_index() { server.setContentLength(CONTENT_LENGTH_UNKNOWN); server.send(200, "text/html", ""); - server.sendContent(R"()"); - server.sendContent(R"()"); - server.sendContent(R"()"); - - server.sendContent(R"( - -)"); + server.sendContent(style); + server.sendContent(script); + server.sendContent(R"(

)"); server.sendContent(R"(NONE
)"); server.sendContent(R"(BORDER
)"); server.sendContent(R"(CLOCK
)"); @@ -74,13 +102,133 @@ function get(path){ server.sendContent(R"(COUNT_DOWN_BARS
)"); server.sendContent(R"(STARFIELD
)"); server.sendContent(R"(MATRIX
)"); + server.sendContent(R"(

)"); + server.sendContent(R"(

)"); + server.sendContent(R"(Player 0
)"); + server.sendContent(R"(Player 1
)"); + server.sendContent(R"(

)"); + + server.sendContent(R"(

)"); server.sendContent(R"(Helligkeit: + / -
)"); server.sendContent(R"(Geschwindigkeit: + / -
)"); server.sendContent(R"(FPS: EIN / AUS
)"); + server.sendContent(R"(

)"); server.client().flush(); } +void web_player() { + char buffer[128]; + + if (!server.hasArg("index")) { + server.send(400, "text/plain", "Missing 'index'"); + return; + } + double value = strtod(server.arg("index").c_str(), nullptr); + int index = (int) value; + + server.setContentLength(CONTENT_LENGTH_UNKNOWN); + server.send(200, "text/html", ""); + server.sendContent(style); + server.sendContent(script); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"()"); + + server.sendContent(R"(
 )"); + snprintf(buffer, sizeof buffer, R"(
)", index); + server.sendContent(buffer); + server.sendContent(R"(
 
)"); + snprintf(buffer, sizeof buffer, R"(
)", index); + server.sendContent(buffer); + server.sendContent(R"(
)"); + snprintf(buffer, sizeof buffer, R"(
)", index); + server.sendContent(buffer); + server.sendContent(R"(
)"); + snprintf(buffer, sizeof buffer, R"(
)", index); + server.sendContent(buffer); + server.sendContent(R"(
 )"); + snprintf(buffer, sizeof buffer, R"(
)", index); + server.sendContent(buffer); + server.sendContent(R"(
 
)"); + server.client().flush(); +} + +void web_player_move() { + double value; + + if (!server.hasArg("index")) { + server.send(400, "text/plain", "Missing 'index'"); + return; + } + value = strtod(server.arg("index").c_str(), nullptr); + int index = (int) value; + + if (!server.hasArg("x")) { + server.send(400, "text/plain", "Missing 'x'"); + return; + } + value = strtod(server.arg("x").c_str(), nullptr); + int x = (int) value; + + if (!server.hasArg("y")) { + server.send(400, "text/plain", "Missing 'y'"); + return; + } + value = strtod(server.arg("y").c_str(), nullptr); + int y = (int) value; + + modeMove(index, x, y); + + server.send(200, "application/json", "true"); +} + +void web_player_fire() { + double value; + + if (!server.hasArg("index")) { + server.send(400, "text/plain", "Missing 'index'"); + return; + } + value = strtod(server.arg("index").c_str(), nullptr); + int index = (int) value; + + modeFire(index); + + server.send(200, "application/json", "true"); +} + void web_setMode() { if (!server.hasArg("mode")) { server.send(400, "text/plain", "Missing 'mode'");