- Home /
Burgzergarcade VitalBar.cs Problem
I followed burgergarcade's tutorial for the VitalBar.cs, but I have a problem. When ever I target a Mob Slug, my players health turns into the mobs health so when I target a mob I get his health status... I've looked it over an couldn't figure out what's wrong.
Here is my VitalBar.cs
using UnityEngine;
using System.Collections;
public class VitalBar : MonoBehaviour {
public bool _isPlayerHealthBar; //this boolean value tells us if this is the player health bar or the mob health bar
private int _maxBarLength; //this is how large the vital bar can be if the player is at 100% health
private int _curBarLength; //this is the current length of the vital bar
private GUITexture _display;
void Awake(){
_display = gameObject.GetComponent<GUITexture>();
}
// Use this for initialization
void Start () {
// _isPlayerHealthBar = true;
_maxBarLength = (int)_display.pixelInset.width;
_curBarLength = _maxBarLength;
_display.pixelInset = CalculatePosition();
OnEnable();
}
// Update is called once per frame
void Update () {
}
//this method is called when the gameobject is enabled
public void OnEnable(){
if(_isPlayerHealthBar)
Messenger<int, int>.AddListener("player health update", OnChangeHealthBarSize);
else
ToggleDisplay(false);
Messenger<int, int>.AddListener("mob health update", OnChangeHealthBarSize);
Messenger<bool>.AddListener("show mob vitalbars", ToggleDisplay);
}
//this method is called when the gameobject is disabled
public void OnDisable(){
if(_isPlayerHealthBar)
Messenger<int, int>.RemoveListener("player health update", OnChangeHealthBarSize);
else
Messenger<int, int>.RemoveListener("mob health update", OnChangeHealthBarSize);
Messenger<bool>.RemoveListener("show mob vitalbars", ToggleDisplay);
}
//this method will calculate the total size of the health bar in relation to % of health the target has left
public void OnChangeHealthBarSize(int curHealth, int maxHealth){
// Debug.Log("We heard and event: curHealth = " + curHealth + " - maxHealth = " + maxHealth);
_curBarLength = (int)((curHealth / (float)maxHealth) * _maxBarLength); //this calculates the current bar length based on the player cur health%
_display.pixelInset = CalculatePosition();
}
//setting the healthbar to the player or mob
public void SetPlayerHealthBar(bool b){
_isPlayerHealthBar = b;
}
private Rect CalculatePosition(){
float yPos = _display.pixelInset.y / 2 - 15;
if(!_isPlayerHealthBar){
float xPos = (_maxBarLength - _curBarLength) - (_maxBarLength / 4 + 15);
return new Rect(xPos, yPos, _curBarLength, _display.pixelInset.height);
}
return new Rect(_display.pixelInset.x, yPos, _curBarLength, _display.pixelInset.height);
}
private void ToggleDisplay(bool show){
_display.enabled = show;
}
}
If this helps here is my TargetMob.cs script:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class TargetMob : MonoBehaviour {
public List<Transform> 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 SortTargetsByDistance(){//selects nearest enemy as target
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(targets.Count == 0)
AddAllEnemies();
if(targets.Count > 0){
if(selectedTarget == null){
SortTargetsByDistance();
selectedTarget = targets[0];
}else{
int index = targets.IndexOf(selectedTarget); //cycles through index of enemy list
if (index < targets.Count - 1){
index++;
}else{
index = 0;
}
DeselectTarget();
selectedTarget = targets[index];
}
SelectTarget();
}
}
private void SelectTarget(){ //colors selected target
Transform name = selectedTarget.FindChild("Name");
if(name == null){
Debug.LogError("Could not find the name on " + selectedTarget.name);
return;
}
name.GetComponent<TextMesh>().text = selectedTarget.GetComponent<Mob>().Name;
name.GetComponent<MeshRenderer>().enabled = true;
selectedTarget.GetComponent<Mob>().DisplayHealth();
Messenger<bool>.Broadcast("show mob vitalbars", true);
}
private void DeselectTarget(){ // uncolors previously selected targets
selectedTarget.FindChild("Name").GetComponent<MeshRenderer>().enabled = false;
selectedTarget = null;
Messenger<bool>.Broadcast("show mob vitalbars", true);
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Tab)){
TargetEnemy();
}
}
}
Let me know if you need more information
Thanks in Advance
Answer by $$anonymous$$ · Mar 20, 2013 at 08:02 AM
i have similar problem- my player bar on the left decreases its size to the right, my mob on the right decreases its size to the left, ther the wrong way round
Your answer
Follow this Question
Related Questions
Why don't my send messages work? 2 Answers
Instantiation array of enemies, c# ? 2 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Simple question about targetting 0 Answers