Esempio n. 1
0
        public void HasComponent()
        {
            const int entityId = 0;

            var mapper    = new ComponentMapper <Transform2>(3, _ => { });
            var component = new Transform2();

            Assert.False(mapper.Has(entityId));

            mapper.Put(entityId, component);

            Assert.True(mapper.Has(entityId));
        }
Esempio n. 2
0
        private void DrawAllModels(IEffectMatrices effect)
        {
            foreach (var entity in ActiveEntities)
            {
                if (_modelMapper.Has(entity))
                {
                    var model     = _modelMapper.Get(entity).Model;
                    var transform = _transformMapper.Get(entity);

                    if (model.VertexBuffer != null && model.IndexBuffer != null & model.PrimitiveCount != 0)
                    {
                        var sphere = BoundingSphere.CreateFromBoundingBox(model.BoundingBox);

                        if (CameraSystem.ActiveLens.BoundingFrustum.Intersects(sphere.Transform(transform.WorldMatrix)))
                        {
                            effect.World = transform.WorldMatrix;
                            DrawMesh((Effect)effect, model, _graphicsDevice);
                        }
                    }
                }
                else if (_primitiveMapper.Has(entity))
                {
                    var primitive = _primitiveMapper.Get(entity);
                    var transform = _transformMapper.Get(entity);

                    effect.World = transform.WorldMatrix;
                    Primitives.Instance.Draw((Effect)effect, primitive.Type);
                }
            }
        }
Esempio n. 3
0
        public override void Draw(GameTime gameTime)
        {
            _spriteBatch.Begin(samplerState: SamplerState.PointClamp, transformMatrix: _camera.GetViewMatrix());

            foreach (var entity in ActiveEntities)
            {
                var sprite = _animatedSpriteMapper.Has(entity)
                        ? _animatedSpriteMapper.Get(entity)
                        : _spriteMapper.Get(entity);

                var transform = _transforMapper.Get(entity);

                if (sprite != null)
                {
                    if (sprite is AnimatedSprite animatedSprite)
                    {
                        animatedSprite.Update(gameTime.GetElapsedSeconds());
                    }

                    _spriteBatch.Draw(sprite, transform);
                }
                if (_textMapper.Has(entity))
                {
                    var text = _textMapper.Get(entity);
                    _spriteBatch.DrawString(text.font, text.text, _transforMapper.Get(entity).Position, Color.White);
                }
            }
            _spriteBatch.End();
        }
Esempio n. 4
0
        public void Draw(GameTime gameTime)
        {
            _sb.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp);

            foreach (int entityId in ActiveEntities)
            {
                var      transform2D = _transform2DMapper.Get(entityId);
                GUIStyle guiStyle    = _guiStyleMapper.Get(entityId);

                // Box
                if (_boxMapper.Has(entityId))
                {
                    var box = _boxMapper.Get(entityId);
                    RenderBox(transform2D, box, guiStyle);
                }

                // Label
                if (_labelMapper.Has(entityId))
                {
                    var label = _labelMapper.Get(entityId);

                    RenderLabel(transform2D, label, guiStyle);
                }
            }

            _sb.End();
        }
Esempio n. 5
0
        public override void Draw(GameTime gameTime)
        {
            spriteBatch.Begin(samplerState: SamplerState.PointClamp);

            //spriteBatch.Draw(background, new Microsoft.Xna.Framework.Rectangle(0, 0, 1280, 720), Color.White);

            foreach (var entity in ActiveEntities)
            {
                var healthPoints = healthMapper.Has(entity) ? healthMapper.Get(entity) : null;
                if (healthPoints != null)
                {
                    var maxHealthPoints = 3;
                    for (int i = 0; i < maxHealthPoints; i++)
                    {
                        Vector2 position = new Vector2(32 + (i * 32), 32f);
                        spriteBatch.Draw(grayHeartSprite, new Transform2(position, 0f, Vector2.One));
                    }

                    for (int i = 0; i < healthPoints.LifePoints; i++)
                    {
                        Vector2 position = new Vector2(32 + (i * 32), 32f);
                        spriteBatch.Draw(redHeartSprite, new Transform2(position, 0f, Vector2.One));
                    }
                }
            }

            spriteBatch.End();
        }
