Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- [RequireComponent(typeof(NodeController))]
- public class AnimalScheduler : NPCScheduler {
- [SerializeField] float idleTime;
- private List<Node> listNode = new List<Node>();
- float updateTick;
- void Start(){
- base.Start();
- }
- void Update () {
- elapsedTime += GameTime.deltaTime;
- OldTime += GameTime.deltaTime;
- if(elapsedTime > updateTick){
- updateTick = elapsedTime + 0.01f;
- switch (state){
- case State.IDLE:
- if(OldTime > idleTime){
- OldTime = 0;
- if(nodeManager.listNode.Count > 0){
- Node node = RandomNodeICanSee();
- if(node != null){
- scheduledTargets.Add(node.GetTransform());
- SetTarget(node.GetTransform());
- }
- }
- }
- break;
- case State.MOVING:
- OldTime = elapsedTime + 0.01f;
- if (onNode){
- onNode = false;
- if (route.Count > 0){
- currNode = this.route[0].position;
- }
- } else{
- MoveToward();
- }
- break;
- }
- }
- }
- Node RandomNodeICanSee(){
- listNode.Clear();
- for(int x=0; x<nodeManager.listNode.Count; x++){
- Node neighbor = nodeManager.listNode[x];
- if(neighbor.GetTransform() == transform) {break;}
- Vector3 offset = (neighbor.GetPos() - transform.position).normalized;
- float distance = Vector3.Distance(transform.position+offset, neighbor.GetPos());
- RaycastHit2D hit = Physics2D.Raycast(transform.position+offset, neighbor.GetPos() - transform.position,distance);
- if(hit.collider != null){
- if(hit.transform == neighbor.GetTransform() && neighbor.locationId == LocationID.none){
- Debug.DrawLine(transform.position+offset, neighbor.GetPos(), Color.white, 10.1f);
- listNode.Add(neighbor);
- }
- }
- }
- return (listNode.Count > 0)? listNode[Random.Range(0,listNode.Count)] : null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement