NightFox

Unity3d GUI - Live BAR

May 11th, 2013
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.45 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class GuiLifeBar : MonoBehaviour {
  5.    
  6.     // Variables de control
  7.     public bool flagHealth = false;
  8.    
  9.     // Variables para la barra de vida
  10.     public Texture2D txHealthBarBase = null;        // Barra de vida: Base
  11.     public Texture2D txHealthBarIcon = null;        // Barra de vida: Icono
  12.     public Texture2D[] txHealthBarLed;              // Barra de vida: Elemento marcador (Array)
  13.     public int healthBarLenght = 0;                 // Numero de elementos de la barra de vida (longitud)
  14.     public int healthBarSpace = 0;                  // Distancia entre elementos de la barra de vida
  15.     public int healthTotal = 0;                     // Total de vida
  16.    
  17.    
  18.    
  19.     // Al crearse el objeto...
  20.     void Start () {
  21.        
  22.         // Inicializa la Gui
  23.         InitGui();
  24.    
  25.     }
  26.    
  27.    
  28.    
  29.     // Main GUI
  30.     void OnGUI() {
  31.        
  32.         // Gui de la energia
  33.         if (flagHealth) DrawGui();
  34.        
  35.     }
  36.  
  37.    
  38.    
  39.     // Inicializaciones
  40.     void InitGui() {
  41.        
  42.         // Variable de uso general
  43.         int i = 0;
  44.        
  45.         // Captura de errores de asignacion
  46.         if (txHealthBarBase == null) Debug.LogError("<txHealthBarBase> No asignado.");
  47.         if (txHealthBarIcon == null) Debug.LogError("<txHealthBarIcon> No asignado.");
  48.         for (i = 0; i < txHealthBarLed.Length; i ++) {
  49.             if (txHealthBarLed[i] == null) Debug.LogError("<txHealthBarLed["+ i +"]> No asignado.");
  50.         }
  51.        
  52.     }
  53.    
  54.    
  55.     // Dibuja la Barra de energia
  56.     void DrawGui() {
  57.  
  58.         // Variables internas
  59.         int i = 0;                                                                      // Indice del bucle
  60.         int tx = 0;                                                                     // ID de textura a mostrar
  61.         int posX = 0;                                                                   // Posicion original del dibujado de la barra (X)
  62.         int fullBlocks = 0;                                                             // nº total de bloques llenos
  63.         float halfBlocks = 0;                                                           // nº de fracciones llenas del bloque a medio completar
  64.         float blockContent = ((float)healthTotal / (float)healthBarLenght);             // nº de fracciones que componen cada bloque lleno
  65.         int lastTx = (txHealthBarLed.Length - 1);                                       // nº de la ultima textura (ID mas alto)
  66.        
  67.         // Dibuja todos los elementos de la GUI de la barra de energia en un mismo grupo
  68.         GUI.BeginGroup(new Rect(0,0, txHealthBarBase.width, txHealthBarBase.height));
  69.             // Fondo de la barra
  70.             GUI.DrawTexture(new Rect(0, 0, txHealthBarBase.width, txHealthBarBase.height), txHealthBarBase, ScaleMode.ScaleToFit, true, 0);
  71.             // Icono de energia
  72.             GUI.DrawTexture(new Rect(4, 8, txHealthBarIcon.width, txHealthBarIcon.height), txHealthBarIcon, ScaleMode.ScaleToFit, true, 0);
  73.             // Dibuja los elementos de la barra de vida
  74.             posX = 86;  // Posicion inicial de la barra
  75.             fullBlocks = (int)((healthBarLenght * Player.health) / healthTotal);    // Calcula cuantos bloques llenos
  76.             for (i = 0; i < healthBarLenght; i ++) {
  77.                 // Si el player tiene vida...
  78.                 if (Player.health > 0) {
  79.                     // Si este segmento esta lleno del todo, usa la textura adecuada
  80.                     if (i < fullBlocks) {
  81.                         tx = lastTx;
  82.                     // Si este segmento esta parcialmente lleno del todo, usa la textura adecuada
  83.                     } else if (i == fullBlocks){
  84.                         halfBlocks = (Player.health - (i * blockContent));
  85.                         tx = (int)((halfBlocks * lastTx) / blockContent);
  86.                     // Si este segmento esta vacio del todo, usa la textura adecuada
  87.                     } else {
  88.                         tx = 0;
  89.                     }
  90.                 } else {
  91.                     tx = 0;
  92.                 }
  93.                 // Dibuja todos los elementos de la barra
  94.                 GUI.DrawTexture(new Rect(posX, 8, txHealthBarLed[tx].width, txHealthBarLed[tx].height), txHealthBarLed[tx], ScaleMode.ScaleToFit, true, 0);
  95.                 posX += healthBarSpace;
  96.             }
  97.         GUI.EndGroup();
  98.  
  99.     }
  100.    
  101.    
  102.        
  103. }
Add Comment
Please, Sign In to add comment