You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.3 KiB
121 lines
2.3 KiB
#if UNITY_EDITOR |
|
using UnityEditor; |
|
#endif |
|
using UnityEngine; |
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
|
|
namespace Fungus |
|
{ |
|
|
|
public class Sequence : MonoBehaviour |
|
{ |
|
public string titleText; |
|
|
|
[HideInInspector] |
|
public Rect nodeRect = new Rect(10, 10, 100, 100); |
|
|
|
[System.NonSerialized] |
|
public SequenceController sequenceController; |
|
|
|
[System.NonSerialized] |
|
public FungusCommand activeCommand; |
|
|
|
public virtual void Start() |
|
{ |
|
// Populate sequenceController reference |
|
Transform parent = transform.parent; |
|
while (parent != null) |
|
{ |
|
sequenceController = parent.gameObject.GetComponent<SequenceController>(); |
|
if (sequenceController != null) |
|
{ |
|
break; |
|
} |
|
} |
|
} |
|
|
|
public bool HasError() |
|
{ |
|
FungusCommand[] commands = GetComponents<FungusCommand>(); |
|
foreach (FungusCommand command in commands) |
|
{ |
|
if (command.errorMessage.Length > 0) |
|
{ |
|
return true; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
|
|
public bool IsRunning() |
|
{ |
|
if (sequenceController == null || |
|
sequenceController.activeSequence == null) |
|
{ |
|
return false; |
|
} |
|
|
|
return (sequenceController.activeSequence == this); |
|
} |
|
|
|
public void ExecuteNextCommand(FungusCommand currentCommand = null) |
|
{ |
|
activeCommand = null; |
|
FungusCommand nextCommand = null; |
|
|
|
bool executeNext = (currentCommand == null); |
|
FungusCommand[] commands = GetComponents<FungusCommand>(); |
|
foreach (FungusCommand command in commands) |
|
{ |
|
if (command == currentCommand) |
|
{ |
|
executeNext = true; |
|
} |
|
else if (executeNext) |
|
{ |
|
nextCommand = command; |
|
break; |
|
} |
|
} |
|
|
|
if (nextCommand == null) |
|
{ |
|
Finish(); |
|
} |
|
else |
|
{ |
|
if (sequenceController.stepTime == 0f) |
|
{ |
|
activeCommand = nextCommand; |
|
nextCommand.Execute(); |
|
} |
|
else |
|
{ |
|
StartCoroutine(ExecuteAfterDelay(nextCommand, sequenceController.stepTime)); |
|
} |
|
} |
|
|
|
} |
|
|
|
IEnumerator ExecuteAfterDelay(FungusCommand command, float delay) |
|
{ |
|
activeCommand = command; |
|
yield return new WaitForSeconds(delay); |
|
command.Execute(); |
|
} |
|
|
|
public void Finish() |
|
{ |
|
activeCommand = null; |
|
sequenceController.activeSequence = null; |
|
|
|
// No more commands to run in current sequence |
|
#if UNITY_EDITOR |
|
Selection.activeGameObject = sequenceController.gameObject; |
|
#endif |
|
} |
|
} |
|
}
|
|
|