public static BlipEntity Create(Vector3 position, int dimension, uint range) { var entity = new BlipEntity(position, dimension, range); AltEntitySync.AddEntity(entity); return(entity); }
/// <summary> /// Create a new dynamic marker /// </summary> /// <param name="markerType">The type of marker to spawn.</param> /// <param name="position">The position at which the marker should spawn at.</param> /// <param name="scale">The scale of the marker.</param> /// <param name="rotation">The rotation of the marker.</param> /// <param name="direction">The direction of the marker.</param> /// <param name="color">The color of the marker.</param> /// <param name="bobUpDown">Whether the marker should bob up and down.</param> /// <param name="faceCamera">Whether the marker should face the entity's camera.</param> /// <param name="rotate">Whether the marker should rotate on the Y axis only.</param> /// <param name="textureDict">An optional texture dictionary to apply to the marker.</param> /// <param name="textureName">An optional texture name to apply to the marker.</param> /// <param name="drawOnEnter">Whether it should draw the marker onto an entity that intersects with it.</param> /// <param name="dimension">The dimension of the marker</param> /// <param name="streamRange">Stream distance of the marker, default is 100.</param> /// <returns></returns> public static Marker Create( MarkerTypes markerType, Vector3 position, Vector3 scale, Vector3?rotation = null, Vector3?direction = null, Rgba?color = null, int dimension = 0, bool?bobUpDown = false, bool?faceCamera = false, bool?rotate = false, string textureDict = null, string textureName = null, bool?drawOnEnter = false, uint streamRange = 100 ) { Marker marker = new Marker(position, dimension, streamRange, 0) { Rotation = rotation ?? new Vector3(0), MarkerType = markerType, Direction = direction ?? new Vector3(0), Scale = scale, Color = color ?? null, BobUpDown = bobUpDown ?? null, FaceCamera = faceCamera ?? null, Rotate = rotate ?? null, TextureDict = textureDict ?? null, TextureName = textureName ?? null, DrawOnEnter = drawOnEnter ?? null }; Marker.MarkerList.Add(marker); AltEntitySync.AddEntity(marker); return(marker); }
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); }
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()); }
public void AddTest() { var entity = new Entity(1, Vector3.One, 0, 1); AltEntitySync.AddEntity(entity); AltEntitySync.RemoveEntity(entity); }
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); }
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()); }
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 async Task <bool> Initialize() { if (_initialized) { return(false); } _initialized = true; AltEntitySync.AddEntity(Fire); Alt.EmitAllClients("FireFighters:Fire:NewStarted", Fire.Id); await Task.Delay(Fire.FlameSpawnDelay); Alt.EmitAllClients("FireFighters:Fire:FlamesSpawning", Fire.Id); var flameBuilder = new FlameBuilder() .SetPosition(Fire.Position) .SetLevel(10); if (Fire.IsGasFire) { flameBuilder.GasFire(); } Fire.MainFlame = flameBuilder.InitializeFlame(); OnTick(); // no await! return(_initialized); }
public T Create(T entity) { ManagedEntities.Add(entity); AltEntitySync.AddEntity(entity); Logger.LogDebug($"[EntitySync] Created entity with id {entity.Id}"); return(entity); }
public static void Entities() { for (var i = 0; i < 5000; i++) { var entity = new Entity(1, GetRandomVector3(), 0, 2); AltEntitySync.AddEntity(entity); } Thread.Sleep(20000); }
public void PositionOverrideTest() { 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(); if (mockNetworkLayer.ClientRepository.TryGet("a", out var client)) { client.SetPositionOverride(new Vector3(10, 10, 10)); } var removeTask = readAsyncRemove.AsTask(); removeTask.Wait(); var removeResult = removeTask.Result; Assert.AreSame(removeResult.Entity, entity); if (mockNetworkLayer.ClientRepository.TryGet("a", out client)) { client.ResetPositionOverride(); } readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync(); createTask = readAsyncCreate.AsTask(); createTask.Wait(); createResult = createTask.Result; Assert.AreSame(createResult.Entity, entity); readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync(); if (mockNetworkLayer.ClientRepository.TryGet("a", out client)) { client.SetPositionOverride(new Vector3(100, 100, 100)); } removeTask = readAsyncRemove.AsTask(); removeTask.Wait(); removeResult = removeTask.Result; Assert.AreSame(removeResult.Entity, entity); }
/// <summary> /// Create a new HelpText. /// </summary> /// <param name="text">The text to be displayed.</param> /// <returns>The newly created dynamic textlabel.</returns> public static HelpText Create( string text, Vector3 position, int dimension = 0, uint streamRange = 5 ) { HelpText helper = new HelpText(position, dimension, streamRange, 3) { Text = text, }; HelpText.HelpTextList.Add(helper); AltEntitySync.AddEntity(helper); return(helper); }
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); }
/// <summary> /// Create Dynamic Blip. /// </summary> /// <param name="name"></param> /// <param name="color"></param> /// <param name="scale"></param> /// <param name="shortRange"></param> /// <param name="spriteId"></param> /// <param name="position"></param> /// <param name="dimension"></param> /// <param name="range"></param> /// <returns></returns> public static Blip CreateDynamicBlip(string name, int color, float scale, bool shortRange, int spriteId, Vector3 position, int dimension, uint range = 200) { Blip blip = new Blip(position, dimension, range, 5) { Color = color, Scale = scale, ShortRange = shortRange, Sprite = spriteId, Name = name, IsStaticBlip = false, }; AltEntitySync.AddEntity(blip); BlipList.Add(blip.Id, blip); return(blip); }
/// <summary> /// Create a new HelpText. /// </summary> /// <param name="text">The text to be displayed.</param> /// <returns>The newly created dynamic textlabel.</returns> public static HelpText Create( string text, Vector3 position, int dimension = 0, uint streamRange = 5 ) { HelpText helper = new HelpText(position, dimension, streamRange, 4) { Text = text, }; mGlobal.API.RunSameThread(() => { HelpText.HelpTextList.Add(helper); AltEntitySync.AddEntity(helper); }); return(helper); }
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); }
public void PositionOverrideTest() { var readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync(); var entity = new Entity(1, Vector3.One, 0, 2); AltEntitySync.AddEntity(entity); // Two clients in range var createTask = readAsyncCreate.AsTask(); createTask.Wait(); readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync(); createTask = readAsyncCreate.AsTask(); createTask.Wait(); var createResult = createTask.Result; Assert.AreSame(createResult.Entity, entity); var readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync(); mockNetworkLayer.a.SetPositionOverride(new Vector3(10, 10, 10)); var removeTask = readAsyncRemove.AsTask(); removeTask.Wait(); var removeResult = removeTask.Result; Assert.AreSame(removeResult.Entity, entity); mockNetworkLayer.a.ResetPositionOverride(); readAsyncCreate = mockNetworkLayer.CreateEventChannel.Reader.ReadAsync(); createTask = readAsyncCreate.AsTask(); createTask.Wait(); createResult = createTask.Result; Assert.AreSame(createResult.Entity, entity); readAsyncRemove = mockNetworkLayer.RemoveEventChannel.Reader.ReadAsync(); mockNetworkLayer.a.SetPositionOverride(new Vector3(100, 100, 100)); removeTask = readAsyncRemove.AsTask(); removeTask.Wait(); removeResult = removeTask.Result; Assert.AreSame(removeResult.Entity, entity); }
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); }
public void NetOwnerTest3() { var readerCreate = mockNetworkLayer.CreateEventChannel.Reader; var readerNetOwnerChange = mockNetworkLayer.NetOwnerChangeEventChannel.Reader; var readAsyncCreate = readerCreate.ReadAsync(); var entity2 = new Entity(0, Vector3.Zero, 0, 2); AltEntitySync.AddEntity(entity2); var createTask = readAsyncCreate.AsTask(); createTask.Wait(); var readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); var netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.a, netOwnerChangeTask.Result.Item1); Assert.True(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); var client = new Client(1, "d"); client.Position = new Vector3(0, 0, 1); mockNetworkLayer.ClientRepository.Add(client); entity2.Position = new Vector3(0, 0, 1); Thread.Sleep(1000); mockNetworkLayer.ClientRepository.Remove(client); Assert.False(mockNetworkLayer.NetOwnerChangeEventChannel.Reader.TryRead(out _)); client = new Client(1, "d"); entity2.Position = new Vector3(0, 0, 2); client.Position = new Vector3(0, 0, 2); mockNetworkLayer.ClientRepository.Add(client); Thread.Sleep(1000); mockNetworkLayer.ClientRepository.Remove(client); Assert.True(mockNetworkLayer.NetOwnerChangeEventChannel.Reader.TryRead(out var changeEvent)); Assert.AreEqual(mockNetworkLayer.a, changeEvent.Item1); Assert.False(changeEvent.Item2.State); Assert.AreEqual(entity2, changeEvent.Item2.Entity); Assert.True(mockNetworkLayer.NetOwnerChangeEventChannel.Reader.TryRead(out changeEvent)); Assert.AreEqual(client, changeEvent.Item1); Assert.True(changeEvent.Item2.State); Assert.AreEqual(entity2, changeEvent.Item2.Entity); }
public Flame InitializeFlame() { if (_position == Vector3.Zero) // multithreading issue: race-condition { var ex = new InvalidOperationException("Flame needs a position"); Alt.Log("Exception on FlameBuilder: " + ex.Message); throw ex; } var nearestDistance = float.MaxValue; IPlayer nearestPlayer = null; foreach (var player in Alt.GetAllPlayers()) { var distance = player.Position.Distance(_position); if (distance < nearestDistance) { nearestDistance = distance; nearestPlayer = player; } } if (nearestPlayer == null) { var ex = new InvalidOperationException("Flame could not be created, because no nearest player found"); Alt.Log("Exception on FlameBuilder: " + ex.Message); throw ex; } var flame = new Flame(_position, _isGasFire) { Level = _level }; AltEntitySync.AddEntity(flame); nearestPlayer.Emit("FireFighters:Flame:DeterminePositionGround", flame.Id, flame.Position); return(flame); }
public void NetOwnerTest2() { var readerCreate = mockNetworkLayer.CreateEventChannel.Reader; var readerNetOwnerChange = mockNetworkLayer.NetOwnerChangeEventChannel.Reader; var readAsyncCreate = readerCreate.ReadAsync(); var entity2 = new Entity(0, Vector3.Zero, 0, 4); AltEntitySync.AddEntity(entity2); var createTask = readAsyncCreate.AsTask(); createTask.Wait(); Assert.True(readerCreate.TryRead(out var clientCCreateEvent)); var readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); var netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.a, netOwnerChangeTask.Result.Item1); Assert.True(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); entity2.Position = new Vector3(1, 1, 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 _)); }
/// <summary> /// Create a new dynamic object. /// </summary> /// <param name="model">The object model name.</param> /// <param name="position">The position to spawn the object at.</param> /// <param name="rotation">The rotation to spawn the object at(degrees).</param> /// <param name="dimension">The dimension to spawn the object in.</param> /// <param name="isDynamic">(Optional): Set object dynamic or not.</param> /// <param name="frozen">(Optional): Set object frozen.</param> /// <param name="lodDistance">(Optional): Set LOD distance.</param> /// <param name="lightColor">(Optional): set light color.</param> /// <param name="onFire">(Optional): set object on fire(DOESN'T WORK PROPERLY YET!)</param> /// <param name="textureVariation">(Optional): Set object texture variation.</param> /// <param name="visible">(Optional): Set object visibility.</param> /// <param name="streamRange">(Optional): The range that a player has to be in before the object spawns, default value is 400.</param> /// <returns>The newly created dynamic object.</returns> public static DynamicObject CreateDynamicObject( string model, Vector3 position, Vector3 rotation, int dimension = 0, bool?isDynamic = null, bool?frozen = null, uint?lodDistance = null, Rgb lightColor = null, bool?onFire = null, TextureVariation?textureVariation = null, bool?visible = null, uint streamRange = 400 ) { DynamicObject obj = new DynamicObject(position, dimension, streamRange, "object") { Rotation = rotation, Model = model, Dynamic = isDynamic ?? null, Frozen = frozen ?? null, LodDistance = lodDistance ?? null, LightColor = lightColor ?? null, OnFire = onFire ?? null, TextureVariation = textureVariation ?? null, Visible = visible ?? null }; AltEntitySync.AddEntity(obj); return(obj); }
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); }
/// <summary> /// Create a new dynamic object. /// </summary> /// <param name="model">The object model hash.</param> /// <param name="position">The position to spawn the object at.</param> /// <param name="rotation">The rotation to spawn the object at(degrees).</param> /// <param name="dimension">The dimension to spawn the object in.</param> /// <param name="isDynamic">(Optional): Set object dynamic or not.</param> /// <param name="frozen">(Optional): Set object frozen.</param> /// <param name="lodDistance">(Optional): Set LOD distance.</param> /// <param name="lightColor">(Optional): set light color.</param> /// <param name="onFire">(Optional): set object on fire(DOESN'T WORK PROPERLY YET!)</param> /// <param name="textureVariation">(Optional): Set object texture variation.</param> /// <param name="visible">(Optional): Set object visibility.</param> /// <param name="type">(Optional): Type of object, only use this if you want to separate certain object types on a custom client-side based object streamer.</param> /// <param name="streamRange">(Optional): The range that a player has to be in before the object spawns, default value is 400.</param> /// <returns>The newly created dynamic object</returns> public static DynamicObject CreateDynamicObject( uint model, Vector3 position, Vector3 rotation, int dimension = 0, bool?isDynamic = null, bool?frozen = null, uint?lodDistance = null, Rgb lightColor = null, bool?onFire = null, TextureVariation?textureVariation = null, bool?visible = null, uint streamRange = 400 ) { DynamicObject obj = new DynamicObject(position, dimension, streamRange) { Rotation = rotation, Model = model, Dynamic = isDynamic, Frozen = frozen, LodDistance = lodDistance, LightColor = lightColor, OnFire = onFire, TextureVariation = textureVariation, Visible = visible }; Alt.Log($"Tworze obiekt {obj.ToString()}"); AltEntitySync.AddEntity(obj); return(obj); }
/// <summary> /// Create a new dynamic object. /// </summary> /// <param name="model">The object model name.</param> /// <param name="position">The position to spawn the object at.</param> /// <param name="rotation">The rotation to spawn the object at(degrees).</param> /// <param name="dimension">The dimension to spawn the object in.</param> /// <param name="isDynamic">(Optional): Set object dynamic or not.</param> /// <param name="frozen">(Optional): Set object frozen.</param> /// <param name="lodDistance">(Optional): Set LOD distance.</param> /// <param name="lightColor">(Optional): set light color.</param> /// <param name="onFire">(Optional): set object on fire(DOESN'T WORK PROPERLY YET!)</param> /// <param name="textureVariation">(Optional): Set object texture variation.</param> /// <param name="visible">(Optional): Set object visibility.</param> /// <param name="streamRange">(Optional): The range that a player has to be in before the object spawns, default value is 400.</param> /// <returns>The newly created dynamic object.</returns> public static Prop Create( string model, Vector3 position, Vector3 rotation, int dimension = 0, bool?isDynamic = null, bool?placeObjectOnGroundProperly = false, bool?frozen = null, uint?lodDistance = null, Rgb lightColor = null, bool?onFire = null, TextureVariation?textureVariation = null, bool?visible = null, uint streamRange = 520 ) { Prop obj = new Prop(position, dimension, streamRange, 2) { Rotation = rotation, Model = model, Dynamic = isDynamic ?? null, Freeze = frozen ?? null, LodDistance = lodDistance ?? null, LightColor = lightColor ?? null, OnFire = onFire ?? null, TextureVariation = textureVariation ?? null, Visible = visible ?? null, PositionInitial = position, }; Prop.PropList.Add(obj); AltEntitySync.AddEntity(obj); return(obj); }
public void Add(Marker marker) { Markers.Add(marker); AltEntitySync.AddEntity(marker); }
public void Add(TextLabel textLabel) { TextLabels.Add(textLabel); AltEntitySync.AddEntity(textLabel); }
public void NetOwnerTest() { var readerCreate = mockNetworkLayer.CreateEventChannel.Reader; var readerNetOwnerChange = mockNetworkLayer.NetOwnerChangeEventChannel.Reader; var readAsyncCreate = readerCreate.ReadAsync(); var entity2 = new Entity(0, Vector3.Zero, 0, 2, 0); AltEntitySync.AddEntity(entity2); var createTask = readAsyncCreate.AsTask(); createTask.Wait(); Assert.True(readerCreate.TryRead(out var clientCCreateEvent)); var readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); var netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.a, netOwnerChangeTask.Result.Item1); Assert.True(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); entity2.Position = new Vector3(1, 1, 1); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.a, netOwnerChangeTask.Result.Item1); Assert.False(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.c, netOwnerChangeTask.Result.Item1); Assert.True(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); entity2.Position = new Vector3(0, 0, 0); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.c, netOwnerChangeTask.Result.Item1); Assert.False(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.a, netOwnerChangeTask.Result.Item1); Assert.True(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); mockNetworkLayer.ClientRepository.Remove(mockNetworkLayer.a); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.c, netOwnerChangeTask.Result.Item1); Assert.True(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); mockNetworkLayer.ClientRepository.Add(mockNetworkLayer.a); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.c, netOwnerChangeTask.Result.Item1); Assert.False(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); readAsyncNetOwnerChange = readerNetOwnerChange.ReadAsync(); netOwnerChangeTask = readAsyncNetOwnerChange.AsTask(); netOwnerChangeTask.Wait(); Assert.AreEqual(mockNetworkLayer.a, netOwnerChangeTask.Result.Item1); Assert.True(netOwnerChangeTask.Result.Item2.State); Assert.AreEqual(entity2, netOwnerChangeTask.Result.Item2.Entity); //TODO: add tests for changing client position, even when that won't have impact with the current computation state //TODO: but it makes the test more future proofed }