tests: $(TEST_BIN)
run: $(ASSET_DEP) blank
- ./blank
+ ./blank --save-path saves/
gdb: $(ASSET_DEP) blank.debug
gdb ./blank.debug
cachegrind: $(ASSET_DEP) blank.profile
- valgrind ./blank.profile
+ valgrind ./blank.profile --save-path saves/
callgrind: $(ASSET_DEP) blank.profile
valgrind --tool=callgrind \
--branch-sim=yes --cacheuse=yes --cache-sim=yes \
--collect-bus=yes --collect-systime=yes --collect-jumps=yes \
--dump-instr=yes --simulate-hwpref=yes --simulate-wb=yes \
- ./blank.profile -n 128 -t 16 --no-keyboard --no-mouse -d --no-vsync
+ ./blank.profile -n 128 -t 16 --no-keyboard --no-mouse -d --no-vsync --save-path saves/
test: blank.test
./blank.test
if both n and t are given, terminate after n frames and
assume <t> milliseconds pass each frame
+--asset-path <path>
+ load assets from given path
+ default is application dir + "assets"
+
+--save-path <path>
+ store and load saves at given path
+ default is whatever SDL thinks is good
+ (should be ~/.local/share/localhorst/blank/)
+
Application
-----------
World
-----
-blank -s <seed>
- use <seed> (unsigned integer) as the world seed. default is 0
+-s <seed>
+ use <seed> (unsigned integer) as the world seed
+ default is 0
Controls
namespace {
-string get_asset_path() {
+string default_asset_path() {
char *base = SDL_GetBasePath();
string assets(base);
assets += "assets/";
return assets;
}
+string default_save_path() {
+#ifndef NDEBUG
+ char *base = SDL_GetBasePath();
+ string save(base);
+ save += "saves/";
+ SDL_free(base);
+ return save;
+#else
+ char *pref = SDL_GetPrefPath("localhorst", "blank");
+ string save(pref);
+ SDL_free(pref);
+ return save;
+#endif
+}
+
}
namespace blank {
-Environment::Environment(Window &win)
+Environment::Environment(Window &win, const string &asset_path)
: audio()
, viewport()
, window(win)
-, assets(get_asset_path())
+, assets(asset_path)
, counter() {
}
// stopper
options = false;
} else {
+ const char *param = arg + 2;
// long option
- if (strcmp(arg + 2, "no-vsync") == 0) {
+ if (strcmp(param, "no-vsync") == 0) {
config.vsync = false;
- } else if (strcmp(arg + 2, "no-keyboard") == 0) {
+ } else if (strcmp(param, "no-keyboard") == 0) {
config.interface.keyboard_disabled = true;
- } else if (strcmp(arg + 2, "no-mouse") == 0) {
+ } else if (strcmp(param, "no-mouse") == 0) {
config.interface.mouse_disabled = true;
- } else if (strcmp(arg + 2, "no-hud") == 0) {
+ } else if (strcmp(param, "no-hud") == 0) {
config.interface.visual_disabled = true;
- } else if (strcmp(arg + 2, "no-audio") == 0) {
+ } else if (strcmp(param, "no-audio") == 0) {
config.interface.audio_disabled = true;
+ } else if (strcmp(param, "asset-path") == 0) {
+ ++i;
+ if (i >= argc || argv[i] == nullptr || argv[i][0] == '\0') {
+ cerr << "missing argument to --asset-path" << endl;
+ error = true;
+ } else {
+ config.asset_path = argv[i];
+ }
+ } else if (strcmp(param, "save-path") == 0) {
+ ++i;
+ if (i >= argc || argv[i] == nullptr || argv[i][0] == '\0') {
+ cerr << "missing argument to --save-path" << endl;
+ error = true;
+ } else {
+ config.save_path = argv[i];
+ }
} else {
cerr << "unknown option " << arg << endl;
error = true;
return;
}
+ if (config.asset_path.empty()) {
+ config.asset_path = default_asset_path();
+ } else if (
+ config.asset_path[config.asset_path.size() - 1] != '/' &&
+ config.asset_path[config.asset_path.size() - 1] != '\\'
+ ) {
+ config.asset_path += '/';
+ }
+ if (config.save_path.empty()) {
+ config.save_path = default_save_path();
+ } else if (
+ config.save_path[config.save_path.size() - 1] != '/' &&
+ config.save_path[config.save_path.size() - 1] != '\\'
+ ) {
+ config.save_path += '/';
+ }
+
if (n > 0) {
if (t > 0) {
mode = FIXED_FRAME_LIMIT;
Init init(config.doublebuf, config.multisampling);
- Environment env(init.window);
+ Environment env(init.window, config.asset_path);
env.viewport.VSync(config.vsync);
Application app(env);