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)); }
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); } } }
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(); }
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(); }
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(); }
protected override void OnEntityAdded(int entityId) { if (gravityPointMapper.Has(entityId) && transformMapper.Has(entityId)) { gravityPointEntities.Add(entityId); } }
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))); }
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); }
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)); }
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; } }
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(); }
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(); } } } }
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(); }
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(); }
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(); }
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; } }
private bool IsMovable(int entityId) { return(transformMapper.Has(entityId) && dynamicMapper.Has(entityId)); }
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); }
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))); }
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; }