package main import rl "vendor:raylib" import "core:math/ease" Pause_Buttons :: enum { CONTINUE, EXIT } pause_strings := [Pause_Buttons]cstring { .CONTINUE = "Продолжить", .EXIT = "Прервать игру" } Pause :: struct { using state: GameState, active: bool, list: MenuList(Pause_Buttons), } pause_init :: proc(prev: ^GameState = nil) -> ^GameState { state := new(Pause) state.variant = state state.list = MenuList(Pause_Buttons){ state = state, position = {-300, WSize.y / 2}, line_size = 60, font_size = 48, elements = &pause_strings, menu_pressed = pause_button_pressed, background = rl.Color{50, 10, 110, 10} } state.update = pause_update state.draw = pause_draw state.free = pause_free state.previous = prev state.active = true tween_to(&state.list.position.x, 100, 0.5, ease.Ease.Back_Out) return state } pause_update :: proc(state: ^GameState, delta: f32) { pause := transmute(^Pause)state pause.list.position.y = WSize.y / 2 menu_list_update(&pause.list) } pause_button_pressed :: proc(state: ^GameState, el: Pause_Buttons) { pause := transmute(^Pause)state if !pause.active { return } switch el { case .CONTINUE: stack_pop() case .EXIT: pause.active = false rl.StopMusicStream(current_music) tween_to(&Overlay_Opacity, 1.0, 0.5, ease.Ease.Cubic_Out, pause, proc(data: rawptr) { stack_pop() game := transmute(^Game)stack_top() game_setup(game) menu := menu_init(game) stack_push(menu) tween_to(&Overlay_Opacity, 0, 0.5, ease.Ease.Cubic_Out) }) } } pause_draw :: proc(state: ^GameState) { pause := transmute(^Pause)state pause.previous.draw(pause.previous) TitleFontSize :: 96 TitleSpacing :: 3 TitleText :: "Ragnarøkkr" TitleSize := rl.MeasureTextEx(Res.Fonts.Title, TitleText, TitleFontSize, TitleSpacing) rl.DrawTextPro(Res.Fonts.Title, TitleText, {WSize.x - 50, 50}, {TitleSize.x, 0}, 0, 96, 3, rl.WHITE) menu_list_draw(&pause.list) } pause_free :: proc(state: ^GameState) { free(state) }