Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        private void SetDirection(Entity target, float newRotation)
        {
            var vector    = target.GetMovementVector();
            var newVector = DirectionUtil.CalculateVector(newRotation) * vector.Length;

            target.SetRotation(newRotation);
            target.SetMovementVector(newVector);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
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;
            }
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
 private Vector3 DefaultShootSource(Entity owner)
 {
     return(owner.GetPosition() + DirectionUtil.CalculateVector(owner.GetRotation()) * 0.5f);
 }