private Scene(GameSettings gameSettings)
 {
     _gameSettings     = gameSettings;
     Swarm             = new AlienShipFactory(_gameSettings).GetSwarm();
     Ground            = new GroundFactory(_gameSettings).GetGround();
     PlayerShip        = new PlayerShipFactory(_gameSettings).GetPlayer();
     PlayerShipMissile = new List <GameObject>();
     AlienShipMissile  = new List <GameObject>();
 }
        public GameObject Create(string objectType)
        {
            GameObject created = null;

            string[] parts = objectType.Split('_');

            IFactory specialisedFactory = null;

            if (parts[0] == "Ground")
            {
                specialisedFactory = new GroundFactory();
            }
            else if(parts[0] == "Vegitation")
            {
                 specialisedFactory = new VegitationFactory();
            }
            else
            {
                throw new Exception("WorldObjectFactory does not exists");
            }

            return specialisedFactory.Create(parts[1]);
        }
示例#3
0
        public GameStatePlay(string playerSkin)
        {
            _backColor = new Color4(0.6f, 0.8f, 0.85f, 1f);

            // SHADERS RETRIEVING *********************************************************** //
            _flatColorShader = ShaderManager.Get("FlatColorShader");
            _baseShader      = ShaderManager.Get("Shader");
            _3dSpriteShader  = ShaderManager.Get("SpriteSheet");

            // FONT RETRIEVING ************************************************************** //
            _font = FontManager.Get("glyphs");
            // TEXT INITIALISATION ********************************************************** //
            _scoreText = new Text(new Vector2(13, 30), _font, _flatColorShader, "Test");

            var x = ((24 / 32f) * 1.7f) / 2;
            var u = 24.0f / 240;

            _playerMesh = new Object3D(new[] { new Mesh
                                               {
                                                   Vertices = new List <Vertex>
                                                   {
                                                       new Vertex(new Vector3(-x, 1.7f, 0f), new Vector2(0, 0)),
                                                       new Vertex(new Vector3(-x, 0f, 0f), new Vector2(0, 1)),
                                                       new Vertex(new Vector3(x, 1.7f, 0f), new Vector2(u, 0)),

                                                       new Vertex(new Vector3(x, 1.7f, 0f), new Vector2(u, 0)),
                                                       new Vertex(new Vector3(-x, 0f, 0f), new Vector2(0, 1)),
                                                       new Vertex(new Vector3(x, 0f, 0f), new Vector2(u, 1)),
                                                   }
                                               } });
            _playerMesh.LoadInGl(_3dSpriteShader);
            // TEXTURES INITIALISATION ****************************************************** //
            _playerSpriteSheet = new SpriteSheet(_playerMesh, playerSkin, 24, 32, TextureMinFilter.Nearest, TextureMagFilter.Nearest);

            // MESH INITIALISATION ********************************************************** //
            _groundMesh = new Object3D("wall.obj", false, false, true);
            _groundMesh.LoadInGl(_baseShader);

            GroundSimple.MeshToUse = _groundMesh;

            _groundStairsMesh = new Object3D("stairs.obj", false, false, true);
            _groundStairsMesh.LoadInGl(_baseShader);

            GroundStairs.MeshToUse = _groundStairsMesh;

            _groundClusterMesh = new Object3D("cluster.obj", false, false, true);
            _groundClusterMesh.LoadInGl(_baseShader);

            GroundCluster.MeshToUse = _groundClusterMesh;

            _cubeMesh = new Object3D("cube.obj", false, false, false);
            _cubeMesh.LoadInGl(_baseShader);

            AxisAlignedBB.SetMesh(_cubeMesh);

            _interLeftMesh = new Object3D("inter_l.obj", false, false, true);
            _interLeftMesh.LoadInGl(_baseShader);

            Intersection.Left_Mesh = _interLeftMesh;

            _interRightMesh = new Object3D("inter_r.obj", false, false, true);
            _interRightMesh.LoadInGl(_baseShader);

            Intersection.Right_Mesh = _interRightMesh;

            _interLeftRightMesh = new Object3D("inter_lr.obj", false, false, true);
            _interLeftRightMesh.LoadInGl(_baseShader);

            Intersection.LeftRight_Mesh = _interLeftRightMesh;

            _trashMesh = new Object3D("trash.obj", false, false, true);
            _trashMesh.LoadInGl(_baseShader);

            ObstacleTrash.MeshToUse = _trashMesh;

            _coinMesh = new Object3D("coin.obj", false, false, true);
            _coinMesh.LoadInGl(_baseShader);

            Coin.MeshToUse = _coinMesh;


            // WORLD INITIALISATION ********************************************************* //
            _world = new World();
            // PLAYER INITIALISATION ******************************************************** //
            _player = new Player {
                World = _world, Position = new Vector3(0, 0, -3f), Speed = 12.5f
            };
            _camera = new Camera(new Vector3(0, 2f, 2f), _player.PositionForCamera + new Vector3(0, 2.5f, 0), (float)(80f * (Math.PI / 180f)));

            // TERRAIN GENERATION *********************************************************** //
            var tilesToGenerate = 10;

            for (int i = 0; i < tilesToGenerate; i++)
            {
                _world.Grounds.Add(new Ground {
                    BoundingBox = new AxisAlignedBB(new Vector3(-3f, -0.5f, -6f), new Vector3(3f, 0f, 0f)), Mesh = _groundMesh, Position = new Vector3(0, 0, -6f * i), Direction = Direction.NORTH
                });
            }
            var intersection = GroundFactory.NewIntersection(_player, _world, new Vector3(0, 0, -6f * tilesToGenerate), Direction.NORTH, (int)Intersection.IntersectionDirection.LEFT);

            _world.Grounds.Add(intersection);
            var rotation = DirectionHelper.GetRotationFromDirection(Direction.NORTH);
            var w1p1     = new Vector3(new Vector4(-3f, 0f, -7f, 1) * rotation);
            var w1p2     = new Vector3(new Vector4(3f, 5f, -6f, 1) * rotation);

            _world.Obstacles.Add(new Obstacle(new AxisAlignedBB(Vector3.ComponentMin(w1p1, w1p2), Vector3.ComponentMax(w1p1, w1p2)), intersection.Position, Direction.NORTH));
            var w2p1 = new Vector3(new Vector4(3f, 0f, -6f, 1) * rotation);
            var w2p2 = new Vector3(new Vector4(4f, 5f, 0f, 1) * rotation);

            _world.Obstacles.Add(new Obstacle(new AxisAlignedBB(Vector3.ComponentMin(w2p1, w2p2), Vector3.ComponentMax(w2p1, w2p2)), intersection.Position, Direction.NORTH));

            GC.Collect();
            GC.WaitForPendingFinalizers();
        }