Exemplo n.º 1
0
        public List<EntityInfo> NearestEntities(Entity sender, float distance)
        {
            var entities = (from entity in _worldManager.EntityList
                let d = Utils.GetDistance((Vector2) sender.GetCustomData()["faceposition"], sender.Body.Position)
                where d <= distance
                select entity).ToList();

            return entities.Select(GetEntityInfo).ToList();
        }
Exemplo n.º 2
0
        //Creating a child creature
        public Entity CreateCreature(Entity parent)
        {
            var generation = (int) parent.GetCustomData()["generation"];
            var sprite = _spriteFactory.CreateCreatureSprite();
            var attackSprite = _spriteFactory.CreateCreatureAttackSprite();

            //Position and size is relative to parent's ones
            var position = ConvertUnits.ToDisplayUnits(parent.Body.Position);
            var size =
                    Utils.Range(Utils.RandomSpread(parent.Size, 0.2f), GameSettings.CreatureSizeMin / 1.5f,
                        GameSettings.CreatureSizeMax * 1.5f);

            var x = Utils.Random.Next(Math.Max((int) (position.X - sprite.ObjectSize*size), GameSettings.Borders.X),
                Math.Min((int) (position.X + sprite.ObjectSize*size),
                    GameSettings.Borders.X + GameSettings.Borders.Width));
            var y = Utils.Random.Next(Math.Max((int) (position.Y - sprite.ObjectSize*size), GameSettings.Borders.Y),
                Math.Min((int) (position.Y + sprite.ObjectSize*size),
                    GameSettings.Borders.Y + GameSettings.Borders.Height));

            var creature = new Creature(_worldProxy, sprite, attackSprite, ConvertUnits.ToSimUnits(new Vector2(x, y)),
                RandomRotation(), size, generation + 1);

            //We need to clone parent's neural network to child (with some interferences)

            var parentNetwork = (RecurrentNetwork) parent.GetCustomData()["neuralnetwork"];
            var network = (RecurrentNetwork) creature.GetCustomData()["neuralnetwork"];

            for (var i = 0; i < network.Layers.Count(); i++)
            {
                var layer = parentNetwork.Layers.ToList();
                var newLayer = network.Layers.ToList();
                var neuronsCount = layer[i].NeuronCount;
                if (i == 0) neuronsCount -= layer[2].NeuronCount;
                for (var j = 0; j < neuronsCount; j++)
                {
                    var neurons = layer[i].Neurons.ToList();
                    var newNeurons = newLayer[i].Neurons.ToList();
                    for (var k = 0; k < neurons[j].SourceSynapses.Count; k++)
                        newNeurons[j].SourceSynapses[k].Weight = Utils.RandomSpread(
                            neurons[j].SourceSynapses[k].Weight, GameSettings.NetworkRandomSpread);
                    for (var k = 0; k < neurons[j].DestinationSynapses.Count; k++)
                        newNeurons[j].DestinationSynapses[k].Weight =
                            Utils.RandomSpread(neurons[j].DestinationSynapses[k].Weight,
                                GameSettings.NetworkRandomSpread);
                }
            }

            return creature;
        }
Exemplo n.º 3
0
        private void DrawHealthBar(Entity creature)
        {
            var health = (float) creature.GetCustomData()["health"];
            var maxHealth = (float)creature.GetCustomData()["maxhealth"];

            var position =
                Utils.TransformCoordinates(new Vector2(ConvertUnits.ToDisplayUnits(creature.Body.Position.X),
                    ConvertUnits.ToDisplayUnits(creature.Body.Position.Y)));
            var centerX = position.X;
            var centerY = position.Y - creature.CurrentSprite.ObjectSize * 2 * creature.Size - 40 +
                          GameSettings.HealthBarHeight - 20 / creature.Size;

            var rectangle = new Rectangle(
                    (int)(centerX - (float)GameSettings.HealthBarWidth / 2),
                    (int)(centerY - (float)GameSettings.HealthBarHeight / 2),
                    (int)Math.Ceiling((health / maxHealth) * GameSettings.HealthBarWidth),
                    GameSettings.HealthBarHeight
                    );
            var borderRectangle = new Rectangle(
                    (int)(centerX - (float)GameSettings.HealthBarWidth / 2 - 2),
                    (int)(centerY - (float)GameSettings.HealthBarHeight / 2 - 2),
                    GameSettings.HealthBarWidth + 4,
                    GameSettings.HealthBarHeight + 4

                );

            var color = new Color(
                    (int)((maxHealth - health) * 2.55f),
                    (int)(health / maxHealth * 255),
                    0
                    );

            GraphicsManager.DrawBorder(borderRectangle, 2, Color.Black);
            GraphicsManager.DrawColoredRectangle(rectangle, color);
        }
Exemplo n.º 4
0
        private void DrawBreedingEnergyBar(Entity creature)
        {
            var breedingSatiety = (float) creature.GetCustomData()["breedingsatiety"];
            var breedingTimer = (float) creature.GetCustomData()["breedingtimer"];
            var breedingEnergy = (float)creature.GetCustomData()["breedingenergy"];
            var energy = breedingSatiety + breedingTimer;

            var position =
                Utils.TransformCoordinates(new Vector2(ConvertUnits.ToDisplayUnits(creature.Body.Position.X),
                    ConvertUnits.ToDisplayUnits(creature.Body.Position.Y)));
            var centerX = position.X;
            var centerY = position.Y - creature.CurrentSprite.ObjectSize * 2 * creature.Size - 80 +
                          GameSettings.HealthBarHeight - 20 / creature.Size;

            var rectangle = new Rectangle(
                (int)(centerX - (float)GameSettings.HealthBarWidth / 2),
                (int)(centerY - (float)GameSettings.HealthBarHeight / 2),
                (int)Math.Ceiling((energy / breedingEnergy) * GameSettings.HealthBarWidth),
                GameSettings.HealthBarHeight
                );

            var borderRectangle = new Rectangle(
                    (int)(centerX - (float)GameSettings.HealthBarWidth / 2 - 2),
                    (int)(centerY - (float)GameSettings.HealthBarHeight / 2 - 2),
                    GameSettings.HealthBarWidth + 4,
                    GameSettings.HealthBarHeight + 4

                );

            var color = new Color(
                255,
                (int)(energy / breedingEnergy * 255),
                (int)((breedingEnergy - energy) * 2.55f)
                );

            GraphicsManager.DrawBorder(borderRectangle, 2, Color.Black);
            GraphicsManager.DrawColoredRectangle(rectangle, color);
        }