public void SetOwner(IOwner owner) { this.owner = owner; ai.owner = owner; owner.GetUnitsCommanding().Add(this); if (owner as AirCarrier || owner as GroundCarrier) { // GET THE DRONES TO MOVE ai.setMode(AirCraftAI.AIMode.Path); var path = ScriptableObject.CreateInstance <Path>(); path.waypoints = new List <Path.Node>(); var vec = Vector2.zero; if (owner as AirCarrier) { foreach (var ent in BattleZoneManager.getTargets()) { if (ent && ent is ICarrier && !FactionManager.IsAllied(ent.faction, owner.GetFaction()) && ent.transform) { vec = ent.transform.position; } } } // otherwise this is a ground carrier, drones are defensive for them so set a path to the drone position currently else { var angle = Random.Range(0F, 360); vec = owner.GetTransform().position + new Vector3(5 * Mathf.Sin(angle), 5 * Mathf.Cos(angle)); } // TODO: jank, fix this eventually var node = new Path.Node(); node.position = vec; node.ID = 0; node.children = new List <int>(); if (vec != Vector2.zero) { path.waypoints.Add(node); } if (owner as AirCarrier) { ai.setPath(path); } else { NodeEditorFramework.Standard.PathData data = new NodeEditorFramework.Standard.PathData(); data.waypoints = new List <NodeEditorFramework.Standard.PathData.Node>(); // TODO: LOL THESE TWO ARE DIFFERENT, unify them foreach (var point in path.waypoints) { var node2 = new NodeEditorFramework.Standard.PathData.Node(); node2.ID = point.ID; node2.children = point.children; node2.position = point.position; data.waypoints.Add(node2); } ai.setPath(data, null, true); } } }
/// <summary> /// Creates a drone /// </summary> protected override void Execute() { AudioManager.PlayClipByID("clip_respawn", transform.position); // Spawn the drone GameObject go = new GameObject(blueprint.name); Drone drone = go.AddComponent <Drone>(); drone.blueprint = blueprint; drone.faction = craft.GetFaction(); drone.transform.position = part.transform.position; drone.spawnPoint = part.transform.position; drone.type = spawnData.type; drone.Init(); drone.SetOwner(craft); craft.GetSectorManager().InsertPersistentObject(drone.blueprint.name, go); if (craft as ICarrier != null) { drone.getAI().setMode(AirCraftAI.AIMode.Path); } else { if (drone.type != DroneType.Worker) { drone.getAI().follow(craft.GetTransform()); } else { drone.getAI().setMode(AirCraftAI.AIMode.Tractor); drone.getAI().owner = craft; } } }
/// <summary> /// Creates a drone /// </summary> protected override void Execute() { AudioManager.PlayClipByID("clip_respawn", transform.position); // Spawn the drone GameObject go = new GameObject(blueprint.name); Drone drone = go.AddComponent <Drone>(); drone.blueprint = blueprint; drone.faction = craft.GetFaction(); drone.transform.position = part.transform.position; drone.spawnPoint = part.transform.position; drone.type = spawnData.type; drone.Init(); drone.SetOwner(craft); craft.GetSectorManager().InsertPersistentObject(drone.blueprint.name, go); if (SectorManager.instance && SectorManager.instance.GetComponentInChildren <BattleZoneManager>()) { var stats = SectorManager.instance.GetComponentInChildren <BattleZoneManager>().stats.Find(s => s.faction == Core.faction); if (stats == null) { stats = new BattleZoneManager.Stats(Core.faction); SectorManager.instance.GetComponentInChildren <BattleZoneManager>().stats.Add(stats); } stats.droneSpawns++; } if (craft is ICarrier || craft is AirWeaponStation || craft is GroundWeaponStation) { drone.getAI().setMode(AirCraftAI.AIMode.Path); } else { if (drone.type != DroneType.Worker) { drone.getAI().follow(craft.GetTransform()); } else { drone.getAI().setMode(AirCraftAI.AIMode.Tractor); drone.getAI().owner = craft; } } }