コード例 #1
0
        public IDictionary <string, object> ToDictionary(bool withFlock = false)
        {
            var result = new Dictionary <string, object>
            {
                { k.ID, Configuration.ID },
                { k.name, Configuration.name },
                { k.area, Area },
                { k.zoneID, Zone.Id },
                { k.roaming, Configuration.roaming },
                { k.respawnSeconds, Configuration.roamingRespawnSeconds },
                { k.presenceType, (int)Configuration.presenceType },
                { k.radius, Configuration.randomRadius },
                { k.x, Configuration.randomCenterX },
                { k.y, Configuration.randomCenterY },
            };

            if (withFlock)
            {
                var counter    = 0;
                var dictionary = Flocks.Select(f => f.ToDictionary()).ToDictionary <IDictionary <string, object>, string, object>(o => "f" + counter++, o => o);
                result.Add(k.flock, dictionary);
            }

            return(result);
        }
コード例 #2
0
        public void SaveToXML(string path)
        {
            XmlSerializer xs = new XmlSerializer(typeof(Flock[]));

            using (StreamWriter wr = new StreamWriter(path))
            {
                xs.Serialize(wr, Flocks.ToArray <Flock>());
            }
        }
コード例 #3
0
        public IFlockCollection DestroyFlock(HashSet <IFlockBoid> flock)
        {
            if (Flocks.Contains(flock))
            {
                Flocks.Remove(flock);
            }

            return(this);
        }
コード例 #4
0
        public IFlockCollection AddBoid(HashSet <IFlockBoid> flock, IFlockBoid boid)
        {
            flock.Add(boid);

            if (!Flocks.Contains(flock))
            {
                Flocks.Add(flock);
            }

            return(this);
        }
コード例 #5
0
        public IFlockCollection UpdateFlocks()
        {
            foreach (var flock in Flocks)
            {
                if (!flock.Any())
                {
                    Flocks.Remove(flock);
                }
            }

            return(this);
        }
コード例 #6
0
        protected override void OnUpdate(TimeSpan time)
        {
            var x = Flocks.GetMembers().Any(m => m.AI.Current is AggressorAI);

            if (x)
            {
                ResetDynamicDespawnTimer();
            }

            _lifeTimeTracker.Update(time);

            if (_lifeTimeTracker.Expired)
            {
                OnPresenceExpired();
            }
        }
コード例 #7
0
        private Flock SpawnFlock(int flockID)
        {
            var flock = CreateAndAddFlock(flockID);

            flock.SpawnAllMembers();

            var summoner = GetSummonerPlayer();

            if (summoner != null)
            {
                foreach (var npc in Flocks.GetMembers())
                {
                    npc.AddDirectThreat(summoner, 40 + FastRandom.NextDouble(0.0, 3.0));
                    npc.Tag(summoner, LifeTime);
                }
            }

            Zone.CreateBeam(BeamType.teleport_storm, builder => builder.WithPosition(DynamicPosition.GetRandomPositionInRange2D(0, 3)).WithDuration(100000));
            return(flock);
        }
コード例 #8
0
        private IState CreateWaveState(IEnumerable <RandomFlockInfo> flockInfos, bool isLastWave)
        {
            var first = true;

            return(AnonymousState.Create(t =>
            {
                if (!first)
                {
                    return;
                }

                first = false;

                Task.Run(() =>
                {
                    foreach (var flockInfo in flockInfos)
                    {
                        var f = SpawnFlock(flockInfo.flockID);
                        f.AllMembersDead += flock =>
                        {
                            var membersCount = Flocks.MembersCount();
                            if (membersCount > 0)
                            {
                                return;
                            }

                            _fsm.Pop();

                            if (!isLastWave)
                            {
                                _fsm.Push(CreateDelayState(TimeSpan.FromSeconds(5)));
                            }
                        };

                        Logger.DebugInfo($"Flock spawned: {f}");
                    }
                });
            }));
        }
コード例 #9
0
 // Use this for initialization
 void Start()
 {
     flocks = transform.parent.GetComponent <Flocks>();
     am     = GetComponent <Animator>();
 }
コード例 #10
0
 public void Clear()
 {
     Flocks.Clear();
 }
コード例 #11
0
        public IFlockCollection CreateFlock(IEnumerable <IFlockBoid> boids)
        {
            Flocks.Add(new HashSet <IFlockBoid>(boids));

            return(this);
        }