diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.odin | 31 | ||||
| -rw-r--r-- | src/player.odin | 23 |
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 \ |
