/// <summary> /// Resets active cooldowns of nearby enemies /// </summary> protected override void Execute() { AudioManager.PlayClipByID("clip_disrupt", transform.position); for (int i = 0; i < AIData.entities.Count; i++) { if (AIData.entities[i] is Craft && !AIData.entities[i].GetIsDead() && !FactionManager.IsAllied(AIData.entities[i].faction, Core.faction) && !AIData.entities[i].IsInvisible) { float d = (Core.transform.position - AIData.entities[i].transform.position).sqrMagnitude; if (d < range * range) { foreach (var ability in AIData.entities[i].GetAbilities()) { if (ability != null) { ability.ResetCD(); } } foreach (var part in AIData.entities[i].GetComponentsInChildren <ShellPart>()) { if (part.GetComponent <Ability>() && !(part.GetComponent <Ability>() as PassiveAbility)) { //part.SetPartColor(Color.grey); part.lerpColors(); var missileLinePrefab = new GameObject("Missile Line"); // create prefab and set to parent missileLinePrefab.transform.SetParent(transform, false); var missileColor = part && part.info.shiny ? FactionManager.GetFactionShinyColor(Core.faction) : new Color(0.8F, 1F, 1F, 0.9F); // I use this prefab as one of the active lines on the missile // because what's the point in not doing it this way LineRenderer lineRenderer = missileLinePrefab.AddComponent <LineRenderer>(); // add line renderer lineRenderer.material = ResourceManager.GetAsset <Material>("white_material"); // get material MissileAnimationScript comp = missileLinePrefab.AddComponent <MissileAnimationScript>(); // add the animation script var x = Instantiate(missileLinePrefab, part.transform); // instantiate x.GetComponent <MissileAnimationScript>().Initialize(); // initialize x.GetComponent <MissileAnimationScript>().lineColor = missileColor; Destroy(x, 0.5f); } } } } } base.Execute(); }
/// <summary> /// Immobilizes a nearby enemy /// </summary> protected override void Execute() { AudioManager.PlayClipByID("clip_activateability", transform.position); var targeting = Core.GetTargetingSystem(); float minDist = rangeSquared; target = null; for (int i = 0; i < AIData.entities.Count; i++) { if (AIData.entities[i] is Craft && !AIData.entities[i].GetIsDead() && !FactionManager.IsAllied(AIData.entities[i].faction, Core.faction)) { float d = (Core.transform.position - AIData.entities[i].transform.position).sqrMagnitude; if (d < minDist && !AIData.entities[i].IsInvisible) { minDist = d; target = AIData.entities[i] as Craft; } } } if (target != null) { target.AddPin(); var missileLinePrefab = new GameObject("Missile Line"); // create prefab and set to parent missileLinePrefab.transform.SetParent(transform, false); var missileColor = part && part.info.shiny ? FactionManager.GetFactionShinyColor(Core.faction) : new Color(0.8F, 1F, 1F, 0.9F); // I use this prefab as one of the active lines on the missile // because what's the point in not doing it this way LineRenderer lineRenderer = missileLinePrefab.AddComponent <LineRenderer>(); // add line renderer lineRenderer.material = ResourceManager.GetAsset <Material>("white_material"); // get material MissileAnimationScript comp = missileLinePrefab.AddComponent <MissileAnimationScript>(); // add the animation script foreach (var part in target.GetComponentsInChildren <ShellPart>()) { var x = Instantiate(missileLinePrefab, part.transform); // instantiate x.GetComponent <MissileAnimationScript>().Initialize(); // initialize x.GetComponent <MissileAnimationScript>().lineColor = missileColor; Destroy(x, activeDuration); } } base.Execute(); }
// Use this for initialization void Start() { if (!missileLinePrefab) // no missile line prefab? no problem { missileLinePrefab = new GameObject("Missile Line"); // create prefab and set to parent missileLinePrefab.transform.SetParent(transform, false); // I use this prefab as one of the active lines on the missile // because what's the point in not doing it this way LineRenderer lineRenderer = missileLinePrefab.AddComponent <LineRenderer>(); // add line renderer lineRenderer.material = ResourceManager.GetAsset <Material>("white_material"); // get material MissileAnimationScript comp = missileLinePrefab.AddComponent <MissileAnimationScript>(); // add the animation script comp.Initialize(); // initialize the script to make it update-safe for (int i = 0; i < 2; i++) // instantiate thrice for a total of four prefabs { var x = Instantiate(missileLinePrefab, transform); // instantiate x.GetComponent <MissileAnimationScript>().Initialize(); // initialize x.GetComponent <MissileAnimationScript>().lineColor = missileColor; } GetComponent <Rigidbody2D>().AddTorque(50); // add angular velocity } else { for (int i = 0; i < 3; i++) // instantiate the prefabs { var x = Instantiate(missileLinePrefab, transform); // instantiate x.GetComponent <MissileAnimationScript>().lineColor = missileColor; x.GetComponent <MissileAnimationScript>().Initialize(); // initialize } } if (!GetComponent <Collider2D>()) // no collider? no problem { var collider = gameObject.AddComponent <CircleCollider2D>(); // add collider component collider.isTrigger = true; // set trigger } GetComponent <SpriteRenderer>().color = missileColor; }