public GameObject BuildStaticRectangularObstacle(
            Vector2 translation, 
            Rectangle rect,
            float friction,
            Color color)
        {
            GameObject obstacle = new GameObject(this._game);

            List<Vector2> vertices = new List<Vector2>();

            vertices.Add(new Vector2(rect.Left, rect.Top));
            vertices.Add(new Vector2(rect.Right, rect.Top));
            vertices.Add(new Vector2(rect.Right, rect.Bottom));
            vertices.Add(new Vector2(rect.Left, rect.Bottom));

            Transform2DComponent transformComponent = new Transform2DComponent(
                obstacle,
                translation,
                0.0f,
                new Vector2(1.0f, 1.0f));
            MeshComponent meshComponent = new MeshComponent(obstacle, vertices);
            ColorComponent colorComponent = new ColorComponent(obstacle, color);
            BoundingBoxComponent boundingBoxComponent = new BoundingBoxComponent(
                obstacle,
                new List<Shape>{
                    new Shape(vertices)
                },
                false);
            PhysicalPropertiesComponent physicsPropertiesComponent =
                new PhysicalPropertiesComponent(obstacle, friction);
            IsPhysicalComponent isPhysicalComponent = new IsPhysicalComponent(obstacle, false);

            obstacle.AddComponent(transformComponent);
            obstacle.AddComponent(meshComponent);
            obstacle.AddComponent(colorComponent);
            obstacle.AddComponent(boundingBoxComponent);
            obstacle.AddComponent(physicsPropertiesComponent);
            obstacle.AddComponent(isPhysicalComponent);

            return obstacle;
        }
        public static GameObject BuildDynamicEntity(
            Game1 game,
            Vector2 position,
            float rotation,
            Vector2 scale,
            float maxGroundSpeed,
            float maxAirSpeed,
            SpriteType spriteType,
            List<Shape> boundingBoxes)
        {
            GameObject entity = new GameObject(game);

            Transform2DComponent transformComponent = new Transform2DComponent(
                entity,
                position,
                rotation,
                scale);
            SpriteComponent sprite = new SpriteComponent(entity, spriteType, game);
            BoundingBoxComponent bbComponent = new BoundingBoxComponent(entity, boundingBoxes, true);
            CurrentActionComponent caComponent = new CurrentActionComponent(
                entity,
                new ActionComponent(DirectionalAction.Left, SecondaryAction.Stand, PrimaryAction.None),
                new Dictionary<ActionDefinition, ActionInfo>());
            GravityComponent gravComponent = new GravityComponent(entity, 1.0f);
            MotionPropertiesComponent motionComponent = new MotionPropertiesComponent(
                entity, 1.0f, maxGroundSpeed, maxAirSpeed);
            IsPhysicalComponent isPhysicalComponent = new IsPhysicalComponent(entity, true);
            IsCharacterComponent isCharComponent = new IsCharacterComponent(entity);
            SoundComponent soundComponent = new SoundComponent(entity);

            entity.AddComponent(transformComponent);
            entity.AddComponent(sprite);
            entity.AddComponent(bbComponent);
            entity.AddComponent(caComponent);
            entity.AddComponent(gravComponent);
            entity.AddComponent(motionComponent);
            entity.AddComponent(isPhysicalComponent);
            entity.AddComponent(isCharComponent);
            entity.AddComponent(soundComponent);

            return entity;
        }