예제 #1
0
        public void UpdatePositionTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var readAsyncPositionUpdate = mockNetworkLayer.PositionUpdateEventChannel.Reader.ReadAsync();
            var newPosition             = new Vector3(1, 1, 1);

            entity.Position = newPosition;
            var positionUpdateTask = readAsyncPositionUpdate.AsTask();

            positionUpdateTask.Wait();
            var positionUpdateResult = positionUpdateTask.Result;

            Assert.AreSame(positionUpdateResult.Entity, entity);
            Assert.AreEqual(newPosition, positionUpdateResult.Position);

            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entity);
            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);
        }
예제 #2
0
 /// <summary>
 /// Destroy all created dynamic markers.
 /// </summary>
 public static void DestroyAllDynamicMarkers( )
 {
     foreach (DynamicMarker marker in GetAllDynamicMarkers( ))
     {
         AltEntitySync.RemoveEntity(marker);
     }
 }
        public void RemoveClientTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var data            = new Dictionary <string, object>();

            data["bla"] = 1337;
            var entity = new Entity(1, new Vector3(1000, 1000, 1000), 0, 2, data);

            AltEntitySync.AddEntity(entity);
            var dummy      = mockNetworkLayer.AddDummyClient();
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);
            Assert.AreEqual(1, entity.GetClients().Count);
            Assert.AreEqual(1, entity.DataSnapshot.GetLastClients().Count);
            Assert.AreEqual(1, dummy.GetEntities(0).Count);

            mockNetworkLayer.RemoveDummyClient();

            Thread.Sleep(300);

            Assert.AreEqual(0, entity.DataSnapshot.GetLastClients().Count);
            Assert.AreEqual(0, entity.GetClients().Count);
            Assert.AreEqual(1, dummy.GetEntities(0).Count);

            AltEntitySync.RemoveEntity(entity);
        }
예제 #4
0
        public void AddTest()
        {
            var entity = new Entity(1, Vector3.One, 0, 1);

            AltEntitySync.AddEntity(entity);
            AltEntitySync.RemoveEntity(entity);
        }
        public void UpdatePositionCleanupTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var newPosition = new Vector3(1, 1, 1);

            entity.Position = newPosition;

            for (var i = 0; i < 100; ++i)
            {
                entity.Position = new Vector3(i, i, i);
                Thread.Sleep(50);
            }

            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader;

            AltEntitySync.RemoveEntity(entity);
            readAsyncRemove.ReadAsync().AsTask().Wait();
            readAsyncRemove.ReadAsync().AsTask().Wait();
            readAsyncRemove.ReadAsync().AsTask().Wait();
            Assert.AreEqual(0, grid.GetEntityCount());
        }
예제 #6
0
        public void RemoveTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var data            = new Dictionary <string, object>();

            data["bla"] = 1337;
            var entity = new Entity(1, Vector3.Zero, 0, 2, data);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var readAsyncRemove     = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();
            var readAsyncClearCache = mockNetworkLayer.ClearCacheEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entity);

            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);

            var clearCacheTask = readAsyncClearCache.AsTask();

            clearCacheTask.Wait();
            var clearCacheResult = clearCacheTask.Result;

            Assert.AreSame(clearCacheResult.Entity, entity);
        }
        public void UpdateRangeTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.One, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();

            entity.Range = 1;
            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);

            AltEntitySync.RemoveEntity(entity);
            Thread.Sleep(500);
            Assert.AreEqual(0, grid.GetEntityCount());
        }
 /// <summary>
 /// Destroy an HelpText.
 /// </summary>
 /// <param name="dynamicTextLabel">The text label instance to destroy.</param>
 public static void DeleteHelpText(HelpText dynamicTextLabel)
 {
     mGlobal.API.RunSameThread(() =>
     {
         HelpText.HelpTextList.Remove(dynamicTextLabel);
         AltEntitySync.RemoveEntity(dynamicTextLabel);
     });
 }
