80 lines
2.1 KiB
Odin
80 lines
2.1 KiB
Odin
|
package main
|
|||
|
|
|||
|
import rl "vendor:raylib"
|
|||
|
import "core:math/ease"
|
|||
|
|
|||
|
|
|||
|
LevelDone :: struct {
|
|||
|
using state: GameState,
|
|||
|
position: Vec2,
|
|||
|
size: Vec2,
|
|||
|
ready_to_go: bool,
|
|||
|
}
|
|||
|
|
|||
|
leveldone_init :: proc(prev: ^GameState = nil) -> ^GameState {
|
|||
|
state := new(LevelDone)
|
|||
|
state.variant = state
|
|||
|
state.position = Vec2{WINDOWF.x / 2, WINDOWF.y + 300}
|
|||
|
state.size = {800, 400}
|
|||
|
state.update = leveldone_update
|
|||
|
state.draw = leveldone_draw
|
|||
|
state.free = leveldone_free
|
|||
|
|
|||
|
state.previous = prev
|
|||
|
tween_to(&state.position.y, WINDOWF.y / 2, 1, ease.Ease.Back_Out, state, leveldone_ready)
|
|||
|
|
|||
|
return state
|
|||
|
}
|
|||
|
|
|||
|
leveldone_update :: proc(state: ^GameState, delta: f32) {
|
|||
|
leveldone := transmute(^LevelDone)state
|
|||
|
if leveldone.ready_to_go {
|
|||
|
if rl.IsKeyPressed(rl.KeyboardKey.ENTER) {
|
|||
|
stack_pop()
|
|||
|
game := transmute(^Game)stack_top()
|
|||
|
game.levels_done += 1
|
|||
|
if game.levels_done > 0 && game.levels_done % 2 == 0 {
|
|||
|
game.levelsize += {2, 1}
|
|||
|
game.levelsize.x = min(game.levelsize.x, 13)
|
|||
|
game.levelsize.y = min(game.levelsize.y, 8)
|
|||
|
}
|
|||
|
game_gen_level(game)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
leveldone_draw :: proc(state: ^GameState) {
|
|||
|
leveldone := transmute(^LevelDone)state
|
|||
|
|
|||
|
if state.previous != nil {
|
|||
|
state.previous->draw()
|
|||
|
}
|
|||
|
|
|||
|
TitleFontSize :: 96
|
|||
|
TitleSpacing :: 3
|
|||
|
TitleText :: "УРОВЕНЬ ПРОЙДЕН"
|
|||
|
TitleSize := rl.MeasureTextEx(FontTitle, TitleText, TitleFontSize, TitleSpacing)
|
|||
|
|
|||
|
SubtitleText :: "Нажмите Enter чтобы продолжить"
|
|||
|
SubtitleFontSize :: 48
|
|||
|
SubtitleSpacing :: 2
|
|||
|
SubtitleSize := rl.MeasureTextEx(FontUI, SubtitleText, SubtitleFontSize, SubtitleSpacing)
|
|||
|
|
|||
|
|
|||
|
rl.DrawRectangleV(leveldone.position - leveldone.size / 2, leveldone.size, rl.Color{90, 30, 150, 255})
|
|||
|
|
|||
|
rl.DrawTextPro(FontTitle, TitleText, leveldone.position - {0, 50}, TitleSize / 2, 0, TitleFontSize, TitleSpacing, rl.WHITE)
|
|||
|
rl.DrawTextPro(FontUI, SubtitleText, leveldone.position + {0, 20}, SubtitleSize / 2, 0, SubtitleFontSize, SubtitleSpacing, rl.WHITE)
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
leveldone_free :: proc(state: ^GameState) {
|
|||
|
free(state)
|
|||
|
}
|
|||
|
|
|||
|
leveldone_ready :: proc(state: rawptr) {
|
|||
|
leveldone := transmute(^LevelDone)state
|
|||
|
leveldone.ready_to_go = true
|
|||
|
}
|