123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- namespace Pathfinding.Examples {
-
- [RequireComponent(typeof(Animator))]
- [RequireComponent(typeof(SingleNodeBlocker))]
- [HelpURL("http://arongranberg.com/astar/documentation/stable/class_pathfinding_1_1_examples_1_1_turn_based_door.php")]
- public class TurnBasedDoor : MonoBehaviour {
- Animator animator;
- SingleNodeBlocker blocker;
- bool open;
- void Awake () {
- animator = GetComponent<Animator>();
- blocker = GetComponent<SingleNodeBlocker>();
- }
- void Start () {
-
- blocker.BlockAtCurrentPosition();
- animator.CrossFade("close", 0.2f);
- }
- public void Close () {
- StartCoroutine(WaitAndClose());
- }
- IEnumerator WaitAndClose () {
- var selector = new List<SingleNodeBlocker>() { blocker };
- var node = AstarPath.active.GetNearest(transform.position).node;
-
-
-
- if (blocker.manager.NodeContainsAnyExcept(node, selector)) {
-
- animator.CrossFade("blocked", 0.2f);
- }
- while (blocker.manager.NodeContainsAnyExcept(node, selector)) {
- yield return null;
- }
- open = false;
- animator.CrossFade("close", 0.2f);
- blocker.BlockAtCurrentPosition();
- }
- public void Open () {
-
- StopAllCoroutines();
-
- animator.CrossFade("open", 0.2f);
- open = true;
-
- blocker.Unblock();
- }
- public void Toggle () {
- if (open) {
- Close();
- } else {
- Open();
- }
- }
- }
- }
|