예제 #9
0
 /// <summary>
 /// Destroy all created dynamic markers.
 /// </summary>
 public static void DestroyAllDynamicMarkers()
 {
     foreach (Marker marker in GetAllDynamicMarkers())
     {
         AltEntitySync.RemoveEntity(marker);
     }
     Marker.MarkerList.Clear();
 }
 /// <summary>
 /// Destroy all HelpText.
 /// </summary>
 public static void DeleteAllHelpText()
 {
     foreach (HelpText obj in GetAllHelpText())
     {
         HelpText.HelpTextList.Remove(obj);
         AltEntitySync.RemoveEntity(obj);
     }
 }
예제 #11
0
        public void OnTick(Flame flame)
        {
            if (!flame.IsPositionGroundValidated || !flame.Active)
            {
                return;
            }

            if (flame.Extinguished)
            {
                // to be sure: stop and remove all children
                flame.Children.ForEach(e =>
                {
                    e.Extinguished = true;
                    AltEntitySync.RemoveEntity(e);
                });

                AltEntitySync.RemoveEntity(flame);

                flame.Active = false;

                return;
            }

            // remove inactive flames and execute tick on every child
            flame.Children.RemoveAll(e => !e.Active);
            flame.Children.ForEach(e => OnTick(e));

            // logical tick only every 5 seconds
            if (DateTime.Now < flame.LastManagedTick + TimeSpan.FromSeconds(5d))
            {
                return;
            }

            flame.LastManagedTick = DateTime.Now;

            if (_random.Next(0, 100) <= Math.Max(30 + flame.Level, 50))
            {
                flame.Level += 1;
            }

            // create children
            if (flame.Level > 10 && flame.Level % 5 == 0 && _random.Next(0, 100) <= Math.Max(10 - flame.Level, 30))
            {
                var flamesToSpawn = _random.Next(1, Convert.ToInt32(Math.Floor(flame.Level / 7d)));

                for (var i = 0; i < flamesToSpawn; i++)
                {
                    var childFlamePos = flame.Position + new Vector3(_random.Next(0, 50) / 10f, _random.Next(0, 50) / 10f, 0);

                    var childFlame = new FlameBuilder().SetPosition(childFlamePos).InitializeFlame();
                    flame.Children.Add(childFlame);

                    Console.WriteLine($"Flame {flame.Id} generated child {childFlame.Id}");
                }
            }
        }
예제 #12
0
        public void DeleteAll()
        {
            foreach (var entity in ManagedEntities)
            {
                AltEntitySync.RemoveEntity(entity);
            }

            ManagedEntities.Clear();

            Logger.LogDebug($"[EntitySync] Deleted all entities");
        }
 /// <summary>
 /// Destroy all HelpText.
 /// </summary>
 public static void DeleteAllHelpText()
 {
     mGlobal.API.RunSameThread(() =>
     {
         foreach (HelpText obj in GetAllHelpText())
         {
             HelpText.HelpTextList.Remove(obj);
             AltEntitySync.RemoveEntity(obj);
         }
     });
 }
        /// <summary>
        /// Destroy a dynamic marker by it's ID.
        /// </summary>
        /// <param name="dynamicMarkerId">The ID of the marker.</param>
        /// <returns>True if successful, false otherwise.</returns>
        public static bool Delete(ulong dynamicMarkerId)
        {
            Marker marker = GetMarker(dynamicMarkerId);

            if (marker == null)
                return false;

            Marker.MarkerList.Remove(marker);
            AltEntitySync.RemoveEntity(marker);
            return true;
        }
예제 #15
0
        /// <summary>
        /// Destroy a dynamic marker by it's ID.
        /// </summary>
        /// <param name="dynamicMarkerId">The ID of the marker.</param>
        /// <returns>True if successful, false otherwise.</returns>
        public static bool DestroyDynamicMarker(ulong dynamicMarkerId)
        {
            DynamicMarker marker = GetDynamicMarker(dynamicMarkerId);

            if (marker == null)
            {
                return(false);
            }

            AltEntitySync.RemoveEntity(marker);
            return(true);
        }
예제 #16
0
        public static bool Delete(ulong dynamicObjectId)
        {
            Prop obj = GetProp(dynamicObjectId);

            if (obj == null)
            {
                return(false);
            }
            Prop.PropList.Remove(obj);
            AltEntitySync.RemoveEntity(obj);
            return(true);
        }
