Newer
Older
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine;
using TMPro;
public class AnimateCircle : MonoBehaviour
{
BlockObjectClass blockObjectClass;
float inhalePeriod = 0f;
float exhalePeriod = 0f;
float maxRuntime = 0f;
private bool is_inhale; /* 1 if inhalation, 0 if exhaltion */
private Vector3 scaleDiff = new Vector3(0.9f, 0.9f, 0.0f);
private Vector3 originalScale = new Vector3(0.1f, 0.1f, 0.0f);
private Vector3 finalScale = new Vector3(0.98f, 0.98f, 0.0f);
private Vector3 inhaleVelocity = new Vector3(0.0f, 0.0f, 0.0f);
private Vector3 exhaleVelocity = new Vector3(0.0f, 0.0f, 0.0f);
private Transform parentTransform;
private Vector3 parentCentrePosition = new Vector3(0f, 0f, 0f);
private Vector3 parentOffsetPosition;
// Start is called before the first frame update
void Start()
{
is_inhale = true;
originalScale = this.transform.localScale;
scaleDiff = finalScale - originalScale;
parentTransform = this.GetComponentInParent<Transform>().parent.transform;
parentOffsetPosition = parentTransform.position;
}
// Update is called once per frame
void Update()
{
if(is_inhale)
{
UpdateInhaleScale();
}
else
{
UpdateExhaleScale();
}
UpdateRespState();
UpdateRuntimeState();
runtime += Time.deltaTime;
}
public void ResetAndRun()
{
this.enabled = true;
StateReset();
}
public void MoveToCentre()
{
parentTransform.position = parentCentrePosition;
}
public void MoveToOffset()
{
parentTransform.position = parentOffsetPosition;
}
private void OnDisable()
{
StateReset();
}
void StateReset()
{
SetPeriod();
SetMaxRuntime();
inhaleVelocity = scaleDiff / inhalePeriod;
exhaleVelocity = scaleDiff / exhalePeriod;
this.transform.localScale = originalScale;
blockObjectClass = blockObj.GetComponent<BlockObjectClass>();
inhalePeriod = blockObjectClass.InhalePeriod;
exhalePeriod = blockObjectClass.ExhalePeriod;
blockObjectClass = blockObj.GetComponent<BlockObjectClass>();
maxRuntime = blockObjectClass.MaxRuntime;
void UpdateInhaleScale()
{
float dt = Time.deltaTime;
Vector3 scale = this.transform.localScale;
this.transform.localScale = inhaleVelocity*dt + scale;
}
void UpdateExhaleScale()
{
float dt = Time.deltaTime;
Vector3 scale = this.transform.localScale;
this.transform.localScale = -exhaleVelocity*dt + scale;
}
void UpdateRespState()
{
Vector3 scale = this.transform.localScale;
if(scale.x >= finalScale.x | scale.x <= originalScale.x)
this.transform.localScale = finalScale;
this.transform.localScale = originalScale;
{
StateReset();
this.enabled = false;
}
}