示例#1
0
        private static IEnumerator GenerateVerticalGridDrones(IDrone drone, int droneCount, float delay, Area area, DroneFactory factory, bool addDrones)
        {
            var         height    = area.TopBoundary - (0.5f + drone.Size / 2);
            var         lenght    = area.RightBoundary - (0.5f + drone.Size / 2);
            const float direction = 180f;

            droneCount *= (int)(lenght / height);

            while (true)
            {
                for (var i = 0; i < droneCount; i++)
                {
                    var startPos = new Vector3(-lenght + i * 2 * lenght / droneCount, 0.4f, height);
                    factory.SpawnDrones(new DefaultDrone(drone, startPos, direction));
                    yield return(new WaitForSeconds(delay * 2 * lenght / droneCount));
                }
                for (var i = 0; i < droneCount; i++)
                {
                    var startPos = new Vector3(lenght - i * 2 * lenght / droneCount, 0.4f, height);
                    factory.SpawnDrones(new DefaultDrone(drone, startPos, direction));
                    yield return(new WaitForSeconds(delay * 2 * lenght / droneCount));
                }

                if (addDrones)
                {
                    droneCount += (int)(lenght / height);
                }
            }
        }
示例#2
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));
            }
        }
示例#3
0
        private void Start()
        {
            // Spawn Bouncing Drones
            DroneFactory.SpawnDrones(new RandomDrone(7, 1f, DroneColor.Blue), 15, area: BoundariesSLA.BouncingMainMenu);
            DroneFactory.SpawnDrones(new RandomDrone(7, 1.5f, DroneColor.Red), 10, area: BoundariesSLA.BouncingMainMenu);

            // Spawn Green Drones
            DroneFactory.StartCoroutine(GenerateGreenDrones(2.5f, 24, 7, 1.5f, DroneColor.DarkGreen));
        }
示例#4
0
        public override void CreateDrones()
        {
            // Spawn Bouncing Drones
            DroneFactory.SpawnAndAddDrones(new RandomDrone(7, 1.5f, DroneColor.Red), 15, 5, BoundariesSLA.BouncingSla);

            DroneFactory.SpawnDrones(new MineDrone(5, 3, DroneColor.Red, new Pat360Drones(56, 4, true, false, 0, 720, changeDirection: true),
                                                   new DefaultDrone(8, 1.3f, DroneColor.Cyan)), area: BoundariesSLA.FlyingSla);
        }
示例#5
0
        public override void CreateDrones()
        {
            // Spawn blue drones
            DroneFactory.SetPattern(new PatContinuousSpawn(0.15f, 2),
                                    new RandomDrone(10, 1, DroneColor.Blue, restrictedZone: 0, droneType: DroneType.FlyingOneWayDrone));

            // Spawn red drones
            DroneFactory.SpawnDrones(new RedDrone(15, 1, DroneColor.Red, 3, LaneArea[0]), 100);
        }
示例#6
0
        public override void CreateDrones()
        {
            // Spawn red drones
            DroneFactory.SpawnDrones(new RedDrone(17, 2, DroneColor.Red, 3, LaneArea[0]), 60);

            // Spawn yellow drones
            DroneFactory.SetPattern(new Pat360Drones(32, 3, true, startRotation: -90),
                                    new DefaultDrone(16, 2, DroneColor.Golden, movementType: new SinusoidalMovement(40, 4)));
        }
示例#7
0
 public override void CreateDrones()
 {
     // Spawn bouncing drones
     for (var i = 1; i < LaneArea.Length - 2; i++)
     {
         DroneFactory.SpawnDrones(new RandomDrone(3f, 1f, DroneColor.Grey), (int)(15 - i * 0.6f), area: LaneArea[i]);
     }
     DroneFactory.SpawnDrones(new RedDrone(500, 1, DroneColor.Red, 1000, LaneArea[19], 5, true, DroneType.BouncingDrone), 5);
     DroneFactory.SpawnDrones(new RedDrone(500, 1, DroneColor.Red, 1000, LaneArea[20], 5, true, DroneType.BouncingDrone), 4);
 }
