Author: Not specified Language: text
Description: Not specified Timestamp: 2013-06-03 23:04:08 +0000
View raw paste Reply
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using Random = UnityEngine.Random;
  6.  
  7. [RequireComponent(typeof(Rigidbody))]
  8. [AddComponentMenu("Cosmic Storm/Targetable")]
  9. public class Targetable : MonoBehaviour {
  10.  
  11.         public static List<Targetable> all;
  12.         public string displayedName;
  13.         private Texture targetTexture, hudItemsTexture;
  14.         private Renderer usedRenderer;
  15.         private Dictionary<Ship, Vector3> previousVelocity; // FIXME need to delete nonexistent ships from this
  16.         private Damageable damageable;
  17.         private GuidedMissile guidedMissile;
  18.         public bool isTargeted { get; set; }
  19.         public bool isTargetedByTurret { get; set; }
  20.         public float hValue;
  21.         private int _team;
  22.         public int team { get; set; }
  23.         }
  24.  
  25.     public bool IsCloaked { get; set; }
  26.  
  27.         static Targetable() {
  28.                 all = new List<Targetable>();
  29.         }
  30.  
  31.         void Start() {
  32.                 targetTexture = Resources.Load("UITextures/Target") as Texture;
  33.                 hudItemsTexture = Resources.Load("UITextures/HUDItems") as Texture;
  34.                 usedRenderer = GetComponentInChildren<MeshRenderer>();
  35.                 damageable = GetComponent<Damageable>();
  36.                 guidedMissile = GetComponent<GuidedMissile>();
  37.                 if (hValue <= 0 || hValue >= 5) {
  38.                         hValue = 1;
  39.                         Debug.LogWarning(gameObject.name + " has an invalid hierarchy value!");
  40.                 }
  41.                 previousVelocity = new Dictionary<Ship, Vector3>();
  42.                 all.Add(this);
  43.         }
  44.  
  45.         void OnDestroy() {
  46.                 all.Remove(this);
  47.         }
  48.  
  49.         void OnGUI() {
  50.                 if (isCloaked || GlobalScripts.menuManager.isAnyMenuDisplayed)
  51.                         return;
  52.  
  53.                 Player localPlayer = GlobalScripts.gameState.localPlayer;
  54.                 Ship playerShip = (localPlayer == null) ? null : localPlayer.ship;
  55.  
  56.                 /* "WorldToScreenPoint may return a valid screen coordinate even when the object
  57.                  * is behind the camera; if you have this problem, check if renderer.isVisible is
  58.                  * true before rendering the window"
  59.                  * FIXME this is still kind of inaccurate for big objects.
  60.                  */
  61.                 if (playerShip != null) {
  62.                         if (playerShip.empTimer <= 3 && playerShip.gameObject != gameObject) {
  63.                                 if (usedRenderer.isVisible) {
  64.                                         Vector3 pos = Camera.mainCamera.WorldToScreenPoint(transform.position);
  65.                                         pos.y = Camera.mainCamera.pixelHeight - pos.y;
  66.  
  67.                                         float tx = 0.00f, ty = 1.0f - 0.25f * (team + 1);
  68.                                         if (isTargeted)
  69.                                                 tx = 0.25f;
  70.                                         GUI.DrawTextureWithTexCoords(new Rect(pos.x - 8, pos.y - 8, 16, 16), targetTexture, new Rect(tx, ty, 0.25f, 0.25f));
  71.                                         GUI.skin.GetStyle("Label").alignment = TextAnchor.LowerCenter;
  72.                                         GUI.Label(new Rect(pos.x - 100, pos.y - 48, 200, 48), displayedName);
  73.                                         if (isTargeted && damageable != null) {
  74.                                                 GUI.DrawTextureWithTexCoords(new Rect(pos.x - 16, pos.y - 16, 32, 2), hudItemsTexture,
  75.                                                         new Rect(0.0625f * (1 - (float)damageable.hp / damageable.maxHP), 0.5f, 0.0625f, 0.00390625f));
  76.                                         }
  77.                                         //GUI.Label(new Rect(pos.x - 100, pos.y + 12, 200, 20), string.Format("{0:F2}", targetScore));
  78.                                 }
  79.                                 else if (guidedMissile != null && !guidedMissile.wasEMPd && guidedMissile.target == playerShip.gameObject) {
  80.                                         Vector3 pos = Camera.mainCamera.WorldToScreenPoint(transform.position);
  81.                                         float px = pos.x - Screen.width / 2;
  82.                                         float py = Screen.height / 2 - pos.y;
  83.  
  84.                                         int side = 0;
  85.  
  86.                                         float y = Mathf.Sign(py) * Mathf.Min(Screen.height / 2, Mathf.Abs(Screen.width / 2 * py / px));
  87.                                         if (y > 0)
  88.                                                 y -= 16;
  89.                                         float x = Mathf.Sign(px) * Mathf.Min(Screen.width / 2, Mathf.Abs(Screen.height / 2 * px / py));
  90.                                         if (x > 0)
  91.                                                 x -= 16;
  92.  
  93.                                         float arrowAngle = Mathf.Abs(Mathf.Atan2(y, x));
  94.                                         arrowAngle = Mathf.Min(arrowAngle, Mathf.PI - arrowAngle);
  95.                                         float arrowOrientation = arrowAngle - Mathf.Atan2(Screen.height, Screen.width);
  96.  
  97.                                         if (arrowOrientation > 0)
  98.                                                 side = (y > 0) ? 2 : 0;
  99.                                         else
  100.                                                 side = (x > 0) ? 1 : 3;
  101.  
  102.                                         float tx = side * 0.03125f, ty = 0.5f - team * 0.03125f;
  103.                                         GUI.DrawTextureWithTexCoords(new Rect(x + Screen.width / 2, y + Screen.height / 2, 16, 16),
  104.                                                 hudItemsTexture, new Rect(tx, ty, 0.03125f, 0.03125f));
  105.                                 }
  106.                         }
  107.  
  108.                         Vector3 position = Quaternion.Inverse(playerShip.transform.rotation) * (transform.position - playerShip.transform.position);
  109.                         position /= 16;
  110.                         position.y = 0;
  111.                         if (playerShip.empTimer >= 0) {
  112.                                 position.x += (Random.value - 0.5f) * 32 * playerShip.empTimer;
  113.                                 position.z += (Random.value - 0.5f) * 32 * playerShip.empTimer;
  114.                         }
  115.                         if (position.sqrMagnitude < 9216)
  116.                                 GUI.DrawTextureWithTexCoords(new Rect(position.x + 96 - 8, 96 - position.z - 8, 16, 16), targetTexture,
  117.                                         new Rect(0.50f, 1.0f - 0.25f * (team + 1), 0.25f, 0.25f));
  118.                 }
  119.         }
  120.  
  121.         public float CalculateTargetScore(Ship playerShip) {
  122.                 if (isCloaked || (team != 0 && playerShip.player != null && playerShip.player.team == team)) {
  123.                         // don't target your own stuff
  124.                         return -99999;
  125.                 }
  126.                 else {
  127.                         Ship myShip = GetComponent<Ship>();
  128.                         if (myShip != null && myShip.player.spawnState == SpawnState.PreLaunch)
  129.                                 return -99999;
  130.  
  131.                         Vector3 relativePosition = (playerShip.transform.position - transform.position);
  132.                         Vector3 relativeVelocity = (playerShip.rigidbody.velocity - rigidbody.velocity);

This paste is large and only partially shown.
View full paste

View raw paste Reply