public void RemoveTurret(TurretPosition pos) { if (pos.turrets.Count > 0) { MessageTutorial.Send("remove"); } foreach (Turret turret in pos.turrets) { Destroy(turret.gameObject); } pos.turrets = new List <Turret>(); //TODO: Set turret types if (pos.leftPosition.turrets.Count > 0) { List <TurretPosition> positions = pos.leftPosition.GetLeftmostPositionWithTurret(spokes - 1).GetTurrets(spokes - 1); foreach (TurretPosition position in positions) { position.SetTurretType(positions.Count); } } if (pos.rightPosition.turrets.Count > 0) { List <TurretPosition> positions = pos.rightPosition.GetTurrets(spokes - 1); foreach (TurretPosition position in positions) { position.SetTurretType(positions.Count); } } }
//Used for when the static Create method wants to set the local position for the turret. public void SetPosition(TurretPosition position) { localPosition = position; if (localPosition == TurretPosition.TOP) { transform.localScale = new Vector3(transform.localScale.x, -transform.localScale.y, transform.localScale.z); } }
// Returns a random turret position in world space from x, y coords. public GridCellPos GetRandomTurretGridCell() { TurretPosition randomTurretPos = shuffledTurretPositions.Dequeue(); shuffledTurretPositions.Enqueue(randomTurretPos); GridCellPos randomGridCellPos = new GridCellPos(randomTurretPos.x, randomTurretPos.y); return(randomGridCellPos); }
void Update() { targetPosition = TurretManager.Instance.GetTopPosition(); if (targetPosition != null) { transform.position = targetPosition.positionObject.transform.position + transform.up * turretHeightOffset * targetPosition.turrets.Count; transform.rotation = targetPosition.positionObject.transform.rotation; } }
private void Awake() { bulletPooler.InitializePool(); laserPooler.InitializePool(); rocketPooler.InitializePool(); float theta = 360f / spokes; turretPositions = new TurretPositions(); for (int i = 0; i < spokes; i++) { TurretPosition pos = new TurretPosition(); pos.turrets = new List <Turret>(); pos.positionObject = Instantiate(turretPositionPrefab, planet.transform); pos.positionObject.name = string.Format("Turret Position {0}", i); pos.positionObject.transform.localPosition = Vector3.zero; pos.positionObject.transform.Rotate(Vector3.forward * theta * -i); pos.positionObject.transform.Translate(Vector3.up * turretDropPosition.position.y); if (i > 0) { turretPositions[turretPositions.Count - 1].rightPosition = pos; pos.leftPosition = turretPositions[turretPositions.Count - 1]; } turretPositions.Add(pos); } turretPositions[0].leftPosition = turretPositions[turretPositions.Count - 1]; turretPositions[turretPositions.Count - 1].rightPosition = turretPositions[0]; ghostTurretInstance = Instantiate(ghostTurret, transform).GetComponent <GhostTurret>(); ghostTurretInstance.name = "Ghost Turret"; ghostTurretInstance.gameObject.SetActive(false); ghostTurretInstance.targetPosition = turretPositions[0]; ghostTurretInstance.topPosition = turretDropPosition; ghostTurretInstance.turretHeightOffset = turretHeightOffset; List <int> biomeTesting = new List <int>(); for (int i = 0; i < 20; i++) { biomeTesting.Add(i % 4); } //SetBiomeData(biomeTesting.ToArray()); }
public static Turret Create(float xLocation, TurretPosition position) { //Get the turret from the Resources folder. if (turret == null) { turret = Resources.Load("Enemies/Turret/Turret") as GameObject; if (turret == null) { Debug.LogError("Enemies/Turret/Turret could not be loaded!"); } } //Determine the y location of the turret based on the position. if (turret != null) { float yLocation = 0; switch (position) { case TurretPosition.BOTTOM: yLocation = -3.2f; break; case TurretPosition.TOP: yLocation = 3.2f; break; case TurretPosition.ROLLING: //These guys can pretty much go anywhere and have a rigidbody 2d, so it doesn't really matter where they goe. yLocation = -1f; break; } //Instantiate the turret GameObject createdTurret = (GameObject)(Instantiate(turret, new Vector3(xLocation, yLocation, 0), Quaternion.identity)); //If the turret is on the turret, rotate the turret mount. createdTurret.GetComponent <Turret> ().SetPosition(position); //Initialize the turret. createdTurret.GetComponent <Turret> ().InitializeCharacter(); //Return the turret. return(createdTurret.GetComponent <Turret> ()); } else { Debug.LogError("Turret does not exist!"); return(null); } }
protected bool TrackTargetPickSubtarget(Ingame.MyDetectedEntityInfo Target) { if (TurretPosition.DistanceTo(Target.Position) > Turret.Range) { return(false); } if (!Target.IsGrid()) { IMyEntity TargetEntity = MyAPIGateway.Entities.GetEntityById(Target.EntityId); if (TurretPosition.DistanceTo(TargetEntity.GetPosition()) > Turret.Range) { return(false); } Turret.TrackTarget(TargetEntity); return(true); } IMyCubeGrid Grid = MyAPIGateway.Entities.GetEntityById(Target.EntityId) as IMyCubeGrid; if (Grid == null) { return(false); } List <IMyTerminalBlock> TermBlocks = new List <IMyTerminalBlock>(); IMyGridTerminalSystem Term = Grid.GetTerminalSystem(); if (Term == null) { return(false); } Term.GetBlocks(TermBlocks); TermBlocks.RemoveAll(x => !x.IsFunctional); if (!TermBlocks.Any()) { Turret.TrackTarget(Grid); return(true); } var PrioritizedBlocks = TermBlocks.OrderByDescending(x => PriorityIndex(x)).ThenBy(x => DistanceSq(x.GetPosition())); Turret.TrackTarget(PrioritizedBlocks.First()); return(true); }
public void PlaceTurret(TurretPosition pos) { Turret newTurret = Instantiate(turretPrefab, pos.positionObject.transform); newTurret.transform.localRotation = Quaternion.identity; newTurret.transform.localPosition = new Vector3(0, turretHeightOffset * pos.turrets.Count, 0); newTurret.gameObject.name = "New Turret"; newTurret.SetTurretType(Turret.TurretType.Basic); newTurret.myPosition = pos; newTurret.transform.localScale *= 2.0f; pos.turrets.Add(newTurret); ghostTurretInstance.gameObject.SetActive(false); List <TurretPosition> positions = pos.GetLeftmostPositionWithTurret(spokes - 1).GetTurrets(spokes - 1); foreach (TurretPosition position in positions) { position.SetTurretType(positions.Count); } TurretSoundManager.Instance.PlaySound("TurretBuild", true); }
protected bool TrackTarget(Ingame.MyDetectedEntityInfo Target, long SubtargetID) { if (TurretPosition.DistanceTo(Target.Position) > Turret.Range) { return(false); } IMyCubeGrid Grid = MyAPIGateway.Entities.GetEntityById(Target.EntityId) as IMyCubeGrid; if (Grid == null) { return(false); } IMyTerminalBlock Block = null; List <IMyTerminalBlock> Blocks = new List <IMyTerminalBlock>(); Grid.GetTerminalSystem().GetBlocks(Blocks); Block = Blocks.FirstOrDefault(x => x.EntityId == SubtargetID); if (Block == null || TurretPosition.DistanceTo(Block.GetPosition()) > Turret.Range) { return(false); } Turret.TrackTarget(Block); return(true); }