From 857f9698b785d961ed6158b921eb529aa0bdee84 Mon Sep 17 00:00:00 2001 From: kdx Date: Wed, 7 Feb 2024 15:26:14 +0100 Subject: gravity trigger --- inc/entity.h | 2 +- map/propertytypes.json | 165 ++++++++++++++++++++++++++++++++++++++++++++++++- src/gravity.c | 24 +++++++ src/main.c | 11 +++- 4 files changed, 198 insertions(+), 4 deletions(-) create mode 100644 src/gravity.c diff --git a/inc/entity.h b/inc/entity.h index 317db4c..6614fef 100644 --- a/inc/entity.h +++ b/inc/entity.h @@ -22,7 +22,7 @@ typedef struct Entity { vec2 dim; // player - bool reverseGravity; + i8 reverseGravity; i32 jump_buffer; i32 grace; bool djump; diff --git a/map/propertytypes.json b/map/propertytypes.json index a0f87b3..4e131d4 100644 --- a/map/propertytypes.json +++ b/map/propertytypes.json @@ -1,4 +1,24 @@ [ + { + "color": "#fff9a6ff", + "drawFill": true, + "id": 27, + "members": [ + ], + "name": "debug", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile", + "tileset", + "wangcolor", + "wangset", + "project" + ] + }, { "color": "#ffffc000", "drawFill": true, @@ -29,6 +49,18 @@ "project" ] }, + { + "id": 38, + "name": "Direction", + "storageType": "int", + "type": "enum", + "values": [ + "Invert", + "Up", + "Down" + ], + "valuesAsFlags": false + }, { "color": "#ff0000ff", "drawFill": true, @@ -69,7 +101,8 @@ "Init", "Jump", "Double Jump", - "Death" + "Death", + "Last Key" ], "valuesAsFlags": false }, @@ -123,6 +156,36 @@ "project" ] }, + { + "color": "#ff87ffc3", + "drawFill": true, + "id": 37, + "members": [ + { + "name": "leave", + "type": "bool", + "value": false + }, + { + "name": "multi", + "type": "bool", + "value": false + } + ], + "name": "gravity", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile", + "tileset", + "wangcolor", + "wangset", + "project" + ] + }, { "color": "#ffffff00", "drawFill": true, @@ -143,6 +206,46 @@ "project" ] }, + { + "color": "#ffffff00", + "drawFill": true, + "id": 36, + "members": [ + ], + "name": "map_link", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile", + "tileset", + "wangcolor", + "wangset", + "project" + ] + }, + { + "color": "#ff00ffff", + "drawFill": true, + "id": 33, + "members": [ + ], + "name": "map_node", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile", + "tileset", + "wangcolor", + "wangset", + "project" + ] + }, { "color": "#ff00ffff", "drawFill": true, @@ -195,6 +298,66 @@ "project" ] }, + { + "color": "#ff000000", + "drawFill": true, + "id": 28, + "members": [ + ], + "name": "target", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile", + "tileset", + "wangcolor", + "wangset", + "project" + ] + }, + { + "color": "#ff00f8ae", + "drawFill": true, + "id": 32, + "members": [ + { + "name": "multi", + "type": "bool", + "value": false + }, + { + "name": "target", + "type": "int", + "value": -1 + }, + { + "name": "x", + "type": "bool", + "value": false + }, + { + "name": "y", + "type": "bool", + "value": false + } + ], + "name": "teleport", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile", + "tileset", + "wangcolor", + "wangset", + "project" + ] + }, { "color": "#ff565658", "drawFill": true, diff --git a/src/gravity.c b/src/gravity.c new file mode 100644 index 0000000..37f5bc5 --- /dev/null +++ b/src/gravity.c @@ -0,0 +1,24 @@ +NAME(gravity); +PARENT(trigger); + +INIT { + super("init"); + this->reverseGravity = propertyi_default("direction", 0); +} + +ENTER { + with (e, g_get_entity("player")) { + switch (this->reverseGravity) { + default: + case 0: + e->reverseGravity ^= 1; + break; + case 1: + e->reverseGravity = 1; + break; + case 2: + e->reverseGravity = 0; + break; + } + } +} diff --git a/src/main.c b/src/main.c index 95f2628..006057e 100644 --- a/src/main.c +++ b/src/main.c @@ -11,7 +11,6 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] char **argv) { .height=cfg.display_height, .scale=3, .target_fps=cfg.fps, - .mixer=0, .basepath=argv[1]) == 0); defer(TZR_Quit); TZR_ToggleFullscreen(); @@ -72,6 +71,9 @@ static void _setup_input() { } static int _main_loop([[maybe_unused]] void *udata) { + //if (TZR_GetTick() == 0) + // TZR_PlayMusic("res/bgm.wav", -1); + g_update(); if (TZR_IsKeyPressed(SDL_SCANCODE_ESCAPE) || TZR_IsKeyPressed(SDL_SCANCODE_CAPSLOCK)) @@ -82,7 +84,12 @@ static int _main_loop([[maybe_unused]] void *udata) { TZR_DrawClear(); vec2 v = v2(cfg.tile_width, 0); - const f32 r = (float)(TZR_GetTick() % 768) / 256; + static f32 or = 0.01; + if ((TZR_GetTick() + 15) / 30 % 2 == 0) + or += 0.01; + else + or -= 0.01; + const auto r = sinf(or * 14) / 12; TZR_BlendMode(SDL_BLENDMODE_MUL); { -- cgit v1.2.3