示例#8
0
        public override void CreateDrones()
        {
            // Spawn bouncing drones
            for (var i = 1; i < LaneArea.Length - 2; i++)
            {
                DroneFactory.SpawnDrones(new RandomDrone(6, 2, DroneColor.Grey), (int)(11 - i * 0.4f), area: LaneArea[i]);
            }
            DroneFactory.SpawnDrones(new RandomDrone(6, 2, DroneColor.Grey), 4, area: LaneArea[19]);
            DroneFactory.SpawnDrones(new RandomDrone(6, 2, DroneColor.Grey), 3, area: LaneArea[20]);

            // Spawn red drones
            DroneFactory.SpawnDrones(new RedDrone(17, 2, DroneColor.Red, 3, LaneArea[0]), 60);
        }
示例#9
0
        public override void CreateDrones()
        {
            // Spawn bouncing drones
            for (var i = 1; i < LaneArea.Length - 2; i++)
            {
                DroneFactory.SpawnDrones(new RandomDrone(5, 2f, DroneColor.Grey), (int)(12 - i * 0.4f), area: LaneArea[i]);
            }
            DroneFactory.SpawnDrones(new RandomDrone(5, 2f, DroneColor.Grey), 4, area: LaneArea[19]);
            DroneFactory.SpawnDrones(new RandomDrone(5, 2f, DroneColor.Grey), 3, area: LaneArea[20]);

            // Spawn blue drones
            DroneFactory.SetPattern(new Pat360Drones(32, 10, true, true, 270), new DefaultDrone(8, 2, DroneColor.Blue));
        }
示例#10
0
        private void Start()
        {
            MapGenerator.GenerateMap(15, new float[] { 8, 6, 8, 6, 8 }, 1.2f, 0.3f, 10);

            var laneArea = MapGenerator.GetDroneSpawnArea();

            // Spawn bouncing drones
            for (var i = 1; i < laneArea.Length - 2; i++)
            {
                DroneFactory.SpawnDrones(new RandomDrone(6, 2f, DroneColor.Grey), (int)(11 - i * 0.4f), area: laneArea[i]);
            }
            DroneFactory.SpawnDrones(new RandomDrone(6, 2f, DroneColor.Grey), 4, area: laneArea[19]);
            DroneFactory.SpawnDrones(new RandomDrone(6, 2f, DroneColor.Grey), 3, area: laneArea[20]);

            // Spawn blue drones
            DroneFactory.SetPattern(new Pat360Drones(40, 9, true, true, 270), new DefaultDrone(12, 2, DroneColor.Blue));
            DroneFactory.SetPattern(new Pat360Drones(40, 9, true, true, 90), new DefaultDrone(12, 2, DroneColor.Blue));

            // Spawn yellow drones
            DroneFactory.SetPattern(new Pat360Drones(32, repeat: true, pulseDelay: 5),
                                    new DefaultDrone(12, 2, DroneColor.Golden, movementType: new CurvedMovement(10)));
        }
示例#11
0
        public override void CreateDrones()
        {
            // Spawn bouncing drones
            for (var i = 1; i < LaneArea.Length - 2; i++)
            {
                DroneFactory.SpawnDrones(new RandomDrone(6, 2f, DroneColor.Grey), (int)(11 - i * 0.4f), area: LaneArea[i]);
            }
            DroneFactory.SpawnDrones(new RandomDrone(6, 2f, DroneColor.Grey), 4, area: LaneArea[19]);
            DroneFactory.SpawnDrones(new RandomDrone(6, 2f, DroneColor.Grey), 3, area: LaneArea[20]);

            // Spawn yellow drones
            DroneFactory.SetPattern(new Pat360Drones(32, repeat: true, pulseDelay: 5),
                                    new DefaultDrone(12, 2, DroneColor.Golden, movementType: new CurvedMovement(10)));
        }
