private void Play(Scene scene) { _updatesCounter++; if (_updatesCounter > PipeTimeInterval) { _updatesCounter = 0; var pipeYPos = MinimumPipeYPos + _random.NextDouble() * (MaximumPipeYPos - MinimumPipeYPos); var pipeUp = _entityFactory.CreatePipe(); pipeUp.GetComponent <Transform2DComponent>().Translation = new Vector2(PipeInitialXPos, pipeYPos); pipeUp.AddComponent(_entityFactory.CreateIncrementScoreComponent()); scene.AddEntity(pipeUp); var pipeDown = _entityFactory.CreatePipe(); var pipeDownTransform = pipeDown.GetComponent <Transform2DComponent>(); var spriteRendererComponent = pipeDown.GetComponent <SpriteRendererComponent>(); Debug.Assert(spriteRendererComponent.Sprite != null, "spriteRendererComponent.Sprite != null"); var pipeHeight = spriteRendererComponent.Sprite.Rectangle.Height * pipeDownTransform.Scale.Y; pipeDownTransform.Translation = new Vector2(PipeInitialXPos, pipeYPos + pipeHeight + GapBetweenPipes); pipeDownTransform.Scale = pipeDownTransform.Scale.WithY(-pipeDownTransform.Scale.Y); scene.AddEntity(pipeDown); } }