added a list for some AI targeting, but now my AI wont move. AI’s be stingy…
Brief description: the AI targets the enemy, but wont use the parameters for its move function anymore.
I think its because the list has Transform components in it, but the move parameters call for “goul.position”. unless thats the same thing >.>
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Gouloriginal1 : MonoBehaviour {
public Enemy2D enemy2D;
public Transform target;
public Transform player;
public int moveSpeed;
private Transform goul;
public int idleDistance = 1;
public int enemyMaxDistance = 20;
public int enemyMinDistance = 2;
//attack vars
public float meleeRange = 2;
float attackRate = 1f;
float coolDown = 1;
public int goulDamage = 1;
//targeting vars
public List<Transform> targets;
public Transform selectedTarget;
private Transform bleh;
//12+ hours on this fucking script...
void Awake(){
goul = transform;
}
void Start () {
targets = new List<Transform> ();
selectedTarget = null;
goul = transform;
AddAllEnemies ();
//GameObject to = GameObject.FindGameObjectWithTag ("Enemy");
//target = to.transform;
GameObject po = GameObject.FindGameObjectWithTag("Player");
player = po.transform;
}
public void AddAllEnemies(){
GameObject[] go = GameObject.FindGameObjectsWithTag ("Enemy");
foreach(GameObject enemy in go)
AddTarget (enemy.transform);
}
public void AddTarget(Transform enemy){
targets.Add (enemy);
}
private void SortTargetsByDistance(){
if (selectedTarget != null) {
targets.Sort (delegate(Transform t1, Transform t2) {
return Vector3.Distance (t1.position, goul.position).CompareTo (Vector3.Distance (t2.position, goul.position));
});
}
}
private void TargetEnemy(){
if (selectedTarget == null) {
SortTargetsByDistance ();
selectedTarget = targets [0];
target = targets [0];
} else {int index = targets.IndexOf (selectedTarget);
if (index < targets.Count - 1) {
index++;
} else {
index = 0;
}
DeselectTarget ();
selectedTarget = targets [index];
}
SelectTarget ();
}
//indicates which target you have selected ( next 2)
private void SelectTarget(){
if (selectedTarget != null) {
selectedTarget.renderer.material.color = Color.green;
}
}
public void DeselectTarget(){
selectedTarget.renderer.material.color = Color.red;
selectedTarget = null;
}
void Update (){
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
if (selectedTarget == null) {
TargetEnemy ();
}
}
void FixedUpdate () {
if( target != null){
if (Vector3.Distance (goul.position, target.position) < meleeRange) {
if (Time.time >= coolDown){
GoulAttack();
coolDown = Time.time + attackRate;
}
}
}
if (target == null || Vector3.Distance (goul.position, target.position) > enemyMaxDistance){
if (Vector3.Distance (goul.position, player.position) > idleDistance) {
if (player.position.x < goul.position.x) {
goul.position -= goul.right * moveSpeed * Time.deltaTime; // player is left of goul, move left
} else if (player.position.x > goul.position.x) {
goul.position += goul.right * moveSpeed * Time.deltaTime; // player is right of goul, move right
}
}
}
else if (target != null) {
if (Vector3.Distance (player.position, target.position) < enemyMaxDistance) {
if (Vector3.Distance (goul.position, target.position) > enemyMinDistance) {
if (target.position.x < goul.position.x) {
goul.position -= goul.right * moveSpeed * Time.deltaTime; // target is left of goul, move left
} else if (target.position.x > goul.position.x) {
goul.position += goul.right * moveSpeed * Time.deltaTime; // target is right of goul, move right
}
}
}
}
Debug.DrawLine(player.position, goul.position, Color.yellow);
if (target != null) {
Debug.DrawLine (target.position, goul.position, Color.green);
}
}
private void GoulAttack(){
//find target with tag
//send damage call to enemy script
target.gameObject.SendMessage ("EnemyDamaged", goulDamage, SendMessageOptions.DontRequireReceiver);
}
}