Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class StationDroneBehavior : MonoBehaviour
- {
- public float moveSpeed;
- public float rotSpeed;
- public float minRndRange;
- public float maxRndRange;
- public float droneAccRange;
- public Vector2[] wayPoints;
- public Vector2[] swarmPoints;
- public Vector2[] targetPoints;
- private Vector2 currentTrgtPos;
- public GameObject targetStation;
- public GameObject target;
- public string droneTarget;
- public int pointID;
- public int LogicID;
- private float distToTargetPoint;
- private bool genAtkPoints;
- void Start()
- {
- GenerateRndPoints(targetStation.transform.position,swarmPoints);
- }
- void GenerateAtkPoints(GameObject target, Vector2[] targetPoints)
- {
- targetPoints[0] = this.transform.position;
- targetPoints[1] = target.transform.position;
- }
- void GenerateRndPoints(Vector2 targetPos,Vector2 [] waypoint)
- {
- while (pointID < waypoint.Length)
- {
- waypoint[pointID] = new Vector2(targetPos.x + Random.Range(minRndRange,maxRndRange), targetPos.y + Random.Range(minRndRange, maxRndRange));
- pointID++;
- }
- pointID = 0;
- }
- void Update()
- {
- switch (LogicID)
- {
- case 0:
- MoveTo(wayPoints[pointID], wayPoints);
- FaceTarget(wayPoints[pointID]);
- break;
- case 1:
- MoveTo(swarmPoints[pointID],swarmPoints);
- FaceTarget(swarmPoints[pointID]);
- break;
- case 2:
- MoveTo(targetPoints[pointID], targetPoints);
- FaceTarget(targetPoints[pointID]);
- break;
- }
- if((target != null) && (currentTrgtPos != (Vector2)target.transform.position))
- {
- Debug.Log("Chasing Enemy");
- GenerateAtkPoints(target, targetPoints);
- GenerateRndPoints(target.transform.position, swarmPoints);
- currentTrgtPos = target.transform.position;
- LogicID = 2;
- pointID = 0;
- }
- }
- void MoveTo(Vector2 targetPos,Vector2[] waypoint)
- {
- DistanceCheck(targetPos);
- if (distToTargetPoint > droneAccRange)
- {
- this.transform.Translate(moveSpeed * Time.deltaTime,0,0);
- }
- else if (distToTargetPoint < droneAccRange)
- {
- if (pointID < waypoint.Length - 1)
- {
- pointID++;
- }
- else if (pointID >= waypoint.Length - 1)
- {
- switch (LogicID)
- {
- case 0:
- LogicID = 1;
- pointID = 0;
- break;
- case 1:
- pointID = 0;
- break;
- case 2:
- LogicID = 1;
- pointID = 0;
- break;
- }
- }
- }
- }
- void DistanceCheck(Vector2 targetPos)
- {
- distToTargetPoint = Vector2.Distance(this.transform.position, targetPos);
- }
- void FaceTarget(Vector2 targetPos)
- {
- //rotate towards target code
- Vector2 direction = targetPos - (Vector2)transform.position;
- float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
- Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
- transform.rotation = Quaternion.Slerp(transform.rotation, rotation, rotSpeed * Time.deltaTime);
- }
- void OnTriggerEnter2D(Collider2D col)
- {
- if(target == null && col.CompareTag(droneTarget))
- {
- Debug.Log("Encountered Enemy");
- target = col.gameObject;
- currentTrgtPos = target.transform.position;
- GenerateAtkPoints(target,targetPoints);
- GenerateRndPoints(target.transform.position, swarmPoints);
- LogicID = 2;
- pointID = 0;
- }
- }
- void OnTriggerExit2D(Collider2D col)
- {
- if (target != null && col.CompareTag(droneTarget))
- {
- Debug.Log("Leashed");
- target = null;
- GenerateRndPoints(targetStation.transform.position, swarmPoints);
- LogicID = 0;
- pointID = 1;
- }
- }
- }
Add Comment
Please, Sign In to add comment