Esempio n. 6
0
 protected override void OnEntityAdded(int entityId)
 {
     if (gravityPointMapper.Has(entityId) && transformMapper.Has(entityId))
     {
         gravityPointEntities.Add(entityId);
     }
 }
Esempio n. 7
0
        public override void Initialize()
        {
            base.Initialize();
            _positionMapper = new ComponentMapper<PositionComponent>(World);

            _entitySelector = entity => _positionMapper.Has(entity);
        }
        private bool IsTransporterAtNextTile(TilePosition transporterTilePosition, Vector2 motion)
        {
            var nextTilePostition = transporterTilePosition.Position + motion.NormalizedCopy();

            var(x, y) = ((int)nextTilePostition.X, (int)nextTilePostition.Y);
            return(_tileOccupationManager.GetItemsInTile(x, y).Any(e => _transporterMapper.Has(e)));
        }
Esempio n. 9
0
        public static bool TryGet <T>(this ComponentMapper <T> componentMapper, int entityId, out T component) where T : class
        {
            if (componentMapper.Has(entityId))
            {
                component = componentMapper.Get(entityId);
                return(true);
            }

            component = null;
            return(false);
        }
Esempio n. 10
0
        public void DeleteComponent()
        {
            const int entityId = 1;

            var mapper    = new ComponentMapper <Transform2>(2, _ => { });
            var component = new Transform2();

            mapper.Put(entityId, component);
            mapper.Delete(entityId);

            Assert.False(mapper.Has(entityId));
        }
Esempio n. 11
0
 private void OnSelectedEntityChanged(int?selectedentity)
 {
     if (selectedentity == null)
     {
         grid.Visible = false;
     }
     else
     {
         isPlayerCheckBox.IsPressed   = playerMapper.Has(selectedentity.Value);
         isPhysicalCheckBox.IsPressed = physicalMapper.Has(selectedentity.Value);
         grid.Visible = true;
     }
 }
Esempio n. 12
0
 private void OnSelectedEntityChanged(int?selectedentity)
 {
     if (selectedentity == null)
     {
         grid.Visible = false;
     }
     else
     {
         isPlayerCheckBox.IsPressed   = playerMapper.Has(selectedentity.Value);
         isPhysicalCheckBox.IsPressed = physicalMapper.Has(selectedentity.Value);
         isBronchCheckbox.IsPressed   = infoMapper.Get(selectedentity.Value).Sprite == SpriteType.Bronch;
         grid.Visible = true;
     }
 }
        public void OnDelete()
        {
            const int entityId = 1;

            var mapper    = new ComponentMapper <Transform2>(2, _ => { });
            var component = new Transform2();

            mapper.OnDelete += (entId) =>
            {
                Assert.Equal(entityId, entId);
                Assert.False(mapper.Has(entityId));
            };

            mapper.Put(entityId, component);
            mapper.Delete(entityId);
        }
        public override void Process(GameTime gameTime, int entityId)
        {
            var transporter  = _transporterMapper.Get(entityId);
            var tilePosition = _tilePositionMapper.Get(entityId);

            var transportables = _tileOccupationManager.GetItemsInArea(tilePosition.GetArea())
                                 .Where(entity => _transportableMapper.Has(entity))
                                 .Select(entity => _transportableMapper.Get(entity));

            foreach (var transportable in transportables)
            {
                var motion = new Vector2(0, (float)(-transporter.TransportSpeed * gameTime.ElapsedGameTime.TotalSeconds));
                if (IsTransporterAtNextTile(tilePosition, motion))
                {
                    transportable.Velocity = motion;
                }
            }
        }
        public override void Update(GameTime gameTime)
        {
            _bullets.AddRange(ActiveEntities.Where(e => _bulletMapper.Has(e)));
            _aliens.AddRange(ActiveEntities.Where(e => _alienMapper.Has(e)));

            foreach (var alien in _aliens)
            {
                var alienSprite    = _animatedSpriteMapper.Get(alien);
                var alienTransform = _transformMapper.Get(alien);
                var alienRect      = alienSprite.GetBoundingRectangle(alienTransform);
                var destroyAlien   = false;
                foreach (var bullet in _bullets)
                {
                    if (_bulletsToDestroy.Contains(bullet))
                    {
                        continue;
                    }
                    var bulletSprite    = _spriteMapper.Get(bullet);
                    var bulletTransform = _transformMapper.Get(bullet);
                    var bulletRect      = bulletSprite.GetBoundingRectangle(bulletTransform);

                    if (bulletRect.Intersects(alienRect))
                    {
                        destroyAlien = true;
                        _bulletsToDestroy.Add(bullet);
                        break;
                    }
                }

                if (destroyAlien)
                {
                    DestroyEntity(alien);
                }
            }

            foreach (var destroy in _bulletsToDestroy)
            {
                DestroyEntity(destroy);
            }

            _bulletsToDestroy.Clear();
            _bullets.Clear();
            _aliens.Clear();
        }
