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();
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
184
src/server.cpp
184
src/server.cpp
@ -6,10 +6,50 @@
|
||||
#include "display.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);
|
||||
|
||||
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"(<meta http-equiv="Cache-Control" content="store, no-cache, must-revalidate, post-check=0, pre-check=0" />)");
|
||||
server.sendContent(R"(<meta http-equiv="Pragma" content="no-cache" />)");
|
||||
server.sendContent(R"(<meta http-equiv="Expires" content="Sun, 1 Jan 1999 00:00:00 GMT" />)");
|
||||
|
||||
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(style);
|
||||
server.sendContent(script);
|
||||
server.sendContent(R"(<p>)");
|
||||
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=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=11');">STARFIELD</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"(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"(</p>)");
|
||||
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() {
|
||||
if (!server.hasArg("mode")) {
|
||||
server.send(400, "text/plain", "Missing 'mode'");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user