When targeting it doesn't change the different mobs health
In the tutorials of BergZerg Arcade, he can make the player select targets of which shows their individual health. I have tried his method but cannot get the same results. Here are the scripts used and thank you heaps if you can solve this. Btw no errors pop up.
TARGETING SCRIPT using UnityEngine; using System.Collections; using System.Collections.Generic;
public class Targetting : MonoBehaviour { public List targets; public Transform selectedTarget;
private Transform myTransform;
// Use this for initialization
void Start () {
targets = new List<Transform> ();
selectedTarget = null;
myTransform = transform;
AddAllEnemies ();
}
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 SortTargetByDistance()
{
targets.Sort(delegate(Transform t1, Transform t2){
return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
});
}
private void TargetEnemy()
{
if (selectedTarget == null) {
SortTargetByDistance ();
selectedTarget = targets [0];
} else {
int index = targets.IndexOf (selectedTarget);
if (index < targets.Count - 1) {
index++;
}
else
{
index = 0;
}
DeselectTarget ();
selectedTarget = targets[index];
}
SelectTarget ();
}
private void SelectTarget(){
Transform name = selectedTarget.FindChild ("Name");
name.GetComponent<TextMesh>().text = selectedTarget.GetComponent<Mob>().Name;
name.GetComponent<MeshRenderer>().enabled = true;
selectedTarget.GetComponent<Mob>().DisplayHealth();
}
private void DeselectTarget()
{
selectedTarget.FindChild ("Name").GetComponent<MeshRenderer> ().enabled = false;
selectedTarget = null;
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown (KeyCode.Tab)) {
TargetEnemy ();
}
}
}
MOB SCRIPT
using UnityEngine; using System.Collections;
public class Mob : BaseCharacter {
public int curHealth;
public int maxHealth;
void Start () {
GetPrimaryAttribute ((int)AttributeName.Strength).BaseValue = 100;
GetVital ((int)VitalName.Health).Update ();
Name = "Evil Cube Lv1";
}
public void DisplayHealth(){
Messenger<int, int>.Broadcast ("mob health update", curHealth, maxHealth);
}
}
VITALBAR SCRIPT
using UnityEngine; using System.Collections;
public class VitalBar : MonoBehaviour {
private int _maxBarLength;
private int _curBarLength;
public bool _isPlayerHealthBar;
private GUITexture _display;
// Use this for initialization
void Start () {
_isPlayerHealthBar = true;
_display = gameObject.GetComponent<GUITexture> ();
_maxBarLength = (int)_display.pixelInset.width;
OnEnable ();
}
// Update is called once per frame
void Update () {
}
public void OnEnable(){
if (_isPlayerHealthBar)
Messenger<int, int>.AddListener ("player health update", OnChangeHealthBarSize);
else
Messenger<int, int>.AddListener ("mob health update", OnChangeHealthBarSize);
}
public void OnDisable(){
if (_isPlayerHealthBar)
Messenger<int, int>.RemoveListener ("player health update", OnChangeHealthBarSize);
else
Messenger<int, int>.RemoveListener ("mob health update", OnChangeHealthBarSize);
}
public void OnChangeHealthBarSize(int curHealth, int maxHealth){
// Debug.Log ("We heard an event: curHealth = " + curHealth + " - maxHealth = " + maxHealth); _curBarLength = (int)((curHealth / (float) maxHealth) * _maxBarLength);
// _display.pixelInset = new Rect(_display.pixelInset.x, _display.pixelInset.y, _curBarLength, _display.pixelInset.height); _display.pixelInset = CalculatePosition();
}
public void SetPlayerHealthBar(bool b) {
_isPlayerHealthBar = b;
}
private Rect CalculatePosition (){
float yPos = _display.pixelInset.y / 2 - 10;
if (!_isPlayerHealthBar) {
float xPos = (_maxBarLength - _curBarLength) - (_maxBarLength / 4 + 10);
return new Rect (xPos, yPos, _curBarLength, _display.pixelInset.height);
}
return new Rect (_display.pixelInset.x, yPos, _curBarLength, _display.pixelInset.height);
}
}
Thank you so much !!!
Your answer