private void SpawnZombie(ITrigger trigger) { if (!CanSpawn) { return; } var entities = Engine.GetEntitiesInChunk(UniqueKey.ChunkLocation); var countInArea = entities.Count(item => item.GetIsZombie()); var countToSpawn = (int)Math.Floor((Engine.ChunkWorldSize * Engine.ChunkWorldSize * Density) - countInArea); if (countToSpawn <= 0) { return; } if (Engine.Entities.Count(x => x.GetIsZombie()) > 10) { return; } var zombies = Engine.SpawnEntityAtRandomObservedLocation((int)EntityTypeEnum.Zombie, UniqueKey.ChunkLocation, countToSpawn); foreach (var zombie in zombies) { var rotation = (float)(StaticRng.Random.NextDouble() * 2 * Math.PI); var speed = zombie.GetWalkSpeed(); var movementDir = DirectionUtil.CalculateVector(rotation); zombie.SetRotation(rotation); zombie.SetMovementVector(movementDir * speed); } }
public void PerformBehaviour(Entity target, Entity instigator) { if (!target.HasInventory()) { return; } var inventory = target.GetInventory(); foreach (var item in inventory.GetContent().Values) { if (item == null) { continue; } var position = target.GetPosition(); var distance = StaticRng.Random.NextDouble(0.2, 1); var rotation = StaticRng.Random.NextDouble(-Math.PI, Math.PI); var addition = DirectionUtil.CalculateVector((float)rotation) * (float)distance; var inventoryItem = _server.EntityFactory.Get((short)EntityTypeEnum.InventoryItem); inventoryItem.SetInventoryItem(item); inventoryItem.SetPosition(position + addition); _server.SpawnEntity(inventoryItem); } target.RemoveInventory(); }
public void PerformBehaviour(Entity target, Entity instigator) { var count = StaticRng.Random.Next(_minCount, _maxCount); if (count == 0) { return; } var distance = StaticRng.Random.NextDouble(0.2, 1); var rotation = StaticRng.Random.NextDouble(-Math.PI, Math.PI); var position = target.GetPosition(); var addition = DirectionUtil.CalculateVector((float)rotation) * (float)distance; var item = _server.ItemGeneratorDictionary[_itemType].Generate(); if (count > item.GetItemSpec().GetStackMax()) { count = item.GetItemSpec().GetStackMax(); Debug.Assert(true, "Unable to generate a stack as large as requested"); } item.SetCount((short)count); var inventoryItem = _server.EntityFactory.Get((short)EntityTypeEnum.InventoryItem); inventoryItem.SetInventoryItem(item); inventoryItem.SetPosition(position + addition); _server.Engine.SpawnEntity(inventoryItem); }
private void SetDirection(Entity target, float newRotation) { var vector = target.GetMovementVector(); var newVector = DirectionUtil.CalculateVector(newRotation) * vector.Length; target.SetRotation(newRotation); target.SetMovementVector(newVector); }
private void SetDestination(Entity toProcess, Vector3 destination) { toProcess.LookAt(destination); var movementVector = toProcess.GetMovementVector(); var newMovementVector = DirectionUtil.CalculateVector(toProcess.GetRotation()) * movementVector.Length; toProcess.SetMovementVector(newMovementVector); }
protected void React(Entity target, Vector3 origin) { target.LookAt(origin); var direction = DirectionUtil.CalculateVector(target.GetRotation()); var speed = target.GetMovementVector().Length; target.SetMovementVector(direction * speed); var now = Timer.GetTime(); target.SetStartNoiseChaseTime(now); }
protected override bool PerformUseImpl(Entity owner, InventoryItem weapon) { var bulletData = Fire(owner, weapon, owner.GetRotation()); var count = weapon.GetLoadedAmmoCount(); weapon.SetLoadedAmmoCount((short)(count - 1)); var msg = new ServerFirePistolMessage(); msg.StartPoint = owner.GetPosition() + DirectionUtil.CalculateVector(owner.GetRotation()) * 0.5f; msg.BulletEffects.Add(bulletData); GameServer.Engine.SendMessage(msg); return(weapon.GetLoadedAmmoCount() != 0); }
public static void SetKeyboardDirection(this Entity entity, Direction dir) { entity.GetProperty(GameEntityPropertyEnum.KeyboardMovementDir).ByteValue = (byte)dir; switch (dir) { case Direction.None: entity.SetMovementVector(new Vector3(0, 0, 0)); break; default: var directionVector = DirectionUtil.CalculateVector(DirectionUtil.GetRotationFromDirection(dir)); var speed = entity.GetIsRunning() ? entity.GetRunSpeed() : entity.GetWalkSpeed(); entity.SetMovementVector(directionVector * speed); break; } }
protected override bool PerformUseImpl(Entity owner, InventoryItem weapon) { var bulletCount = StaticRng.Random.Next(5, 11); var msg = new ServerFireShotgunMessage(); msg.StartPoint = owner.GetPosition() + DirectionUtil.CalculateVector(owner.GetRotation()) * 0.5f; var count = weapon.GetLoadedAmmoCount(); weapon.SetLoadedAmmoCount((short)(count - 1)); var spread = weapon.GetItemSpec().GetBulletSpread(); for (var i = 0; i < bulletCount; ++i) { var rotation = (float)(owner.GetRotation() + (StaticRng.Random.NextDouble() * spread) - (spread / 2)); msg.BulletEffects.Add(Fire(owner, weapon, rotation)); } GameServer.Engine.SendMessage(msg); return(false); }
private Vector3 DefaultShootSource(Entity owner) { return(owner.GetPosition() + DirectionUtil.CalculateVector(owner.GetRotation()) * 0.5f); }