示例#12
0
        public override void CreateDrones()
        {
            // Spawn bouncing drones
            for (var i = 1; i < LaneArea.Length - 2; i++)
            {
                DroneFactory.SpawnDrones(new RandomDrone(6, 2, DroneColor.Grey), (int)(11 - i * 0.4f), area: LaneArea[i]);
            }
            DroneFactory.SpawnDrones(new RandomDrone(6, 2, DroneColor.Grey), 4, area: LaneArea[19]);
            DroneFactory.SpawnDrones(new RandomDrone(6, 2, DroneColor.Grey), 3, area: LaneArea[20]);

            // Spawn yellow drones
            DroneFactory.SetPattern(new PatContinuousSpawn(0.1f, 1),
                                    new RandomDrone(14, 2, DroneColor.Golden, DroneType.FlyingOneWayDrone, 0, movementType: new SinusoidalMovement(40, 5f)));
        }
示例#13
0
        public override void CreateDrones()
        {
            // Spawn bouncing drones
            for (var i = 1; i < LaneArea.Length - 2; i++)
            {
                DroneFactory.SpawnDrones(new RandomDrone(5, 1, DroneColor.Grey), (int)(11 - i * 0.4f), area: LaneArea[i]);
            }

            // Spawn blue drones
            DroneFactory.SetPattern(new PatContinuousSpawn(0.15f, 2),
                                    new RandomDrone(10, 1, DroneColor.Blue, restrictedZone: 0, droneType: DroneType.FlyingOneWayDrone));

            // Middle reds
            DroneFactory.SpawnDrones(new RedDrone(500, 1, DroneColor.Red, 1000, LaneArea[19], 5, true, DroneType.BouncingDrone), 5);
            DroneFactory.SpawnDrones(new RedDrone(500, 1, DroneColor.Red, 1000, LaneArea[20], 5, true, DroneType.BouncingDrone), 4);
        }
示例#14
0
 public override void CreateDrones()
 {
     // Spawn red drones
     DroneFactory.SpawnDrones(new RedDrone(10, 1, DroneColor.Red, 3, LaneArea[0]), 80);
 }
示例#15
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));
        }
示例#16
0
        private void OnDataHandler(object sender, MessageReceivedEventArgs e)
        {
            var message = e.Message as TagSubjectMessage;

            if (message == null || message.Tag != Tags.SyncDrone)
            {
                return;
            }

            if (message.Subject == SyncDroneSubjects.SpawnDrone)
            {
                var reader     = message.GetReader();
                var droneDatas = new List <SpawnDroneData>();

                while (reader.Position < reader.Length)
                {
                    droneDatas.Add(reader.ReadSerializable <SpawnDroneData>());
                }

                foreach (var data in droneDatas)
                {
                    var drone = new NetworkedDrone(data.Speed, data.Size, data.Color, data.DroneType, data.State);
                    _droneFactory.SpawnDrones(drone);
                }
            }
            else if (message.Subject == SyncDroneSubjects.UpdateDroneState)
            {
                var droneStates = new List <DroneState>();
                var reader      = message.GetReader();
                while (reader.Position < reader.Length)
                {
                    droneStates.Add(reader.ReadSerializable <DroneState>());
                }

                foreach (var drone in droneStates)
                {
                    if (_droneFactory.Drones.ContainsKey(drone.Id))
                    {
                        _droneFactory.Drones[drone.Id].UpdatePosition(drone.PosX, drone.PosZ);
                    }
                    else
                    {
                        Debug.LogError("No drone with ID = " + drone.Id + " found!");
                    }
                }
            }
            else if (message.Subject == SyncDroneSubjects.DestroyDrone)
            {
                var reader  = message.GetReader();
                var droneId = reader.ReadUInt16();

                if (_droneFactory.Drones.ContainsKey(droneId))
                {
                    Destroy(_droneFactory.Drones[droneId].gameObject);
                    _droneFactory.Drones.Remove(droneId);
                }
                else
                {
                    Debug.LogError("No drone with ID = " + droneId + " found!");
                }
            }
        }