Esempio n. 16
0
        public override void Draw(GameTime gameTime)
        {
            foreach (var entity in ActiveEntities)
            {
                var sprite = animatedSpriteMapper.Has(entity)
                                   ? animatedSpriteMapper.Get(entity)
                    : spriteMapper.Get(entity);
                var transform = transforMapper.Get(entity);

                if (sprite is AnimatedSprite animatedSprite)
                {
                    animatedSprite.Update(gameTime.GetElapsedSeconds());
                }

                spriteBatch.Begin(samplerState: SamplerState.PointClamp, transformMatrix: camera.GetViewMatrix());

                spriteBatch.Draw(sprite, transform);

                spriteBatch.End();

                var player = playerMapper.Get(entity);
                if (player != null)
                {
                    if (player.ImmuneTimer > 1f)
                    {
                        spriteBatch.Begin(effect: damageEffect, transformMatrix: camera.GetViewMatrix());
                        spriteBatch.Draw(sprite, transform);
                        spriteBatch.End();
                    }
                }

                var enemy = enemyMapper.Get(entity);
                if (enemy != null)
                {
                    if (enemy.ImmuneTimer > 1f)
                    {
                        spriteBatch.Begin(effect: damageEffect, transformMatrix: camera.GetViewMatrix());
                        spriteBatch.Draw(sprite, transform);
                        spriteBatch.End();
                    }
                }
            }
        }
Esempio n. 17
0
        public override void Draw(GameTime gameTime)
        {
            if (_scene.CameraManager.View == null)
            {
                Kazaam.XNAGame.Log("Scene camera is not set, cannot render scene");
                return;
            }
            var transformMatrix = _scene.CameraManager.View;

            _scene.XNAWindow.spriteBatch.Begin(transformMatrix: transformMatrix, samplerState: SamplerState.PointClamp, sortMode: SpriteSortMode.FrontToBack);

            foreach (var entity in ActiveEntities)
            {
                // Every renderable object has these
                var gameObject      = _gameObjectMapper.Get(entity);
                var renderComponent = _renderMapper.Get(entity);

                Rectangle sourceRectangle = new Rectangle();
                if (_animationMapper.Has(entity))
                {
                    var animation = _animationMapper.Get(entity);
                    sourceRectangle = animation.CurrentAnimation.CurrentRectangle;
                    animation.CurrentAnimation.Update((float)gameTime.ElapsedGameTime.TotalMilliseconds);
                }

                // Draw background. If not a background, draw the object normally.
                if (_backgroundMapper.Has(entity))
                {
                    var background = _backgroundMapper.Get(entity);
                    //_game.XNAWindow.spriteBatch.Draw(background.Texture.Texture, new Vector2(_game.scene.CameraManager.Position.X - _game.scene.CameraManager.Viewport.Width / 2, _game.scene.CameraManager.Position.Y - _game.scene.CameraManager.Viewport.Height / 4), background.Rectangle(_game.scene.CameraManager.Viewport), Color.White, 0, Vector2.Zero, background.Zoom, SpriteEffects.None, background.LayerDepth);
                    //_game.XNAWindow.spriteBatch.Draw(background.Texture.Texture, new Vector2(_game.scene.CameraManager.Position.X - _game.scene.CameraManager.Viewport.Width / 2, _game.scene.CameraManager.Position.Y - _game.scene.CameraManager.Viewport.Height / 2), background.Rectangle(_game.scene.CameraManager.Viewport), Color.White, 0, Vector2.Zero, background.Zoom, SpriteEffects.None, background.LayerDepth);
                }
                else
                {
                    DrawObject(gameObject, sourceRectangle, renderComponent);
                }
            }

            // End the spritebatch.
            _scene.XNAWindow.spriteBatch.End();
        }
