Moved tweens to NTween
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					[submodule "ntween"]
 | 
				
			||||||
 | 
						path = ntween
 | 
				
			||||||
 | 
						url = https://git.nefrace.ru/nefrace/ntween.git
 | 
				
			||||||
@ -1,7 +1,8 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import rl "vendor:raylib"
 | 
					 | 
				
			||||||
import "core:math/ease"
 | 
					import "core:math/ease"
 | 
				
			||||||
 | 
					import "ntween"
 | 
				
			||||||
 | 
					import rl "vendor:raylib"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GameOver :: struct {
 | 
					GameOver :: struct {
 | 
				
			||||||
@ -21,7 +22,15 @@ gameover_init :: proc(prev: ^GameState = nil) -> ^GameState {
 | 
				
			|||||||
	state.free = gameover_free
 | 
						state.free = gameover_free
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	state.previous = prev
 | 
						state.previous = prev
 | 
				
			||||||
	tween_to(&state.position.y, WINDOWF.y / 2, 1, ease.Ease.Back_Out, state, gameover_ready)
 | 
						ntween.animate(
 | 
				
			||||||
 | 
							&v2tween,
 | 
				
			||||||
 | 
							&state.position,
 | 
				
			||||||
 | 
							WINDOWF.y,
 | 
				
			||||||
 | 
							1,
 | 
				
			||||||
 | 
							ease.Ease.Back_Out,
 | 
				
			||||||
 | 
							state,
 | 
				
			||||||
 | 
							gameover_ready,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return state
 | 
						return state
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -55,7 +64,11 @@ gameover_draw :: proc(state: ^GameState) {
 | 
				
			|||||||
	TitleText :: "ИГРА ОКОНЧЕНА"
 | 
						TitleText :: "ИГРА ОКОНЧЕНА"
 | 
				
			||||||
	TitleSize := rl.MeasureTextEx(FontTitle, TitleText, TitleFontSize, TitleSpacing)
 | 
						TitleSize := rl.MeasureTextEx(FontTitle, TitleText, TitleFontSize, TitleSpacing)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SubtitleText := [3]cstring{"Нажмите Enter", "чтобы начать сначала", "Или Escape для выхода"}
 | 
						SubtitleText := [3]cstring {
 | 
				
			||||||
 | 
							"Нажмите Enter",
 | 
				
			||||||
 | 
							"чтобы начать сначала",
 | 
				
			||||||
 | 
							"Или Escape для выхода",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	SubtitleFontSize :: 48
 | 
						SubtitleFontSize :: 48
 | 
				
			||||||
	SubtitleSpacing :: 2
 | 
						SubtitleSpacing :: 2
 | 
				
			||||||
	SubtitleSizes := [3]Vec2{}
 | 
						SubtitleSizes := [3]Vec2{}
 | 
				
			||||||
@ -64,11 +77,33 @@ gameover_draw :: proc(state: ^GameState) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rl.DrawRectangleV(gameover.position - gameover.size / 2, gameover.size, rl.Color{90, 30, 150, 255})
 | 
						rl.DrawRectangleV(
 | 
				
			||||||
 | 
							gameover.position - gameover.size / 2,
 | 
				
			||||||
 | 
							gameover.size,
 | 
				
			||||||
 | 
							rl.Color{90, 30, 150, 255},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rl.DrawTextPro(FontTitle, TitleText, gameover.position - {0, 100}, TitleSize / 2, 0, TitleFontSize, TitleSpacing, rl.WHITE)
 | 
						rl.DrawTextPro(
 | 
				
			||||||
 | 
							FontTitle,
 | 
				
			||||||
 | 
							TitleText,
 | 
				
			||||||
 | 
							gameover.position - {0, 100},
 | 
				
			||||||
 | 
							TitleSize / 2,
 | 
				
			||||||
 | 
							0,
 | 
				
			||||||
 | 
							TitleFontSize,
 | 
				
			||||||
 | 
							TitleSpacing,
 | 
				
			||||||
 | 
							rl.WHITE,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
	for c, i in SubtitleText {
 | 
						for c, i in SubtitleText {
 | 
				
			||||||
		rl.DrawTextPro(FontUI, c, gameover.position - {0, f32(10 - i * 50)}, SubtitleSizes[i] / 2, 0, SubtitleFontSize, SubtitleSpacing, rl.WHITE)
 | 
							rl.DrawTextPro(
 | 
				
			||||||
 | 
								FontUI,
 | 
				
			||||||
 | 
								c,
 | 
				
			||||||
 | 
								gameover.position - {0, f32(10 - i * 50)},
 | 
				
			||||||
 | 
								SubtitleSizes[i] / 2,
 | 
				
			||||||
 | 
								0,
 | 
				
			||||||
 | 
								SubtitleFontSize,
 | 
				
			||||||
 | 
								SubtitleSpacing,
 | 
				
			||||||
 | 
								rl.WHITE,
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -82,3 +117,4 @@ gameover_ready :: proc(state: rawptr) {
 | 
				
			|||||||
	gameover := transmute(^GameOver)state
 | 
						gameover := transmute(^GameOver)state
 | 
				
			||||||
	gameover.ready_to_go = true
 | 
						gameover.ready_to_go = true
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,8 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import rl "vendor:raylib"
 | 
					 | 
				
			||||||
import "core:math/ease"
 | 
					import "core:math/ease"
 | 
				
			||||||
 | 
					import "ntween"
 | 
				
			||||||
 | 
					import rl "vendor:raylib"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LevelDone :: struct {
 | 
					LevelDone :: struct {
 | 
				
			||||||
@ -21,7 +22,15 @@ leveldone_init :: proc(prev: ^GameState = nil) -> ^GameState {
 | 
				
			|||||||
	state.free = leveldone_free
 | 
						state.free = leveldone_free
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	state.previous = prev
 | 
						state.previous = prev
 | 
				
			||||||
	tween_to(&state.position.y, WINDOWF.y / 2, 1, ease.Ease.Back_Out, state, leveldone_ready)
 | 
						ntween.animate(
 | 
				
			||||||
 | 
							&v2tween,
 | 
				
			||||||
 | 
							&state.position,
 | 
				
			||||||
 | 
							WINDOWF / 2,
 | 
				
			||||||
 | 
							1,
 | 
				
			||||||
 | 
							ease.Ease.Back_Out,
 | 
				
			||||||
 | 
							state,
 | 
				
			||||||
 | 
							leveldone_ready,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return state
 | 
						return state
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -62,10 +71,32 @@ leveldone_draw :: proc(state: ^GameState) {
 | 
				
			|||||||
	SubtitleSize := rl.MeasureTextEx(FontUI, SubtitleText, SubtitleFontSize, SubtitleSpacing)
 | 
						SubtitleSize := rl.MeasureTextEx(FontUI, SubtitleText, SubtitleFontSize, SubtitleSpacing)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rl.DrawRectangleV(leveldone.position - leveldone.size / 2, leveldone.size, rl.Color{90, 30, 150, 255})
 | 
						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(
 | 
				
			||||||
	rl.DrawTextPro(FontUI, SubtitleText, leveldone.position + {0, 20}, SubtitleSize / 2, 0, SubtitleFontSize, SubtitleSpacing, rl.WHITE)
 | 
							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,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -77,3 +108,4 @@ leveldone_ready :: proc(state: rawptr) {
 | 
				
			|||||||
	leveldone := transmute(^LevelDone)state
 | 
						leveldone := transmute(^LevelDone)state
 | 
				
			||||||
	leveldone.ready_to_go = true
 | 
						leveldone.ready_to_go = true
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										36
									
								
								main.odin
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								main.odin
									
									
									
									
									
								
							@ -1,36 +1,45 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "core:fmt"
 | 
				
			||||||
 | 
					import "core:slice"
 | 
				
			||||||
 | 
					import "ntween"
 | 
				
			||||||
import rl "vendor:raylib"
 | 
					import rl "vendor:raylib"
 | 
				
			||||||
import rlgl "vendor:raylib/rlgl"
 | 
					import rlgl "vendor:raylib/rlgl"
 | 
				
			||||||
import "core:slice"
 | 
					 | 
				
			||||||
import "core:fmt"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import "core:math/ease"
 | 
					import "core:math/ease"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Vec2 :: [2]f32
 | 
					Vec2 :: [2]f32
 | 
				
			||||||
Vec2i :: [2]i32
 | 
					Vec2i :: [2]i32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WINDOW : Vec2i
 | 
					WINDOW: Vec2i
 | 
				
			||||||
WINDOWF : Vec2
 | 
					WINDOWF: Vec2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FontTitle : rl.Font
 | 
					FontTitle: rl.Font
 | 
				
			||||||
FontUI: rl.Font
 | 
					FontUI: rl.Font
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WindowShouldExit := false
 | 
					WindowShouldExit := false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					f32tween: ntween.Tween_Map(f32)
 | 
				
			||||||
 | 
					v2tween: ntween.Tween_Map(Vec2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main :: proc() {
 | 
					main :: proc() {
 | 
				
			||||||
	rl.SetConfigFlags(rl.ConfigFlags{.FULLSCREEN_MODE, .VSYNC_HINT, })
 | 
						rl.SetConfigFlags(rl.ConfigFlags{.FULLSCREEN_MODE, .VSYNC_HINT})
 | 
				
			||||||
	monitor := rl.GetCurrentMonitor()
 | 
						monitor := rl.GetCurrentMonitor()
 | 
				
			||||||
	rl.InitWindow(0, 0, "SinePong")
 | 
						rl.InitWindow(0, 0, "SinePong")
 | 
				
			||||||
	rl.SetTargetFPS(9999)
 | 
						rl.SetTargetFPS(9999)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tween_init()
 | 
						f32tween = ntween.init(f32)
 | 
				
			||||||
	defer tween_clean()
 | 
						v2tween = ntween.init(Vec2)
 | 
				
			||||||
 | 
						defer {
 | 
				
			||||||
 | 
							ntween.destroy_tweens(&f32tween)
 | 
				
			||||||
 | 
							ntween.destroy_tweens(&v2tween)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	FontUI = rl.LoadFontEx("assets/monogram-extended.ttf", 96, nil, 2048)
 | 
						FontUI = rl.LoadFontEx("assets/monogram-extended.ttf", 96, nil, 2048)
 | 
				
			||||||
//	FontUI = rl.LoadFont("assets/monogram-extended.ttf")
 | 
						//	FontUI = rl.LoadFont("assets/monogram-extended.ttf")
 | 
				
			||||||
	FontTitle = rl.LoadFontEx("assets/monogram-extended.ttf", 96*2, nil, 2048)
 | 
						FontTitle = rl.LoadFontEx("assets/monogram-extended.ttf", 96 * 2, nil, 2048)
 | 
				
			||||||
	defer rl.UnloadFont(FontTitle)
 | 
						defer rl.UnloadFont(FontTitle)
 | 
				
			||||||
	defer rl.UnloadFont(FontUI)
 | 
						defer rl.UnloadFont(FontUI)
 | 
				
			||||||
	rl.SetTextureFilter(FontUI.texture, rl.TextureFilter.POINT)
 | 
						rl.SetTextureFilter(FontUI.texture, rl.TextureFilter.POINT)
 | 
				
			||||||
@ -59,10 +68,11 @@ main :: proc() {
 | 
				
			|||||||
			WINDOWF = Vec2{f32(WINDOW.x), f32(WINDOW.y)}
 | 
								WINDOWF = Vec2{f32(WINDOW.x), f32(WINDOW.y)}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		current_state := state_stack[len(state_stack)-1]
 | 
							current_state := state_stack[len(state_stack) - 1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		delta := rl.GetFrameTime()
 | 
							delta := rl.GetFrameTime()
 | 
				
			||||||
		tweens_process(delta)
 | 
							ntween.process(&f32tween, delta)
 | 
				
			||||||
 | 
							ntween.process(&v2tween, delta)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		current_state->update(delta)
 | 
							current_state->update(delta)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -76,7 +86,6 @@ main :: proc() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 TODO:
 | 
					 TODO:
 | 
				
			||||||
@ -92,3 +101,4 @@ main :: proc() {
 | 
				
			|||||||
[ ] Звуки
 | 
					[ ] Звуки
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,9 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import rl "vendor:raylib"
 | 
					 | 
				
			||||||
import "core:math/ease"
 | 
					 | 
				
			||||||
import "core:fmt"
 | 
					import "core:fmt"
 | 
				
			||||||
 | 
					import "core:math/ease"
 | 
				
			||||||
 | 
					import "ntween"
 | 
				
			||||||
 | 
					import rl "vendor:raylib"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MenuList :: struct($T: typeid) {
 | 
					MenuList :: struct($T: typeid) {
 | 
				
			||||||
	state:          ^GameState,
 | 
						state:          ^GameState,
 | 
				
			||||||
@ -11,7 +12,7 @@ MenuList :: struct($T: typeid) {
 | 
				
			|||||||
	font_size:      f32,
 | 
						font_size:      f32,
 | 
				
			||||||
	active_element: T,
 | 
						active_element: T,
 | 
				
			||||||
	active_marker:  Vec2,
 | 
						active_marker:  Vec2,
 | 
				
			||||||
	tween: ^Tween,
 | 
						tween:          ^ntween.Tween(f32),
 | 
				
			||||||
	elements:       ^[T]cstring,
 | 
						elements:       ^[T]cstring,
 | 
				
			||||||
	menu_pressed:   proc(state: ^GameState, element: T),
 | 
						menu_pressed:   proc(state: ^GameState, element: T),
 | 
				
			||||||
	background:     rl.Color,
 | 
						background:     rl.Color,
 | 
				
			||||||
@ -29,12 +30,10 @@ menu_list_update :: proc(list: ^MenuList($T)) {
 | 
				
			|||||||
	list.mouse_pos = rl.GetMousePosition()
 | 
						list.mouse_pos = rl.GetMousePosition()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	size := menu_list_get_size(list)
 | 
						size := menu_list_get_size(list)
 | 
				
			||||||
	if rl.CheckCollisionPointRec(list.mouse_pos, rl.Rectangle{
 | 
						if rl.CheckCollisionPointRec(
 | 
				
			||||||
		x = list.position.x,
 | 
							list.mouse_pos,
 | 
				
			||||||
		y = list.position.y,
 | 
							rl.Rectangle{x = list.position.x, y = list.position.y, width = size.x, height = size.y},
 | 
				
			||||||
		width = size.x,
 | 
						) {
 | 
				
			||||||
		height = size.y,
 | 
					 | 
				
			||||||
	}) {
 | 
					 | 
				
			||||||
		if last_mouse_pos != list.mouse_pos {
 | 
							if last_mouse_pos != list.mouse_pos {
 | 
				
			||||||
			mouse_relative := list.mouse_pos - list.position
 | 
								mouse_relative := list.mouse_pos - list.position
 | 
				
			||||||
			cur_element = i8(mouse_relative.y / list.line_size)
 | 
								cur_element = i8(mouse_relative.y / list.line_size)
 | 
				
			||||||
@ -47,7 +46,6 @@ menu_list_update :: proc(list: ^MenuList($T)) {
 | 
				
			|||||||
	last_mouse_pos = list.mouse_pos
 | 
						last_mouse_pos = list.mouse_pos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if rl.IsKeyPressed(rl.KeyboardKey.DOWN) {
 | 
						if rl.IsKeyPressed(rl.KeyboardKey.DOWN) {
 | 
				
			||||||
		cur_element += 1
 | 
							cur_element += 1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -55,13 +53,14 @@ menu_list_update :: proc(list: ^MenuList($T)) {
 | 
				
			|||||||
		cur_element -= 1
 | 
							cur_element -= 1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if prev_element != cur_element {
 | 
						if prev_element != cur_element {
 | 
				
			||||||
		if cur_element < 0 { cur_element = len(T) -1 }
 | 
							if cur_element < 0 {cur_element = len(T) - 1}
 | 
				
			||||||
		if cur_element == len(T) { cur_element = 0 }
 | 
							if cur_element == len(T) {cur_element = 0}
 | 
				
			||||||
		list.active_element = cast(T)cur_element
 | 
							list.active_element = cast(T)cur_element
 | 
				
			||||||
		if list.tween != nil {
 | 
							if list.tween != nil {
 | 
				
			||||||
			tween_cancel(list.tween)
 | 
								ntween.cancel(list.tween)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		list.tween = tween_to(
 | 
							list.tween = ntween.animate(
 | 
				
			||||||
 | 
								&f32tween,
 | 
				
			||||||
			&list.active_marker.y,
 | 
								&list.active_marker.y,
 | 
				
			||||||
			f32(list.active_element) * list.line_size,
 | 
								f32(list.active_element) * list.line_size,
 | 
				
			||||||
			0.25,
 | 
								0.25,
 | 
				
			||||||
@ -97,3 +96,4 @@ menu_list_get_size :: proc(list: ^MenuList($T)) -> Vec2 {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return size
 | 
						return size
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								ntween
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								ntween
									
									
									
									
									
										Submodule
									
								
							 Submodule ntween added at 7136c68f3e
									
								
							
							
								
								
									
										26
									
								
								pause.odin
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								pause.odin
									
									
									
									
									
								
							@ -1,29 +1,29 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import rl "vendor:raylib"
 | 
					 | 
				
			||||||
import "core:math/ease"
 | 
					import "core:math/ease"
 | 
				
			||||||
 | 
					import "ntween"
 | 
				
			||||||
 | 
					import rl "vendor:raylib"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Pause_Buttons :: enum {
 | 
					Pause_Buttons :: enum {
 | 
				
			||||||
	RESUME,
 | 
						RESUME,
 | 
				
			||||||
	EXIT
 | 
						EXIT,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pause_strings := [Pause_Buttons]cstring {
 | 
					pause_strings := [Pause_Buttons]cstring {
 | 
				
			||||||
	.RESUME = "Продолжить",
 | 
						.RESUME = "Продолжить",
 | 
				
			||||||
	.EXIT = "Выход"
 | 
						.EXIT   = "Выход",
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Pause :: struct {
 | 
					Pause :: struct {
 | 
				
			||||||
	using state: GameState,
 | 
						using state: GameState,
 | 
				
			||||||
 | 
						list:        MenuList(Pause_Buttons),
 | 
				
			||||||
	list: MenuList(Pause_Buttons)
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pause_init :: proc(prev: ^GameState = nil) -> ^GameState {
 | 
					pause_init :: proc(prev: ^GameState = nil) -> ^GameState {
 | 
				
			||||||
	state := new(Pause)
 | 
						state := new(Pause)
 | 
				
			||||||
	state.variant = state
 | 
						state.variant = state
 | 
				
			||||||
	state.list = MenuList(Pause_Buttons){
 | 
						state.list = MenuList(Pause_Buttons) {
 | 
				
			||||||
		position     = {-300, 300},
 | 
							position     = {-300, 300},
 | 
				
			||||||
		line_size    = 60,
 | 
							line_size    = 60,
 | 
				
			||||||
		font_size    = 42,
 | 
							font_size    = 42,
 | 
				
			||||||
@ -35,7 +35,7 @@ pause_init :: proc(prev: ^GameState = nil) -> ^GameState {
 | 
				
			|||||||
	state.draw = pause_draw
 | 
						state.draw = pause_draw
 | 
				
			||||||
	state.free = pause_free
 | 
						state.free = pause_free
 | 
				
			||||||
	state.previous = prev
 | 
						state.previous = prev
 | 
				
			||||||
	tween_to(&state.list.position.x, 300, 1, ease.Ease.Back_Out)
 | 
						ntween.animate(&f32tween, &state.list.position.x, 300, 1, ease.Ease.Back_Out)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return state
 | 
						return state
 | 
				
			||||||
@ -72,7 +72,16 @@ pause_draw :: proc(state: ^GameState) {
 | 
				
			|||||||
	TitleSpacing :: 3
 | 
						TitleSpacing :: 3
 | 
				
			||||||
	TitleText :: "ПАУЗА"
 | 
						TitleText :: "ПАУЗА"
 | 
				
			||||||
	TitleSize := rl.MeasureTextEx(FontTitle, TitleText, TitleFontSize, TitleSpacing)
 | 
						TitleSize := rl.MeasureTextEx(FontTitle, TitleText, TitleFontSize, TitleSpacing)
 | 
				
			||||||
	rl.DrawTextPro(FontTitle, "ПАУЗА", {WINDOWF.x - 50, 50}, {TitleSize.x, 0}, 0, 96, 3, rl.WHITE)
 | 
						rl.DrawTextPro(
 | 
				
			||||||
 | 
							FontTitle,
 | 
				
			||||||
 | 
							"ПАУЗА",
 | 
				
			||||||
 | 
							{WINDOWF.x - 50, 50},
 | 
				
			||||||
 | 
							{TitleSize.x, 0},
 | 
				
			||||||
 | 
							0,
 | 
				
			||||||
 | 
							96,
 | 
				
			||||||
 | 
							3,
 | 
				
			||||||
 | 
							rl.WHITE,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	menu_list_draw(&menu.list)
 | 
						menu_list_draw(&menu.list)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -81,3 +90,4 @@ pause_free :: proc(state: ^GameState) {
 | 
				
			|||||||
	pause := transmute(^Pause)state
 | 
						pause := transmute(^Pause)state
 | 
				
			||||||
	free(state)
 | 
						free(state)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										85
									
								
								tween.odin
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								tween.odin
									
									
									
									
									
								
							@ -1,85 +0,0 @@
 | 
				
			|||||||
package main
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import "core:math"
 | 
					 | 
				
			||||||
import "core:math/ease"
 | 
					 | 
				
			||||||
import "core:math/linalg"
 | 
					 | 
				
			||||||
import "core:slice"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Tween :: struct {
 | 
					 | 
				
			||||||
	ptr: ^f32,
 | 
					 | 
				
			||||||
	from: f32,
 | 
					 | 
				
			||||||
	to: f32,
 | 
					 | 
				
			||||||
	time: f32,
 | 
					 | 
				
			||||||
	duration: f32,
 | 
					 | 
				
			||||||
	ease_type: ease.Ease,
 | 
					 | 
				
			||||||
	active: bool,
 | 
					 | 
				
			||||||
	finished: proc(data: rawptr),
 | 
					 | 
				
			||||||
	data: rawptr
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TWEEN_SIZE :: 128
 | 
					 | 
				
			||||||
tweens_buf: [TWEEN_SIZE]^Tween
 | 
					 | 
				
			||||||
tweens : [dynamic]^Tween
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tween_init :: proc() {
 | 
					 | 
				
			||||||
	tweens = slice.into_dynamic(tweens_buf[:])
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tween_clean :: proc() {
 | 
					 | 
				
			||||||
	for tween, i in tweens {
 | 
					 | 
				
			||||||
		free(tween)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tween_to :: proc(
 | 
					 | 
				
			||||||
		value: ^f32, to: f32, duration: f32,
 | 
					 | 
				
			||||||
		ease: ease.Ease = ease.Ease.Quartic_In_Out,
 | 
					 | 
				
			||||||
		data: rawptr = nil,
 | 
					 | 
				
			||||||
		callback: proc(data: rawptr) = nil
 | 
					 | 
				
			||||||
		) -> ^Tween {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	tween := new(Tween) 
 | 
					 | 
				
			||||||
	tween.ptr = value
 | 
					 | 
				
			||||||
	tween.from = value^
 | 
					 | 
				
			||||||
	tween.to = to
 | 
					 | 
				
			||||||
	tween.duration = duration
 | 
					 | 
				
			||||||
	tween.ease_type = ease
 | 
					 | 
				
			||||||
	tween.active = true
 | 
					 | 
				
			||||||
	tween.data = data
 | 
					 | 
				
			||||||
	tween.finished = callback
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	append(&tweens, tween)
 | 
					 | 
				
			||||||
	return tween
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tween_cancel :: proc(t: ^Tween) {
 | 
					 | 
				
			||||||
	t.active = false
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tweens_process :: proc(delta: f32) {
 | 
					 | 
				
			||||||
	#reverse for tween, i in tweens {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		tween.time += delta
 | 
					 | 
				
			||||||
		p := clamp(tween.time / tween.duration, 0, 1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		val := ease.ease(tween.ease_type, p)
 | 
					 | 
				
			||||||
		if tween.ptr != nil {
 | 
					 | 
				
			||||||
			tween.ptr^ = math.lerp(tween.from, tween.to, val)
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			tween.active = false
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if tween.time >= tween.duration {
 | 
					 | 
				
			||||||
			tween.active = false
 | 
					 | 
				
			||||||
			if tween.finished != nil {
 | 
					 | 
				
			||||||
				tween.finished(tween.data)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !tween.active {
 | 
					 | 
				
			||||||
			free(tween)
 | 
					 | 
				
			||||||
			unordered_remove(&tweens, i)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user