mirror of
https://github.com/RHeavenStudio/HeavenStudio.git
synced 2025-06-13 01:57:38 +02:00
start flow bar
This commit is contained in:
135
Assets/Scripts/Games/KarateMan/KarateManNoriController.cs
Normal file
135
Assets/Scripts/Games/KarateMan/KarateManNoriController.cs
Normal file
@ -0,0 +1,135 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
using HeavenStudio.Util;
|
||||
|
||||
namespace HeavenStudio.Games.Scripts_KarateMan
|
||||
{
|
||||
public class KarateManNoriController : MonoBehaviour
|
||||
{
|
||||
public GameObject NoriController;
|
||||
public GameObject NoriHeart;
|
||||
public Transform NoriHolder;
|
||||
public Material NoriMaterial;
|
||||
|
||||
public float Nori;
|
||||
public int MaxNori;
|
||||
Animator[] NoriHeartAnimators;
|
||||
Material[] NoriHeartMaterials;
|
||||
|
||||
static Vector2 HeartScale = new Vector2(60, 52);
|
||||
static float ScaleFactorTengoku = 1/46f;
|
||||
static float ScaleFactorMania = 1/72f;
|
||||
|
||||
static float CameraOffset = 10;
|
||||
static float PeriodLow = 24/60f;
|
||||
static float PeriodHigh = 15/60f;
|
||||
|
||||
int noriMode = (int) KarateMan.NoriMode.None;
|
||||
|
||||
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void SetNoriMode(int mode, int startingNori = 0)
|
||||
{
|
||||
float scaleFactor = 0f;
|
||||
//clear all children of the holder
|
||||
foreach (Transform child in NoriHolder)
|
||||
{
|
||||
Destroy(child.gameObject);
|
||||
}
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case (int) KarateMan.NoriMode.Tengoku:
|
||||
MaxNori = 5;
|
||||
Nori = Mathf.Clamp(startingNori, 0, MaxNori);
|
||||
scaleFactor = ScaleFactorTengoku;
|
||||
break;
|
||||
case (int) KarateMan.NoriMode.Mania:
|
||||
MaxNori = 10;
|
||||
Nori = Mathf.Clamp(startingNori, 0, MaxNori);
|
||||
scaleFactor = ScaleFactorMania;
|
||||
break;
|
||||
default:
|
||||
MaxNori = 0;
|
||||
Nori = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
NoriHeartAnimators = new Animator[MaxNori];
|
||||
NoriHeartMaterials = new Material[MaxNori];
|
||||
noriMode = mode;
|
||||
|
||||
if (mode == (int) KarateMan.NoriMode.None) return;
|
||||
|
||||
//add the label?
|
||||
|
||||
for (int i = 0; i < MaxNori; i++)
|
||||
{
|
||||
GameObject h = GameObject.Instantiate(NoriHeart, NoriHolder);
|
||||
h.SetActive(true);
|
||||
|
||||
Material m_Material = Instantiate(NoriMaterial);
|
||||
NoriHeartMaterials[i] = m_Material;
|
||||
h.GetComponent<Image>().material = m_Material;
|
||||
|
||||
RectTransform hrect = h.GetComponent<RectTransform>();
|
||||
hrect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, HeartScale.x * scaleFactor);
|
||||
hrect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, HeartScale.y * scaleFactor);
|
||||
|
||||
NoriHeartAnimators[i] = h.GetComponent<Animator>();
|
||||
NoriHeartAnimators[i].Play(i <= (int) (startingNori - 1) ? "NoriFull" : "NoriNone", -1, (Time.time * PeriodLow) % 1f);
|
||||
}
|
||||
}
|
||||
|
||||
public void DoHit()
|
||||
{
|
||||
if (noriMode == (int) KarateMan.NoriMode.None) return;
|
||||
if (noriMode == (int) KarateMan.NoriMode.Tengoku)
|
||||
{
|
||||
if (Nori >= MaxNori) return;
|
||||
Nori += 1;
|
||||
NoriHeartAnimators[(int) Nori - 1].Play("NoriFull", -1, (Time.time * PeriodHigh) % 1f);
|
||||
}
|
||||
}
|
||||
|
||||
public void DoNG()
|
||||
{
|
||||
if (noriMode == (int) KarateMan.NoriMode.None) return;
|
||||
if (noriMode == (int) KarateMan.NoriMode.Tengoku)
|
||||
{
|
||||
if (Nori <= 0) return;
|
||||
Nori -= 1;
|
||||
NoriHeartAnimators[(int) Nori].Play("NoriNone", -1, (Time.time * PeriodLow) % 1f);
|
||||
}
|
||||
}
|
||||
|
||||
public void DoThrough()
|
||||
{
|
||||
if (noriMode == (int) KarateMan.NoriMode.None) return;
|
||||
if (noriMode == (int) KarateMan.NoriMode.Tengoku)
|
||||
{
|
||||
Nori = 0;
|
||||
foreach (Animator anim in NoriHeartAnimators)
|
||||
{
|
||||
anim.Play("NoriNone", -1, (Time.time * PeriodLow) % 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
Transform target = GameCamera.instance.transform;
|
||||
|
||||
Vector3 displacement = target.forward * CameraOffset;
|
||||
transform.position = target.position + displacement;
|
||||
transform.rotation = target.rotation;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user