aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.odin31
-rw-r--r--src/player.odin23
2 files changed, 48 insertions, 6 deletions
diff --git a/src/main.odin b/src/main.odin
index 541046b..508f97c 100644
--- a/src/main.odin
+++ b/src/main.odin
@@ -28,6 +28,33 @@ state: struct {
platform_list: Entity_List(Platform),
}
+logger: log.Logger
+
+// raylib_log :: proc "c" (
+// msg_type: rl.TraceLogLevel,
+// fmt: cstring,
+// args: ^c.va_list,
+// ) {
+// context = runtime.default_context()
+// context.logger = logger
+//
+// fmt_len := libc.vsnprintf(nil, 0, fmt, args)
+//
+// msg_bytes := make([]u8, fmt_len + 1, allocator = context.temp_allocator)
+// log.info(len(msg_bytes), raw_data(msg_bytes))
+// log.info(libc.vsnprintf(raw_data(msg_bytes), len(msg_bytes), fmt, args))
+//
+// msg := string(msg_bytes)
+//
+// #partial switch msg_type {
+// case .DEBUG: log.debug(msg)
+// case .INFO: log.info(msg)
+// case .WARNING: log.warn(msg)
+// case .ERROR: log.error(msg)
+// case .FATAL: log.fatal(msg)
+// }
+// }
+
init :: proc() {
state.camera.zoom = 1
// state.camera.offset = {draw.SCREEN_WIDTH/2, draw.SCREEN_HEIGHT/2}
@@ -109,10 +136,12 @@ main :: proc() {
}
}
- logger := log.create_console_logger()
+ logger = log.create_console_logger()
context.logger = logger
defer log.destroy_console_logger(logger)
+ // rl.SetTraceLogCallback(raylib_log)
+
rl.InitWindow(480 * 2, 360 * 2, "Demonchime")
rl.SetWindowState({.WINDOW_RESIZABLE})
diff --git a/src/player.odin b/src/player.odin
index 5c001da..149e1ce 100644
--- a/src/player.odin
+++ b/src/player.odin
@@ -12,8 +12,9 @@ import "tiled"
PLAYER_SPEED :: 100
PLAYER_ACCEL :: 10
PLAYER_JUMP_FORCE :: 350
+PLAYER_DOUBLE_JUMP_FORCE :: 250
PLAYER_JUMP_BUFFERING :: 0.07
-PLAYER_COYOTE_TIME :: 0.05
+PLAYER_COYOTE_TIME :: 0.06
PLAYER_JUMP_RELEASE_CUT :: -100
PLAYER_DASH_SPEED :: 500
@@ -38,7 +39,10 @@ player: struct {
dash_timer: f32,
state: Player_State,
+
outside_room: bool,
+
+ has_double_jumped: bool,
}
init_player :: proc() {
@@ -109,12 +113,21 @@ default_state :: proc(dt: f32) {
if .DOWN in body.collisions {
player.coyote_time = PLAYER_COYOTE_TIME
+ player.has_double_jumped = false
}
- if player.jump_buffer > 0 && player.coyote_time > 0 {
- player.jump_buffer = 0
- player.coyote_time = 0
- body.vel.y = -PLAYER_JUMP_FORCE
+ if player.jump_buffer > 0 {
+ if player.coyote_time > 0 {
+ body.vel.y = -PLAYER_JUMP_FORCE
+
+ player.jump_buffer = 0
+ player.coyote_time = 0
+ } else if !player.has_double_jumped {
+ body.vel.y = -PLAYER_DOUBLE_JUMP_FORCE
+ player.has_double_jumped = true
+
+ player.jump_buffer = 0
+ }
}
if .DOWN not_in body.collisions \