Micropolis
js_callback.h
1// src/js_callback.h
2#ifndef JS_CALLBACK_H
3#define JS_CALLBACK_H
4
5#include <emscripten/val.h>
6#include "callback.h"
7
8class JSCallback : public Callback {
9public:
10 explicit JSCallback(emscripten::val jsCallback)
11 : Callback(), jsCallback(jsCallback) {}
12
13 // Implement all pure virtual functions from Callback
14 void autoGoto(Micropolis *micropolis, emscripten::val callbackVal, int x, int y, std::string message) override {
15 jsCallback.call<void>("autoGoto", emscripten::val(micropolis), callbackVal, x, y, message);
16 }
17
18 void didGenerateMap(Micropolis *micropolis, emscripten::val callbackVal, int seed) override {
19 jsCallback.call<void>("didGenerateMap", emscripten::val(micropolis), callbackVal, seed);
20 }
21
22 void didLoadCity(Micropolis *micropolis, emscripten::val callbackVal, std::string filename) override {
23 jsCallback.call<void>("didLoadCity", emscripten::val(micropolis), callbackVal, filename);
24 }
25
26 void didLoadScenario(Micropolis *micropolis, emscripten::val callbackVals, std::string name, std::string fname) override {
27 jsCallback.call<void>("didLoadScenario", emscripten::val(micropolis), callbackVals, name, fname);
28 }
29
30 void didLoseGame(Micropolis *micropolis, emscripten::val callbackVal) override {
31 jsCallback.call<void>("didLoseGame", emscripten::val(micropolis), callbackVal);
32 }
33
34 void didSaveCity(Micropolis *micropolis, emscripten::val callbackVal, std::string filename) override {
35 jsCallback.call<void>("didSaveCity", emscripten::val(micropolis), callbackVal, filename);
36 }
37
38 void didTool(Micropolis *micropolis, emscripten::val callbackVal, std::string name, int x, int y) override {
39 jsCallback.call<void>("didTool", emscripten::val(micropolis), callbackVal, name, x, y);
40 }
41
42 void didWinGame(Micropolis *micropolis, emscripten::val callbackVal) override {
43 jsCallback.call<void>("didWinGame", emscripten::val(micropolis), callbackVal);
44 }
45
46 void didntLoadCity(Micropolis *micropolis, emscripten::val callbackVal, std::string filename) override {
47 jsCallback.call<void>("didntLoadCity", emscripten::val(micropolis), callbackVal, filename);
48 }
49
50 void didntSaveCity(Micropolis *micropolis, emscripten::val callbackVal, std::string filename) override {
51 jsCallback.call<void>("didntSaveCity", emscripten::val(micropolis), callbackVal, filename);
52 }
53
54 void makeSound(Micropolis *micropolis, emscripten::val callbackVal, std::string channel, std::string sound, int x, int y) override {
55 jsCallback.call<void>("makeSound", emscripten::val(micropolis), callbackVal, channel, sound, x, y);
56 }
57
58 void newGame(Micropolis *micropolis, emscripten::val callbackVal) override {
59 jsCallback.call<void>("newGame", emscripten::val(micropolis), callbackVal);
60 }
61
62 void saveCityAs(Micropolis *micropolis, emscripten::val callbackVal, std::string filename) override {
63 jsCallback.call<void>("saveCityAs", emscripten::val(micropolis), callbackVal, filename);
64 }
65
66 void sendMessage(Micropolis *micropolis, emscripten::val callbackVal, int messageIndex, int x, int y, bool picture, bool important) override {
67 jsCallback.call<void>("sendMessage", emscripten::val(micropolis), callbackVal, messageIndex, x, y, picture, important);
68 }
69
70 void showBudgetAndWait(Micropolis *micropolis, emscripten::val callbackVal) override {
71 jsCallback.call<void>("showBudgetAndWait", emscripten::val(micropolis), callbackVal);
72 }
73
74 void showZoneStatus(Micropolis *micropolis, emscripten::val callbackVal, int tileCategoryIndex, int populationDensityIndex, int landValueIndex, int crimeRateIndex, int pollutionIndex, int growthRateIndex, int x, int y) override {
75 jsCallback.call<void>("showZoneStatus", emscripten::val(micropolis), callbackVal, tileCategoryIndex, populationDensityIndex, landValueIndex, crimeRateIndex, pollutionIndex, growthRateIndex, x, y);
76 }
77
78 void simulateRobots(Micropolis *micropolis, emscripten::val callbackVal) override {
79 jsCallback.call<void>("simulateRobots", emscripten::val(micropolis), callbackVal);
80 }
81
82 void simulateChurch(Micropolis *micropolis, emscripten::val callbackVal, int posX, int posY, int churchNumber) override {
83 jsCallback.call<void>("simulateChurch", emscripten::val(micropolis), callbackVal, posX, posY, churchNumber);
84 }
85
86 void startEarthquake(Micropolis *micropolis, emscripten::val callbackVal, int strength) override {
87 jsCallback.call<void>("startEarthquake", emscripten::val(micropolis), callbackVal, strength);
88 }
89
90 void startGame(Micropolis *micropolis, emscripten::val callbackVal) override {
91 jsCallback.call<void>("startGame", emscripten::val(micropolis), callbackVal);
92 }
93
94 void startScenario(Micropolis *micropolis, emscripten::val callbackVal, int scenario) override {
95 jsCallback.call<void>("startScenario", emscripten::val(micropolis), callbackVal, scenario);
96 }
97
98 void updateBudget(Micropolis *micropolis, emscripten::val callbackVal) override {
99 jsCallback.call<void>("updateBudget", emscripten::val(micropolis), callbackVal);
100 }
101
102 void updateCityName(Micropolis *micropolis, emscripten::val callbackVal, std::string cityName) override {
103 jsCallback.call<void>("updateCityName", emscripten::val(micropolis), callbackVal, cityName);
104 }
105
106 void updateDate(Micropolis *micropolis, emscripten::val callbackVal, int cityYear, int cityMonth) override {
107 jsCallback.call<void>("updateDate", emscripten::val(micropolis), callbackVal, cityYear, cityMonth);
108 }
109
110 void updateDemand(Micropolis *micropolis, emscripten::val callbackVal, float r, float c, float i) override {
111 jsCallback.call<void>("updateDemand", emscripten::val(micropolis), callbackVal, r, c, i);
112 }
113
114 void updateEvaluation(Micropolis *micropolis, emscripten::val callbackVal) override {
115 jsCallback.call<void>("updateEvaluation", emscripten::val(micropolis), callbackVal);
116 }
117
118 void updateFunds(Micropolis *micropolis, emscripten::val callbackVal, int totalFunds) override {
119 jsCallback.call<void>("updateFunds", emscripten::val(micropolis), callbackVal, totalFunds);
120 }
121
122 void updateGameLevel(Micropolis *micropolis, emscripten::val callbackVal, int gameLevel) override {
123 jsCallback.call<void>("updateGameLevel", emscripten::val(micropolis), callbackVal, gameLevel);
124 }
125
126 void updateHistory(Micropolis *micropolis, emscripten::val callbackVal) override {
127 jsCallback.call<void>("updateHistory", emscripten::val(micropolis), callbackVal);
128 }
129
130 void updateMap(Micropolis *micropolis, emscripten::val callbackVal) override {
131 jsCallback.call<void>("updateMap", emscripten::val(micropolis), callbackVal);
132 }
133
134 void updateOptions(Micropolis *micropolis, emscripten::val callbackVal) override {
135 jsCallback.call<void>("updateOptions", emscripten::val(micropolis), callbackVal);
136 }
137
138 void updatePasses(Micropolis *micropolis, emscripten::val callbackVal, int passes) override {
139 jsCallback.call<void>("updatePasses", emscripten::val(micropolis), callbackVal, passes);
140 }
141
142 void updatePaused(Micropolis *micropolis, emscripten::val callbackVal, bool simPaused) override {
143 jsCallback.call<void>("updatePaused", emscripten::val(micropolis), callbackVal, simPaused);
144 }
145
146 void updateSpeed(Micropolis *micropolis, emscripten::val callbackVal, int speed) override {
147 jsCallback.call<void>("updateSpeed", emscripten::val(micropolis), callbackVal, speed);
148 }
149
150 void updateTaxRate(Micropolis *micropolis, emscripten::val callbackVal, int cityTax) override {
151 jsCallback.call<void>("updateTaxRate", emscripten::val(micropolis), callbackVal, cityTax);
152 }
153
154private:
155 emscripten::val jsCallback;
156};
157
158#endif // JS_CALLBACK_H
Interface for callbacks in the Micropolis game engine.