Mode, Server: fire, move
This commit is contained in:
parent
7539dbb7b0
commit
9ea1eddd57
12
src/mode.cpp
12
src/mode.cpp
@ -38,6 +38,18 @@ void setMode(ModeId value) {
|
|||||||
config_set_dirty();
|
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) {
|
void setSpeed(double speed) {
|
||||||
speed = min(max(0.01, speed), 10000.0);
|
speed = min(max(0.01, speed), 10000.0);
|
||||||
if (config.speed == speed) {
|
if (config.speed == speed) {
|
||||||
|
|||||||
@ -9,4 +9,8 @@ void setMode(ModeId value);
|
|||||||
|
|
||||||
void setSpeed(double speed);
|
void setSpeed(double speed);
|
||||||
|
|
||||||
|
void modeMove(int index, int x, int y);
|
||||||
|
|
||||||
|
void modeFire(int index);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -94,6 +94,14 @@ public:
|
|||||||
|
|
||||||
virtual const char *getName() = 0;
|
virtual const char *getName() = 0;
|
||||||
|
|
||||||
|
virtual void move(int index, int x, int y) {
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void fire(int index) {
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
void loop(microseconds_t microseconds) {
|
void loop(microseconds_t microseconds) {
|
||||||
handleRealtime();
|
handleRealtime();
|
||||||
handleTimers(microseconds);
|
handleTimers(microseconds);
|
||||||
|
|||||||
184
src/server.cpp
184
src/server.cpp
@ -6,10 +6,50 @@
|
|||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
static const char *const style = R"(
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: 9vw;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
button{
|
||||||
|
width: 33vmin;
|
||||||
|
height: 33vmin;
|
||||||
|
font-size: 9vw;
|
||||||
|
}
|
||||||
|
table{
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
@media(min-width: 1000px) {
|
||||||
|
body {
|
||||||
|
font-size: 20px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
)";
|
||||||
|
|
||||||
|
static const char *const script = R"(
|
||||||
|
<script>
|
||||||
|
function get(path){
|
||||||
|
var r = new XMLHttpRequest();
|
||||||
|
r.open("GET", path, true);
|
||||||
|
r.send();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
)";
|
||||||
|
|
||||||
WebServer server(80);
|
WebServer server(80);
|
||||||
|
|
||||||
void web_index();
|
void web_index();
|
||||||
|
|
||||||
|
void web_player();
|
||||||
|
|
||||||
|
void web_player_move();
|
||||||
|
|
||||||
|
void web_player_fire();
|
||||||
|
|
||||||
void web_setMode();
|
void web_setMode();
|
||||||
|
|
||||||
void web_brighter();
|
void web_brighter();
|
||||||
@ -26,6 +66,9 @@ void web_fps_off();
|
|||||||
|
|
||||||
void server_setup() {
|
void server_setup() {
|
||||||
server.on("/", web_index);
|
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("/mode", web_setMode);
|
||||||
server.on("/brighter", web_brighter);
|
server.on("/brighter", web_brighter);
|
||||||
server.on("/darker", web_darker);
|
server.on("/darker", web_darker);
|
||||||
@ -43,24 +86,9 @@ void server_loop() {
|
|||||||
void web_index() {
|
void web_index() {
|
||||||
server.setContentLength(CONTENT_LENGTH_UNKNOWN);
|
server.setContentLength(CONTENT_LENGTH_UNKNOWN);
|
||||||
server.send(200, "text/html", "");
|
server.send(200, "text/html", "");
|
||||||
server.sendContent(R"(<meta http-equiv="Cache-Control" content="store, no-cache, must-revalidate, post-check=0, pre-check=0" />)");
|
server.sendContent(style);
|
||||||
server.sendContent(R"(<meta http-equiv="Pragma" content="no-cache" />)");
|
server.sendContent(script);
|
||||||
server.sendContent(R"(<meta http-equiv="Expires" content="Sun, 1 Jan 1999 00:00:00 GMT" />)");
|
server.sendContent(R"(<p>)");
|
||||||
|
|
||||||
server.sendContent(R"(
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
font-family: sans-serif;
|
|
||||||
font-size: 9vw;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<script>
|
|
||||||
function get(path){
|
|
||||||
var r = new XMLHttpRequest();
|
|
||||||
r.open("GET", path, true);
|
|
||||||
r.send();
|
|
||||||
}
|
|
||||||
</script>)");
|
|
||||||
server.sendContent(R"(<a onclick="get('/mode?mode=0');">NONE</a><br>)");
|
server.sendContent(R"(<a onclick="get('/mode?mode=0');">NONE</a><br>)");
|
||||||
server.sendContent(R"(<a onclick="get('/mode?mode=1');">BORDER</a><br>)");
|
server.sendContent(R"(<a onclick="get('/mode?mode=1');">BORDER</a><br>)");
|
||||||
server.sendContent(R"(<a onclick="get('/mode?mode=2');">CLOCK</a><br>)");
|
server.sendContent(R"(<a onclick="get('/mode?mode=2');">CLOCK</a><br>)");
|
||||||
@ -74,13 +102,133 @@ function get(path){
|
|||||||
server.sendContent(R"(<a onclick="get('/mode?mode=10');">COUNT_DOWN_BARS</a><br>)");
|
server.sendContent(R"(<a onclick="get('/mode?mode=10');">COUNT_DOWN_BARS</a><br>)");
|
||||||
server.sendContent(R"(<a onclick="get('/mode?mode=11');">STARFIELD</a><br>)");
|
server.sendContent(R"(<a onclick="get('/mode?mode=11');">STARFIELD</a><br>)");
|
||||||
server.sendContent(R"(<a onclick="get('/mode?mode=12');">MATRIX</a><br>)");
|
server.sendContent(R"(<a onclick="get('/mode?mode=12');">MATRIX</a><br>)");
|
||||||
|
server.sendContent(R"(</p>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<p>)");
|
||||||
|
server.sendContent(R"(<a href="/player?index=0">Player 0</a><br>)");
|
||||||
|
server.sendContent(R"(<a href="/player?index=1">Player 1</a><br>)");
|
||||||
|
server.sendContent(R"(</p>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<p>)");
|
||||||
server.sendContent(R"(Helligkeit: <a onclick="get('/brighter');">+</a> / <a onclick="get('/darker');">-</a><br>)");
|
server.sendContent(R"(Helligkeit: <a onclick="get('/brighter');">+</a> / <a onclick="get('/darker');">-</a><br>)");
|
||||||
server.sendContent(R"(Geschwindigkeit: <a onclick="get('/faster');">+</a> / <a onclick="get('/slower');">-</a><br>)");
|
server.sendContent(R"(Geschwindigkeit: <a onclick="get('/faster');">+</a> / <a onclick="get('/slower');">-</a><br>)");
|
||||||
server.sendContent(R"(FPS: <a onclick="get('/fps/on');">EIN</a> / <a onclick="get('/fps/off');">AUS</a><br>)");
|
server.sendContent(R"(FPS: <a onclick="get('/fps/on');">EIN</a> / <a onclick="get('/fps/off');">AUS</a><br>)");
|
||||||
|
server.sendContent(R"(</p>)");
|
||||||
server.client().flush();
|
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"(<meta name="viewport" content= "width=device-width, user-scalable=no">)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<table>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<tr>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td> </td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td>)");
|
||||||
|
snprintf(buffer, sizeof buffer, R"(<button onclick="get('/player/move?index=%d&x=0&y=-1');">↑</button><br>)", index);
|
||||||
|
server.sendContent(buffer);
|
||||||
|
server.sendContent(R"(</td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td> </td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(</tr>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<tr>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td>)");
|
||||||
|
snprintf(buffer, sizeof buffer, R"(<button onclick="get('/player/move?index=%d&x=-1&y=0');">←</button><br>)", index);
|
||||||
|
server.sendContent(buffer);
|
||||||
|
server.sendContent(R"(</td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td>)");
|
||||||
|
snprintf(buffer, sizeof buffer, R"(<button onclick="get('/player/fire?index=%d');">X</button><br>)", index);
|
||||||
|
server.sendContent(buffer);
|
||||||
|
server.sendContent(R"(</td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td>)");
|
||||||
|
snprintf(buffer, sizeof buffer, R"(<button onclick="get('/player/move?index=%d&x=+1&y=0');">→</button><br>)", index);
|
||||||
|
server.sendContent(buffer);
|
||||||
|
server.sendContent(R"(</td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(</tr>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<tr>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td> </td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td>)");
|
||||||
|
snprintf(buffer, sizeof buffer, R"(<button onclick="get('/player/move?index=%d&x=0&y=+1');">↓</button><br>)", index);
|
||||||
|
server.sendContent(buffer);
|
||||||
|
server.sendContent(R"(</td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(<td> </td>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(</tr>)");
|
||||||
|
|
||||||
|
server.sendContent(R"(</table>)");
|
||||||
|
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() {
|
void web_setMode() {
|
||||||
if (!server.hasArg("mode")) {
|
if (!server.hasArg("mode")) {
|
||||||
server.send(400, "text/plain", "Missing 'mode'");
|
server.send(400, "text/plain", "Missing 'mode'");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user