goobatog@yahoo.co.uk
This code is used for basic sprite animationsZachhe
csharp
4 years ago
8.5 kB
12
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Aron : MonoBehaviour
{
public static Aron Instance;
private List<SpriteRendClass> SRPSList;
public bool[] ChumBools;
public int ChumInt;
void Awake()
{
Instance = this;
SRPSList = new List<SpriteRendClass>();
ChumBools = new bool[1000];
}
private SpriteRendClass AddSRPSClassToTheList(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
{
SpriteRendClass SRPSC = new SpriteRendClass();
if(IsAnimSpeedTotalTime)
{
AnimSpeed /= AnimatingSprites.Length;
}
SRPSC.SetValues(SR, AnimSpeed, AnimatingSprites, FinishingSprite);
SRPSList.Add(SRPSC);
return SRPSC;
}
private int SortChum()
{
ChumInt++;
if(ChumInt >= ChumBools.Length)
{
ChumInt = 0;
}
ChumBools[ChumInt] = true;
return ChumInt;
}
public void CancelChumBool(int chumInt)
{
ChumBools[chumInt] = false;
}
public int PlayForwardOnce( SpriteRenderer SR, Sprite [] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
{
CancelAnimation(SR);
SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed,IsAnimSpeedTotalTime);
int Chum = SortChum();
StartCoroutine(PlayAnimForwardOnceRoutine(SRPSC, Chum));
return Chum;
}
private IEnumerator PlayAnimForwardOnceRoutine(SpriteRendClass SRClass, int Chum)
{
float time = 0;
int SpriteFrame = 0;
bool StopAnimating = false;
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
while(ChumBools[Chum] && !StopAnimating && SRClass.SR != null)
{
time += Time.deltaTime;
while(time >= SRClass.AnimSpeed)
{
time -= SRClass.AnimSpeed;
SpriteFrame++;
if (SpriteFrame >= SRClass.AnimatingSprites.Length)
{
StopAnimating = true;
}
else
{
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
}
}
yield return null;
}
if (SRClass.FinishingSprite != null && SRClass.SR != null)
{
SRClass.SR.sprite = SRClass.FinishingSprite;
}
ChumBools[Chum] = false;
SRPSList.Remove(SRClass);
}
public int PlayBackwardsOnce(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
{
CancelAnimation(SR);
SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed,IsAnimSpeedTotalTime);
int Chum = SortChum();
StartCoroutine(PlayAnimBackwardsOnceRoutine(SRPSC, Chum));
return Chum;
}
private IEnumerator PlayAnimBackwardsOnceRoutine(SpriteRendClass SRClass, int Chum)
{
float time = 0;
int SpriteFrame = SRClass.AnimatingSprites.Length - 1;
bool StopAnimating = false;
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
while (ChumBools[Chum] && !StopAnimating && SRClass.SR != null)
{
time += Time.deltaTime;
while (time >= SRClass.AnimSpeed)
{
time -= SRClass.AnimSpeed;
SpriteFrame--;
if (SpriteFrame < 0)
{
StopAnimating = true;
}
else
{
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
}
}
yield return null;
}
if (SRClass.FinishingSprite != null && SRClass.SR != null)
{
SRClass.SR.sprite = SRClass.FinishingSprite;
}
ChumBools[Chum] = false;
SRPSList.Remove(SRClass);
}
public int PlayPingPongOnce(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed, bool IsAnimSpeedTotalTime = false)
{
CancelAnimation(SR);
SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed,IsAnimSpeedTotalTime);
int Chum = SortChum();
StartCoroutine(PlayPingPongOnceRoutine(SRPSC, Chum));
return Chum;
}
private IEnumerator PlayPingPongOnceRoutine(SpriteRendClass SRClass, int Chum)
{
float time = 0;
int SpriteFrame = 0;
bool StopAnimating = false;
bool GoingUp = true;
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
while (ChumBools[Chum] && !StopAnimating && SRClass.SR != null)
{
time += Time.deltaTime;
while (time >= SRClass.AnimSpeed)
{
time -= SRClass.AnimSpeed;
if (GoingUp)
{
SpriteFrame++;
if (SpriteFrame >= SRClass.AnimatingSprites.Length)
{
GoingUp = false;
SpriteFrame = SRClass.AnimatingSprites.Length - 2;
}
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
}
else
{
SpriteFrame--;
if (SpriteFrame < 0)
{
SpriteFrame = 0;
StopAnimating = true;
}
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
}
}
yield return null;
}
if (SRClass.FinishingSprite != null && SRClass.SR != null)
{
SRClass.SR.sprite = SRClass.FinishingSprite;
}
ChumBools[Chum] = false;
SRPSList.Remove(SRClass);
}
public int PlayForwardContinuosly(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed)
{
CancelAnimation(SR);
SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed);
int Chum = SortChum();
StartCoroutine(PlayForwardContinuouslyRoutine(SRPSC, Chum));
return Chum;
}
private IEnumerator PlayForwardContinuouslyRoutine(SpriteRendClass SRClass, int Chum)
{
float time = 0;
int SpriteFrame = 0;
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
while (ChumBools[Chum] && SRClass.SR != null)
{
time += Time.deltaTime;
while (time >= SRClass.AnimSpeed)
{
time -= SRClass.AnimSpeed;
SpriteFrame++;
if (SpriteFrame >= SRClass.AnimatingSprites.Length)
{
SpriteFrame = 0;
}
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
}
yield return null;
}
if (SRClass.FinishingSprite != null && SRClass.SR != null)
{
SRClass.SR.sprite = SRClass.FinishingSprite;
}
//ChumBools[Chum] = false;
SRPSList.Remove(SRClass);
}
public int PlayPingPongContinuosly(SpriteRenderer SR, Sprite[] AnimatingSprites, Sprite FinishingSprite, float AnimSpeed)
{
CancelAnimation(SR);
SpriteRendClass SRPSC = AddSRPSClassToTheList(SR, AnimatingSprites, FinishingSprite, AnimSpeed);
int Chum = SortChum();
StartCoroutine(PlayPingPongContinuouslyRoutine(SRPSC, Chum));
return Chum;
}
private IEnumerator PlayPingPongContinuouslyRoutine(SpriteRendClass SRClass, int Chum)
{
float time = 0;
int SpriteFrame = 0;
bool GoingUp = true;
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
while (ChumBools[Chum] && SRClass.SR != null)
{
time += Time.deltaTime;
while (time >= SRClass.AnimSpeed)
{
time -= SRClass.AnimSpeed;
if (GoingUp)
{
SpriteFrame++;
if (SpriteFrame >= SRClass.AnimatingSprites.Length)
{
GoingUp = false;
SpriteFrame = SRClass.AnimatingSprites.Length - 2;
}
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
}
else
{
SpriteFrame--;
if (SpriteFrame < 0)
{
GoingUp = true;
SpriteFrame = 1;
}
SRClass.SR.sprite = SRClass.AnimatingSprites[SpriteFrame];
}
}
yield return null;
}
if (SRClass.FinishingSprite != null && SRClass.SR != null)
{
SRClass.SR.sprite = SRClass.FinishingSprite;
}
//ChumBools[Chum] = false;
SRPSList.Remove(SRClass);
}
public void CancelAnimation(SpriteRenderer SR)
{
for(int i = 0; i < SRPSList.Count; i++)
{
if(SR == SRPSList[i].SR)
{
SRPSList[i].SR = null;
break;
}
}
}
}
public class SpriteRendClass
{
//private GameObject GO;
public SpriteRenderer SR;
public float AnimSpeed;
public Sprite[] AnimatingSprites;
public Sprite FinishingSprite;
public void SetValues(SpriteRenderer spriteRenderer,float animSpeed, Sprite [] animatingSprites, Sprite finishingSprite)
{
//GO = gameObject;
SR = spriteRenderer;
AnimSpeed = animSpeed;
AnimatingSprites = animatingSprites;
FinishingSprite = finishingSprite;
}
}
Editor is loading...