예제 #17
0
        /// <summary>
        /// Destroy a dynamic object by it's ID.
        /// </summary>
        /// <param name="dynamicObjectId">The ID of the object.</param>
        /// <returns>True if successful, false otherwise.</returns>
        public static bool DestroyDynamicObject(ulong dynamicObjectId)
        {
            DynamicObject obj = GetDynamicObject(dynamicObjectId);

            if (obj == null)
            {
                return(false);
            }

            AltEntitySync.RemoveEntity(obj);
            return(true);
        }
        /// <summary>
        /// Destroy HelpText by it's ID.
        /// </summary>
        /// <param name="dynamicTextLabelId">The ID of the text label.</param>
        /// <returns>True if successful, false otherwise.</returns>
        public static bool DeleteHelpText(ulong dynamicTextLabelId)
        {
            HelpText obj = GetHelpText(dynamicTextLabelId);

            if (obj == null)
            {
                return(false);
            }

            HelpText.HelpTextList.Remove(obj);
            AltEntitySync.RemoveEntity(obj);
            return(true);
        }
예제 #19
0
        public void RemoveTestWithoutInitialData()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);

            var readAsyncDataUpdate = mockNetworkLayer.DataChangeEventChannel.Reader.ReadAsync();

            entity.SetData("bla", 1337);

            var updateDataTask = readAsyncDataUpdate.AsTask();

            updateDataTask.Wait();
            var updateDataResult = updateDataTask.Result;

            using (var enumerator = updateDataResult.Data.GetEnumerator())
            {
                Assert.AreEqual(true, enumerator.MoveNext());
                Assert.AreEqual("bla", enumerator.Current.Key);
                Assert.AreEqual(1337, enumerator.Current.Value);
                Assert.AreEqual(false, enumerator.MoveNext());
            }

            Assert.AreSame(updateDataResult.Entity, entity);

            var readAsyncRemove     = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();
            var readAsyncClearCache = mockNetworkLayer.ClearCacheEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entity);

            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);

            var clearCacheTask = readAsyncClearCache.AsTask();

            clearCacheTask.Wait();
            var clearCacheResult = clearCacheTask.Result;

            Assert.AreSame(clearCacheResult.Entity, entity);
        }
예제 #20
0
        public bool Delete(T entity)
        {
            if (entity == null || entity.Id == 0 || !ManagedEntities.Contains(entity))
            {
                return(false);
            }

            ManagedEntities.Remove(entity);
            AltEntitySync.RemoveEntity(entity);

            Logger.LogDebug($"[EntitySync] Deleted entity with id {entity.Id}");

            return(true);
        }
        /// <summary>
        /// Destroy HelpText by it's ID.
        /// </summary>
        /// <param name="dynamicTextLabelId">The ID of the text label.</param>
        /// <returns>True if successful, false otherwise.</returns>
        public static bool DeleteHelpText(ulong dynamicTextLabelId)
        {
            HelpText obj = GetHelpText(dynamicTextLabelId);

            if (obj == null)
            {
                return(false);
            }
            mGlobal.API.RunSameThread(() =>
            {
                HelpText.HelpTextList.Remove(obj);
                AltEntitySync.RemoveEntity(obj);
            });
            return(true);
        }
예제 #22
0
        public void DataTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var data            = new Dictionary <string, object>();

            data["bla"] = 1337;
            var entity = new Entity(1, Vector3.Zero, 0, 2, data);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(entity, createResult.Entity);
            Assert.AreEqual(new string[] { "bla" }, createResult.Data.Keys);
            Assert.AreEqual(new object[] { 1337 }, createResult.Data.Values);

            var readAsyncDataUpdate = mockNetworkLayer.DataChangeEventChannel.Reader.ReadAsync();

            entity.SetData("bla", 1338);

            var updateDataTask = readAsyncDataUpdate.AsTask();

            updateDataTask.Wait();
            var updateDataResult = updateDataTask.Result;

            using (var enumerator = updateDataResult.Data.GetEnumerator())
            {
                Assert.AreEqual(true, enumerator.MoveNext());
                Assert.AreEqual("bla", enumerator.Current.Key);
                Assert.AreEqual(1338, enumerator.Current.Value);
                Assert.AreEqual(false, enumerator.MoveNext());
            }

            Assert.AreSame(updateDataResult.Entity, entity);

            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entity);
            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);
        }
