One_Eleven_Android/scripts/AlternativeChoices/AlternativeChoiceBase.gd
2024-11-10 03:34:28 +03:00

137 lines
3.5 KiB
GDScript

extends Node2D
enum CursorState{Normal, Walk, Talk, Press, Crash};
onready var root;
signal endOfChoice;
var localization = [];
var cursorStates = [];
var isHovering;
var setLabelsPosition:bool = true;
onready var arrowCursor = preload("res://resources/cursors/arrow2.webp");
onready var dialogCursor = preload("res://resources/cursors/dialog2.webp");
onready var zoomCursor = preload("res://resources/cursors/magnifier2.webp");
onready var walkCursor = preload("res://resources/cursors/man2.webp");
onready var crashCursor = preload("res://resources/cursors/crash_cursor.webp");
func _ready():
root = get_tree().root.get_node("Root");
SetCursorStates();
Localization();
SetLabels();
SetHover();
CheckForVariables();
func Localization():
pass
func SetCursorStates():
pass
func SetLabels():
var buttons = $SpriteButtons.get_children();
var labels = $Labels.get_children();
for i in labels.size():
var label = labels[i];
label.text = tr(localization[i]).trim_suffix(".");
if setLabelsPosition:
label.connect("resized", self, "labelResized", [label, buttons[i]]);
func labelResized(label, button):
var center = button.rect_position + button.rect_size * button.rect_scale / 2.0;
label.rect_position = center - label.rect_size / 2.0;
AdjustLabels();
func AdjustLabels():
pass
func SetHover():
var buttons = $SpriteButtons.get_children();
var labels = $Labels.get_children();
PreventCursorCrash();
for i in buttons.size():
var button = buttons[i];
button.connect("mouse_entered", self, "onButtonHoverOn_sprite", [button, labels[i], cursorStates[i]]);
button.connect("mouse_exited", self, "onButtonHoverOff_sprite", [button, labels[i]]);
func PreventCursorCrash():
for i in 5:
cursorStates.push_back(CursorState.Crash)
func onButtonHoverOn_sprite(button, label, cursorState):
if not (root.isMenuVisible or root.isSaveLoadVisible):
UpdateCursor(cursorState);
button.material.set_shader_param("mixing", 0.15);
label.visible = true;
isHovering = true;
func onButtonHoverOff_sprite(button, label):
if not (root.isMenuVisible or root.isSaveLoadVisible):
UpdateCursor(CursorState.Normal);
button.material.set_shader_param("mixing", 0.0);
label.visible = false;
isHovering = false;
func UpdateCursor(state:int):
match state:
CursorState.Normal:
Input.set_custom_mouse_cursor(arrowCursor)
CursorState.Talk:
Input.set_custom_mouse_cursor(dialogCursor, Input.CURSOR_ARROW, Vector2(19, 19))
CursorState.Walk:
Input.set_custom_mouse_cursor(walkCursor, Input.CURSOR_ARROW, Vector2(19, 19))
CursorState.Press:
Input.set_custom_mouse_cursor(zoomCursor, Input.CURSOR_ARROW, Vector2(19, 19))
CursorState.Crash:
Input.set_custom_mouse_cursor(crashCursor, Input.CURSOR_ARROW, Vector2(19, 19))
func CheckForVariables():
pass;
func End():
UpdateCursor(CursorState.Normal);
emit_signal("endOfChoice");
func CheckHover()->bool:
return not (get_tree().root.get_node("Root").isMenuVisible or get_tree().root.get_node("Root").isSaveLoadVisible)
var shaderValue = 0.0;
var tempDelta = 0.0;
var isRising;
func _process(delta):
if isHovering:
return ;
tempDelta += delta;
if tempDelta > 0.2:
tempDelta = 0;
if shaderValue <= - 0.05:
isRising = true
if shaderValue >= 0.13:
isRising = false;
if isRising:
shaderValue += 0.01;
else :
shaderValue -= 0.01;
var buttons = $SpriteButtons.get_children();
for i in buttons:
i.material.set_shader_param("mixing", shaderValue);
else :
tempDelta += delta;