public void Process(Entity toProcess, GameTime gameTime) { if (!IsApplicableTo(toProcess)) { return; } // TODO pass this in so it can be controlled Random rand = new Random(); RandomPositionOffsetComponent offset = (RandomPositionOffsetComponent)toProcess.components[typeof(RandomPositionOffsetComponent)]; int minX = (int)Math.Min(offset.Maximum.X, offset.Minimum.X); int maxX = (int)Math.Max(offset.Maximum.X, offset.Minimum.X); int minY = (int)Math.Min(offset.Maximum.Y, offset.Minimum.Y); int maxY = (int)Math.Max(offset.Maximum.Y, offset.Minimum.Y); int x = rand.Next(minX, maxX); int y = rand.Next(minY, maxY); PositionDeltaComponent delta = new PositionDeltaComponent(); if (toProcess.components.ContainsKey(typeof(PositionDeltaComponent))) { delta = (PositionDeltaComponent)toProcess.components[typeof(PositionDeltaComponent)]; delta.Delta += new Vector2(x, y); } else { delta.Delta = new Vector2(x, y); toProcess.AddComponent(delta); } toProcess.RemoveComponent(offset); }
private Entity createExplosionEntity(Game game, AABBComponent parentAABB) { Entity expl = new Entity(); //Component: Has a texture TextureComponent tex = new TextureComponent(); tex.Texture = game.Content.Load<Texture2D>("explosion"); tex.SourceRect = tex.Texture.Bounds; expl.AddComponent(tex); //Component: Has an animation AnimationComponent anim = new AnimationComponent(); anim.CurrentFrameIndex = 0; anim.FrameDuration = 45; anim.Looping = false; anim.NumFrames = 12; anim.TimeSinceFrameChange = 0; expl.AddComponent(anim); //Component: Is rendered at a specific layer (just behind the player) RenderLayerComponent layer = new RenderLayerComponent(); layer.LayerID = 9; expl.AddComponent(layer); //Component: Has a bounding box AABBComponent aabb = new AABBComponent(); aabb.Height = 134; aabb.Width = 134; expl.AddComponent(aabb); //Component: Destroys itself once its animation completes DestroyedWhenAnimationCompleteComponent destructor = new DestroyedWhenAnimationCompleteComponent(); expl.AddComponent(destructor); //Component: Is offset such that it is concentric with its parent PositionDeltaComponent delta = new PositionDeltaComponent(); float deltaX = parentAABB.Width / 2.0f - aabb.Width / 2.0f; float deltaY = parentAABB.Height / 2.0f - aabb.Height / 2.0f; delta.Delta = new Vector2(deltaX, deltaY); expl.AddComponent(delta); //Component: Plays an explosion sound SoundEffectComponent soundEffect = new SoundEffectComponent(); soundEffect.effect = game.Content.Load<SoundEffect>("freesoundsorg/87529__robinhood76__01448-distant-big-explosion-2"); expl.AddComponent(soundEffect); return expl; }
public void Process(Entity toProcess, GameTime gameTime) { if (!IsApplicableTo(toProcess)) { return; } KeyboardState currentKeyboardState = Keyboard.GetState(); Vector2 pos = new Vector2(); float speed = ((MoveSpeedComponent)toProcess.components[typeof(MoveSpeedComponent)]).MoveSpeed; // Use the Keyboard if (currentKeyboardState.IsKeyDown(Keys.Left)) { pos.X -= speed; } if (currentKeyboardState.IsKeyDown(Keys.Right)) { pos.X += speed; } if (currentKeyboardState.IsKeyDown(Keys.Up)) { pos.Y -= speed; } if (currentKeyboardState.IsKeyDown(Keys.Down)) { pos.Y += speed; } // Indicate that the player entity should be translated PositionDeltaComponent delta = new PositionDeltaComponent(); delta.Delta = pos; toProcess.AddComponent(delta); }