Esempio n. 18
0
        public override void Draw(GameTime gameTime)
        {
            _spriteBatch.Begin(samplerState: SamplerState.PointClamp, transformMatrix: _camera.GetViewMatrix());

            foreach (var entity in ActiveEntities)
            {
                var sprite = _animatedSpriteMapper.Has(entity)
                    ? _animatedSpriteMapper.Get(entity)
                    : _spriteMapper.Get(entity);
                var transform = _transforMapper.Get(entity);

                if (sprite is AnimatedSprite animatedSprite)
                {
                    animatedSprite.Update(gameTime.GetElapsedSeconds());
                }

                _spriteBatch.Draw(sprite, transform);
            }

            _spriteBatch.End();
        }
Esempio n. 19
0
        public override void Draw(GameTime gameTime)
        {
            _spriteBatch.Begin();

            foreach (var entity in ActiveEntities)
            {
                var sprite = _animatedSpriteMapper.Has(entity)
                    ? _animatedSpriteMapper.Get(entity)
                    : _spriteMapper.Get(entity);

                var transform = _transformMapper.Get(entity);
                if (sprite is AnimatedSprite animatedSprite)
                {
                    animatedSprite.Update(gameTime.GetElapsedSeconds());
                }

                if (sprite.IsVisible)
                {
                    var texture         = sprite.TextureRegion.Texture;
                    var sourceRectangle = sprite.TextureRegion.Bounds;
                    var position        = transform.WorldPosition;
                    var rotation        = transform.WorldRotation;
                    var scale           = transform.WorldScale;

                    _spriteBatch.Draw(texture,
                                      position,
                                      sourceRectangle,
                                      sprite.Color,
                                      -rotation,
                                      sprite.Origin,
                                      scale,
                                      sprite.Effect,
                                      0);
                }
            }

            _spriteBatch.End();
        }
