private IEnumerator GenerateDrones(DroneFactory factory, IDrone drone, StartPositionDelegate posDelegate, GameObject parentDrone = null) { var addPattern = parentDrone != null; while (true) { if (parentDrone == null && addPattern) { yield break; } if (parentDrone != null) { factory.SpawnDrones(drone, DroneCount, posDelegate: delegate { return(parentDrone.transform.position); }); } else { factory.SpawnDrones(drone, DroneCount, posDelegate: posDelegate); } yield return(new WaitForSeconds(Delay)); } }
private IEnumerator GenerateDrones(IDrone drone, float delay, Area area, StartPositionDelegate posDelegate) { while (true) { yield return(new WaitForSeconds(delay)); SpawnDrones(drone, isAdded: true, area: area, posDelegate: posDelegate); } }
public void SetPattern(DroneFactory factory, IDrone drone, Area area, StartPositionDelegate posDelegate = null) { if (posDelegate == null) { posDelegate = delegate { return(new Vector3(0, 0.4f, 0)); } } ; factory.StartCoroutine(GenerateDrones(factory, drone, posDelegate)); }
public void SetPattern(IPattern pattern, IDrone drone, Area area = new Area(), StartPositionDelegate posDelegate = null) { pattern.SetPattern(this, drone, area, posDelegate); }
public List <GameObject> SpawnDrones(IDrone drone, int droneCount = 1, bool isAdded = false, Area area = new Area(), StartPositionDelegate posDelegate = null) { var drones = new List <GameObject>(); var droneDatas = new List <SpawnDroneData>(); for (var i = 0; i < droneCount; i++) { var newDrone = drone.CreateDroneInstance(this, isAdded, area, posDelegate); newDrone.AddComponent <DroneManager>(); if (IsServer) { var data = AddDroneData(newDrone); drone.ConfigureDrone(newDrone, this); droneDatas.Add(new SpawnDroneData( new DroneState(data.Id, newDrone.transform.position.x, newDrone.transform.position.z), drone.Speed, drone.Size, drone.Color, drone.DroneType)); } else { drone.ConfigureDrone(newDrone, this); } drones.Add(newDrone); } if (IsServer) { SyncDroneServer.SpawnDrones(droneDatas); } return(drones); }
public void SpawnAndAddDrones(IDrone drone, int droneCount, float delay, Area area = new Area(), StartPositionDelegate posDelegate = null) { SpawnDrones(drone, droneCount, area: area, posDelegate: posDelegate); AddDrones(drone, delay, area, posDelegate); }
public void AddDrones(IDrone drone, float delay, Area area = new Area(), StartPositionDelegate posDelegate = null) { StartCoroutine(GenerateDrones(drone, delay, area, posDelegate)); }
public void SetPattern(DroneFactory factory, IDrone drone, Area area, StartPositionDelegate posDelegate = null) { factory.StartCoroutine(GenerateHorizontalGridDrones(drone, DroneCount, Delay, area, factory, AddDrones)); factory.StartCoroutine(GenerateVerticalGridDrones(drone, DroneCount, Delay, area, factory, AddDrones)); }
public override GameObject CreateDroneInstance(DroneFactory factory, bool isAdded, Area area, StartPositionDelegate posDelegate = null) { var direction = Random.Range(0, 4); var newDrone = Object.Instantiate(factory.SetDroneType[DroneType], DroneStartPosition.GetRandomPosition(Size, _area), Quaternion.Euler(0, -45 + 90 * direction, 0), factory.transform); return(newDrone); }
public override GameObject CreateDroneInstance(DroneFactory factory, bool isAdded, Area area, StartPositionDelegate posDelegate = null) { var drone = Object.Instantiate(factory.SetDroneType[DroneType], _position, Quaternion.identity, factory.transform); var data = drone.AddComponent <DroneStateManager>(); data.Initialize(_state.Id, factory); if (factory.Drones.ContainsKey(_state.Id)) { Debug.LogError("ID " + _state.Id + " already taken!"); } factory.Drones[_state.Id] = data; return(drone); }
private IEnumerator GenerateLevel6GreenDrones(float delay, int initialDroneCount, float speed, float size, DroneColor color, float reduceDelay, float minDelay, int droneIncrease, int maxDrones, StartPositionDelegate posDelegate) { var droneCount = 0; while (true) { DroneFactory.SetPattern(new Pat360Drones(initialDroneCount + droneCount, 5f), new DefaultDrone(speed, size, color), BoundariesSLA.FlyingSla, posDelegate); yield return(new WaitForSeconds(delay)); if (delay > minDelay) { delay -= delay * reduceDelay; } if (droneCount < maxDrones - initialDroneCount) { droneCount += droneIncrease; } } }
public override GameObject CreateDroneInstance(DroneFactory factory, bool isAdded, Area area, StartPositionDelegate posDelegate = null) { return(Object.Instantiate(factory.SetDroneType[DroneType], _position, Quaternion.Euler(0, _direction, 0), factory.transform)); }
public override GameObject CreateDroneInstance(DroneFactory factory, bool isAdded, Area area, StartPositionDelegate posDelegate = null) { Vector3 pos; if (posDelegate != null) { pos = posDelegate(Size, area); } else { pos = isAdded ? DroneStartPosition.GetRandomCorner(Size, area) : DroneStartPosition.GetRandomPosition(Size, area); } var newDrone = Object.Instantiate(factory.SetDroneType[DroneType], pos, Quaternion.Euler(0, _startDirection + DroneDirection.RandomDirection(_restrictedZone, _coneRange), 0), factory.transform); return(newDrone); }
private IEnumerator Generate360Drones(DroneFactory factory, IDrone drone, Area area, StartPositionDelegate posDelegate, GameObject parentDrone = null) { var clockwise = true; var startRotation = 0f; var position = posDelegate(drone.Size, area); var addPattern = parentDrone != null; // If delay is not null, the drones will go out in a fan motion. If it is null, all rays will go out at the same time if (Delay != null) { // Set Rotation according to position if (posDelegate == DroneStartPosition.GetRandomTopSector) { clockwise = position.x < 0; startRotation = position.x < 0 ? 90f : -90f; } else if (posDelegate == DroneStartPosition.GetRandomBottomSector) { clockwise = position.x >= 0; startRotation = position.x < 0 ? 90f : -90f; } else if (posDelegate == DroneStartPosition.GetRandomLeftSector) { clockwise = position.z < 0; startRotation = (position.z < 0) ? 0f : 180f; } else if (posDelegate == DroneStartPosition.GetRandomRightSector) { clockwise = position.z >= 0; startRotation = position.z < 0 ? 0f : 180f; } clockwise = Clockwise ?? clockwise; startRotation = StartRotation ?? startRotation; } var midRotaion = clockwise ? startRotation + MaxRotation / 2 : startRotation - MaxRotation / 2; if (InitialDelay != null) { yield return(new WaitForSeconds(InitialDelay.Value)); } do { do { for (var i = 0; i < NumRays; i++) { if (parentDrone == null && addPattern) { yield break; } if (parentDrone != null) { position = parentDrone.transform.position; } // spawn new drone in set position, direction and dronespeed var rotation = startRotation + (clockwise ? 1 : -1) * (MaxRotation * i / NumRays); factory.SpawnDrones(new DefaultDrone(drone, position, rotation)); if (Delay != null) { yield return(new WaitForSeconds(Delay.Value / NumRays)); } } if (ChangeDirection) { startRotation = clockwise ? midRotaion + MaxRotation / 2 : midRotaion - MaxRotation / 2; clockwise = !clockwise; } if (PatternRepeats != null) { PatternRepeats -= 1; if (PatternRepeats == 0) { break; } } } while (PatternRepeats != null); if (PulseDelay != null) { yield return(new WaitForSeconds(PulseDelay.Value)); if (ReducePulseDelay != null) { PulseDelay = PulseDelay > MinPulseDelay ? PulseDelay - PulseDelay * ReducePulseDelay : PulseDelay; } } if (NumRays > MaxRays) { NumRays += AddRays; } } while (Repeat && (Delay != null || PulseDelay != null)); }
public abstract GameObject CreateDroneInstance(DroneFactory factory, bool isAdded, Area area, StartPositionDelegate posDelegate = null);