Exemple #1
0
        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);
            }
        }
Exemple #3
0
        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));
 }
Exemple #9
0
        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);
        }
Exemple #11
0
        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;
                }
            }
        }
Exemple #12
0
 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));
 }
Exemple #13
0
        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);
        }
Exemple #14
0
        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));
        }
Exemple #15
0
 public abstract GameObject CreateDroneInstance(DroneFactory factory, bool isAdded, Area area, StartPositionDelegate posDelegate = null);