Esempio n. 20
0
        public override void Update(GameTime gameTime)
        {
            var elapsedSeconds = gameTime.GetElapsedSeconds();

            foreach (var entityId in ActiveEntities)
            {
                var transform = _transformMapper.Get(entityId);
                var raindrop  = _raindropMapper.Get(entityId);

                raindrop.Velocity  += new Vector2(0, 500) * elapsedSeconds;
                transform.Position += raindrop.Velocity * elapsedSeconds;

                if (transform.Position.Y >= 480 && !_expiryMapper.Has(entityId))
                {
                    for (var i = 0; i < 3; i++)
                    {
                        var velocity = new Vector2(_random.NextSingle(-100, 100), -raindrop.Velocity.Y * _random.NextSingle(0.1f, 0.2f));
                        var id       = CreateRaindrop(transform.Position.SetY(479), velocity, (i + 1) * 0.5f);
                        _expiryMapper.Put(id, new Expiry(1f));
                    }

                    DestroyEntity(entityId);
                }
            }

            _spawnDelay -= gameTime.GetElapsedSeconds();

            if (_spawnDelay <= 0)
            {
                for (var q = 0; q < 50; q++)
                {
                    var position = new Vector2(_random.NextSingle(0, 800), _random.NextSingle(-240, -480));
                    CreateRaindrop(position);
                }

                _spawnDelay = _random.NextSingle(_minSpawnDelay, _maxSpawnDelay);
            }
        }
        public override void Update(GameTime gameTime)
        {
            foreach (var entityId in ActiveEntities)
            {
                var transportable = _transportableMapper.Get(entityId);
                var tilePosition  = _tilePositionMapper.Get(entityId);

                var newPosition = tilePosition.Position + transportable.Velocity;
                if (!_tileOccupationManager
                    .GetItemsInArea(new RectangleF(newPosition.X, newPosition.Y, tilePosition.TileSpan.X, tilePosition.TileSpan.Y))
                    .Where(e => e != entityId)
                    .Any(e => _productMapper.Has(e)))
                {
                    tilePosition.Move(transportable.Velocity);
                }
            }

            foreach (var entityId in ActiveEntities)
            {
                var transportable = _transportableMapper.Get(entityId);
                transportable.Velocity = Vector2.Zero;
            }
        }
Esempio n. 22
0
 private bool IsMovable(int entityId)
 {
     return(transformMapper.Has(entityId) && dynamicMapper.Has(entityId));
 }
Esempio n. 23
0
 public static Option <T> TryGet <T>(this ComponentMapper <T> mapper, int entityId) where T : class
 {
     return(mapper.Has(entityId) ? Option <T> .Some(mapper.Get(entityId)) : Option <T> .None);
 }
Esempio n. 24
0
        public override void Draw(GameTime gameTime)
        {
            var previousCullMode = _graphicsDevice.RasterizerState.CullMode;

            if (GraphicsManager.Instance.EnableLights)
            {
                _graphicsDevice.SetRenderTarget(ShaderManager.Instance.Lights);
                _graphicsDevice.Clear(Color.Transparent);

                _graphicsDevice.BlendState = BlendState.AlphaBlend;
                _graphicsDevice.BlendState.AlphaBlendFunction    = BlendFunction.Add;
                _graphicsDevice.BlendState.AlphaSourceBlend      = Blend.One;
                _graphicsDevice.BlendState.AlphaDestinationBlend = Blend.One;

                foreach (var entity in ActiveEntities)
                {
                    if (_directionalLightMapper.Has(entity))
                    {
                        var light = _directionalLightMapper.Get(entity);

                        ShaderManager.Instance.DirectionalLightEffect.LightDirection = light.Direction;
                        ShaderManager.Instance.DirectionalLightEffect.LightColor     = light.Color.ToVector3();

                        ShaderManager.Instance.DrawFullscreenQuad(ShaderManager.Instance.DirectionalLightEffect);
                    }

                    if (_pointLightMapper.Has(entity))
                    {
                        var light = _pointLightMapper.Get(entity);

                        ShaderManager.Instance.PointLightEffect.LightColor     = light.Color.ToVector3();
                        ShaderManager.Instance.PointLightEffect.LightIntensity = light.Intensity;
                        ShaderManager.Instance.PointLightEffect.LightPosition  = light.WorldPosition;
                        ShaderManager.Instance.PointLightEffect.LightRadius    = light.Radius;
                        ShaderManager.Instance.PointLightEffect.World          = light.WorldMatrix;

                        var cameraToCenter = Vector3.Distance(CameraSystem.ActiveLens.Position, light.WorldPosition);
                        _graphicsDevice.RasterizerState.CullMode = cameraToCenter <= light.Radius ? CullMode.CullClockwiseFace : CullMode.CullCounterClockwiseFace;

                        _graphicsDevice.Clear(ClearOptions.DepthBuffer, Color.White, 1, 0);
                        Primitives.Instance.Draw(ShaderManager.Instance.PointLightEffect, PrimitiveType.Sphere);
                    }
                }
            }

            if (GraphicsManager.Instance.EnableSSAO)
            {
                _graphicsDevice.RasterizerState.CullMode = previousCullMode;
                _graphicsDevice.SetRenderTarget(ShaderManager.Instance.SSAO);
                ShaderManager.Instance.DrawFullscreenQuad(ShaderManager.Instance.SSAOEffect);
                _graphicsDevice.BlendState = BlendState.Opaque;
            }

            _graphicsDevice.RasterizerState.CullMode = previousCullMode;
            _graphicsDevice.SetRenderTarget(ShaderManager.Instance.CombineFinal);
            _graphicsDevice.BlendState = BlendState.Opaque;
            ShaderManager.Instance.DrawFullscreenQuad(ShaderManager.Instance.CombineFinalEffect);

            if (GraphicsManager.Instance.EnableSky)
            {
                ShaderManager.Instance.DrawFullscreenQuad(ShaderManager.Instance.SkyEffect);
            }
        }
 private bool OutputPositionIsOccupied(TilePosition outputPosition)
 {
     return(_tileOccupationManager.GetItemsInArea(outputPosition.GetArea()).Any(ie => _blockableMapper.Has(ie) || _productMapper.Has(ie)));
 }
