HeavenStudioPlus/Assets/Scripts/Games/SlotMonster/SlotButton.cs

96 lines
2.7 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine;
using HeavenStudio.Util;
using UnityEngine.Playables;
namespace HeavenStudio.Games.Scripts_SlotMonster
{
public class SlotButton : MonoBehaviour
{
public bool pressed;
public Color color; // used to ease between button colors and button flash colors! wow
public PlayerActionEvent input;
public bool missed;
[Header("Components")]
public Animator anim;
[SerializeField] SpriteRenderer[] srs;
private bool flashing;
private const float FLASH_FRAMES = 4f;
private int currentFrame;
private SlotMonster game;
public void Init(SlotMonster instance)
{
game = instance;
pressed = true;
color = srs[0].color;
}
private void LateUpdate()
{
Color newColor = color;
if (pressed) {
newColor = Color.LerpUnclamped(color, Color.black, 0.5f);
} else if (flashing) {
float normalized = currentFrame / FLASH_FRAMES;
Debug.Log("normalized : " + normalized);
float newR = EasingFunction.Linear(game.buttonFlashColor.r, color.r, normalized);
float newG = EasingFunction.Linear(game.buttonFlashColor.g, color.g, normalized);
float newB = EasingFunction.Linear(game.buttonFlashColor.b, color.b, normalized);
newColor = new Color(newR, newG, newB);
// Debug.Log("currentFrame / FLASH_FRAMES : " + currentFrame + "/" + FLASH_FRAMES);
// newColor = Color.LerpUnclamped(color, game.buttonFlashColor, normalized);
// Debug.Log("color : " + color);
// Debug.Log("newColor : " + newColor);
}
foreach (var sr in srs) {
sr.color = newColor;
}
}
public void Ready()
{
anim.Play("PopUp", 0, 0);
pressed = false;
flashing = false;
missed = false;
}
public void Press(bool isMiss)
{
anim.DoScaledAnimationAsync("Press", 0.5f);
pressed = true;
flashing = false;
missed = isMiss;
if (isMiss && input != null) {
input.Disable();
input.CleanUp();
}
}
public void TryFlash()
{
if (!pressed) {
anim.DoScaledAnimationAsync("Flash", 0.5f);
}
}
// animation events
public void AnimateColor(int frame)
{
currentFrame = frame;
flashing = frame < FLASH_FRAMES;
}
}
}