85 lines
2.2 KiB
Odin
85 lines
2.2 KiB
Odin
package main
|
||
|
||
import rl "vendor:raylib"
|
||
import "core:math/ease"
|
||
import "core:fmt"
|
||
|
||
|
||
Winning :: struct {
|
||
using state: GameState,
|
||
position: vec2,
|
||
size: vec2,
|
||
ready_to_go: bool,
|
||
}
|
||
|
||
winning_init :: proc(prev: ^GameState = nil) -> ^GameState {
|
||
state := new(Winning)
|
||
state.variant = state
|
||
state.position = vec2{WSize.x / 2, WSize.y + 300}
|
||
state.size = {700, 500}
|
||
state.update = winning_update
|
||
state.draw = winning_draw
|
||
state.free = winning_free
|
||
|
||
state.previous = prev
|
||
tween_to(&state.position.y, WSize.y / 2, 1, ease.Ease.Back_Out, state, winning_ready)
|
||
|
||
return state
|
||
}
|
||
|
||
winning_update :: proc(state: ^GameState, delta: f32) {
|
||
winning := transmute(^Winning)state
|
||
if winning.ready_to_go {
|
||
if rl.IsKeyPressed(rl.KeyboardKey.ESCAPE) {
|
||
winning.ready_to_go = false
|
||
rl.StopMusicStream(current_music)
|
||
tween_to(&Overlay_Opacity, 1.0, 0.5, ease.Ease.Cubic_Out, nil, proc(data: rawptr) {
|
||
stack_pop()
|
||
state := transmute(^GameState)stack_top()
|
||
fmt.println(state.variant)
|
||
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)
|
||
})
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
winning_draw :: proc(state: ^GameState) {
|
||
winning := transmute(^Winning)state
|
||
|
||
if state.previous != nil {
|
||
state.previous->draw()
|
||
}
|
||
|
||
TitleFontSize :: 96
|
||
TitleSpacing :: 3
|
||
TitleText :: "GAME OVER"
|
||
|
||
SubtitleText := [?]cstring{"Тор смог спасти Асгард", "от Рагнарёка!", "Нажмите Escape чтобы выйти"}
|
||
SubtitleFontSize :: 48
|
||
|
||
|
||
rl.DrawRectangleV(winning.position - winning.size / 2, winning.size, rl.Color{90, 30, 150, 10})
|
||
|
||
draw_text_centered(Res.Fonts.Title, TitleText, winning.position - {0, 100}, TitleFontSize, 1, rl.WHITE)
|
||
for c, i in SubtitleText {
|
||
draw_text_centered(Res.Fonts.UI, c, winning.position - {0, f32(10 - i * 50)}, SubtitleFontSize, 1, rl.WHITE)
|
||
// rl.DrawTextPro(Res.Fonts.UI, c, winning.position - {0, f32(10 - i * 50)}, SubtitleSizes[i] / 2, 0, SubtitleFontSize, SubtitleSpacing, rl.WHITE)
|
||
}
|
||
|
||
|
||
}
|
||
|
||
winning_free :: proc(state: ^GameState) {
|
||
free(state)
|
||
}
|
||
|
||
winning_ready :: proc(state: rawptr) {
|
||
winning := transmute(^Winning)state
|
||
winning.ready_to_go = true
|
||
}
|