예제 #23
0
        public void MultiAddTest()
        {
            mockNetworkLayer.ClientRepository.Remove(mockNetworkLayer.b);
            mockNetworkLayer.ClientRepository.Remove(mockNetworkLayer.c);

            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entityA         = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entityA);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entityA);

            readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entityB = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entityB);
            createTask = readAsyncCreate.AsTask();
            createTask.Wait();
            createResult = createTask.Result;
            Assert.AreSame(createResult.Entity, entityB);


            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entityA);
            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entityA);

            readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();
            AltEntitySync.RemoveEntity(entityB);
            removeTask = readAsyncRemove.AsTask();
            removeTask.Wait();
            removeResult = removeTask.Result;
            Assert.AreSame(removeResult.Entity, entityB);

            mockNetworkLayer.ClientRepository.Add(mockNetworkLayer.b);
            mockNetworkLayer.ClientRepository.Add(mockNetworkLayer.c);
        }
예제 #24
0
        public void AddRepositoryTest()
        {
            var entity2 = new Entity(0, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity2);
            if (AltEntitySync.TryGetEntity(entity2.Id, 0, out var foundEntity2))
            {
                Assert.AreSame(entity2, foundEntity2);
            }
            var entity = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity);
            if (AltEntitySync.TryGetEntity(entity.Id, 1, out var foundEntity))
            {
                Assert.AreSame(entity, foundEntity);
            }
            AltEntitySync.RemoveEntity(entity2);
            Assert.False(AltEntitySync.TryGetEntity(entity2.Id, 0, out _));
            AltEntitySync.RemoveEntity(entity);
            Assert.False(AltEntitySync.TryGetEntity(entity.Id, 1, out _));
        }
예제 #25
0
        public void AddTest()
        {
            var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync();
            var entity          = new Entity(1, Vector3.Zero, 0, 2);

            AltEntitySync.AddEntity(entity);
            var createTask = readAsyncCreate.AsTask();

            createTask.Wait();
            var createResult = createTask.Result;

            Assert.AreSame(createResult.Entity, entity);
            var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync();

            AltEntitySync.RemoveEntity(entity);
            var removeTask = readAsyncRemove.AsTask();

            removeTask.Wait();
            var removeResult = removeTask.Result;

            Assert.AreSame(removeResult.Entity, entity);
        }
예제 #26
0
        private async void OnTick()
        {
            if (!_initialized)
            {
                return;
            }

            _flameManager.OnTick(Fire.MainFlame);

            if (Fire.MainFlame.Extinguished)
            {
                var id = Fire.Id;
                AltEntitySync.RemoveEntity(Fire);

                Console.WriteLine($"Fire {id} removed");

                return;
            }

            await Task.Delay(50);

            OnTick();
        }
예제 #27
0
 public static void Delete(Prop obj)
 {
     Prop.PropList.Remove(obj);
     AltEntitySync.RemoveEntity(obj);
 }
예제 #28
0
 /// <summary>
 /// Destroy a dynamic marker.
 /// </summary>
 /// <param name="marker">The marker instance to destroy.</param>
 public static void DestroyDynamicMarker(DynamicMarker marker)
 {
     AltEntitySync.RemoveEntity(marker);
 }
 /// <summary>
 /// Destroy an HelpText.
 /// </summary>
 /// <param name="dynamicTextLabel">The text label instance to destroy.</param>
 public static void DeleteHelpText(HelpText dynamicTextLabel)
 {
     HelpText.HelpTextList.Remove(dynamicTextLabel);
     AltEntitySync.RemoveEntity(dynamicTextLabel);
 }
 /// <summary>
 /// Destroy this textlabel.
 /// </summary>
 public void Delete()
 {
     HelpText.HelpTextList.Remove(this);
     AltEntitySync.RemoveEntity(this);
 }