Esempio n. 26
0
        public override void Draw(GameTime gameTime)
        {
            var previousCullMode = _graphicsDevice.RasterizerState.CullMode;

            _graphicsDevice.RasterizerState.FillMode = FillMode.WireFrame;
            _graphicsDevice.RasterizerState.CullMode = CullMode.None;

            foreach (var viewport in _viewportRenderers)
            {
                viewport.Draw(gameTime);

                foreach (var entity in ActiveEntities)
                {
                    if (entity == DebugUIRenderSystem.SelectedEntity)
                    {
                        continue;
                    }

                    if (_modelMapper.Has(entity))
                    {
                        var model     = _modelMapper.Get(entity).Model;
                        var transform = _transformMapper.Get(entity);

                        viewport.DrawMesh(model, transform);
                    }
                    if (_primitiveMapper.Has(entity))
                    {
                        var primitive = _primitiveMapper.Get(entity);
                        var transform = _transformMapper.Get(entity);

                        viewport.DrawBoundingBox(transform, Primitives.Instance.GetPrimitiveModel(primitive.Type).BoundingBox, new Color(100, entity % 128 + 128, entity % 64 + 128));
                    }
                }

                if (DebugUIRenderSystem.SelectedEntity != null)
                {
                    if (_transformMapper.Has((int)DebugUIRenderSystem.SelectedEntity))
                    {
                        var transform = _transformMapper.Get((int)DebugUIRenderSystem.SelectedEntity);
                        viewport.DrawOriginMarker(transform.Position, viewport.Zoom);

                        if (_modelMapper.Has((int)DebugUIRenderSystem.SelectedEntity))
                        {
                            var model = _modelMapper.Get((int)DebugUIRenderSystem.SelectedEntity);
                            viewport.DrawBoundingBox(transform, model.Model.BoundingBox);

                            viewport.DrawMesh(model.Model, transform, Color.Red);
                        }
                        else if (_primitiveMapper.Has((int)DebugUIRenderSystem.SelectedEntity))
                        {
                            var primitive = _primitiveMapper.Get((int)DebugUIRenderSystem.SelectedEntity);
                            viewport.DrawBoundingBox(transform, Primitives.Instance.GetPrimitiveModel(primitive.Type).BoundingBox);
                        }
                        else
                        {
                            viewport.DrawBoundingBox(transform, new BoundingBox(
                                                         new Vector3(-0.5f, -0.5f, -0.5f),
                                                         new Vector3(0.5f, 0.5f, 0.5f)));
                        }
                    }
                }
            }

            _graphicsDevice.RasterizerState.FillMode = FillMode.Solid;
            _graphicsDevice.RasterizerState.CullMode = previousCullMode;
        }