Ejemplo n.º 1
0
        public GameStateMenu()
        {
            _backColor       = new Color4(0f, 0f, 0f, 1f);
            _font            = FontManager.Get("glyphs");
            _flatColorShader = ShaderManager.Get("FlatColorShader");
            _3dSpriteShader  = ShaderManager.Get("SpriteSheet");
            _text            = new Text(new Vector2(10, 10), _font, _flatColorShader, Text.Alignment.MIDDLE, $"Press the Enter button to start!");

            _selected = 0;

            var u = 24.0f / 240;

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

                        new Vertex(new Vector3(12, 32f, 0f), new Vector2(u, 0)),
                        new Vertex(new Vector3(-12, 0f, 0f), new Vector2(0, 1)),
                        new Vertex(new Vector3(12, 0f, 0f), new Vector2(u, 1)),
                    }
                }
            });
            _playerMesh.LoadInGl(_3dSpriteShader);
            _playerSpriteSheets = new[]
            {
                new SpriteSheet(_playerMesh, "running_link.png", 24, 32, TextureMinFilter.Nearest, TextureMagFilter.Nearest),
                new SpriteSheet(_playerMesh, "running_holo.png", 24, 32, TextureMinFilter.Nearest, TextureMagFilter.Nearest)
            };
        }
Ejemplo n.º 2
0
        private void LoadShader()
        {
            ShaderManager.LoadCustomProgram("mbrot", "mbrot-vs", "mbrot-fs");

            prog = ShaderManager.Get("mbrot").Id;
            Renderer.HandleResolution = GL.GetUniformLocation(prog, "iResolution");

            GL.Uniform2(Renderer.HandleResolution, iResolution.X, iResolution.Y);
        }
Ejemplo n.º 3
0
        public void OnAwake()
        {
            var instance = ShaderManager.Get();

            ShaderManagerEditor.materials       = VariableMaterial.GetAll();
            ShaderManagerEditor.keywordsChanged = false;
            ShaderManagerEditor.SetKeyword(instance.shadingBlend);
            ShaderManagerEditor.SetKeyword(instance.shadowType);
            ShaderManagerEditor.SetKeyword(instance.shadowMode);
            ShaderManagerEditor.SetKeyword(instance.shadowBlend);
            ShaderManagerEditor.SetKeyword(instance.lightmapType);
            ShaderManagerEditor.SetKeyword(instance.lightmapMode);
            ShaderManagerEditor.SetKeyword(instance.lightmapBlend);
            ShaderManagerEditor.SetKeyword(instance.fadeType);
            ShaderManagerEditor.SetKeyword(instance.fadeBlend);
            ShaderManagerEditor.SetKeyword(instance.fadeGrayscale);
            if (ShaderManagerEditor.keywordsChanged)
            {
                Events.AddStepper("On Editor Update", ShaderManagerEditor.RefreshStep, ShaderManagerEditor.materialsChanged, 50);
            }
        }
Ejemplo n.º 4
0
        public GameStateGameOver(int finalScore)
        {
            _backColor           = new Color4(0f, 0f, 0f, 1f);
            _finalScore          = finalScore;
            _font                = FontManager.Get("glyphs");
            _flatColorShader     = ShaderManager.Get("FlatColorShader");
            _gameOverText        = new Text(new Vector2(10, 10), _font, _flatColorShader, Text.Alignment.MIDDLE, "Game Over");
            _scoreText           = new Text(new Vector2(10, 10), _font, _flatColorShader, Text.Alignment.MIDDLE, $"Your final score: {_finalScore}");
            _name                = "";
            _nameText            = new Text(new Vector2(10, 10), _font, _flatColorShader, Text.Alignment.LEFT, "");
            _scoreboardText      = new Text(new Vector2(10, 10), _font, _flatColorShader, Text.Alignment.MIDDLE, "Scoreboard");
            _scoreboardNameText  = new Text(new Vector2(10, 10), _font, _flatColorShader, Text.Alignment.RIGHT, "");
            _scoreboardScoreText = new Text(new Vector2(10, 10), _font, _flatColorShader, Text.Alignment.LEFT, "");

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

            _coins         = new List <CloneableCoin>();
            _coinReference = new CloneableCoin(_coinMesh);
            _coinEmitter   = new CoinEmitter(ref _coins, _coinReference, new Vector3(0, _height, 0), 0.2f, _finalScore / 20, (float)(80f * (Math.PI / 180f)), 1000, 1200);
            DownloadScores();
        }
Ejemplo n.º 5
0
 public void SetWater()
 {
     this.IsWater = true;
     this.effect  = ShaderManager.Get("ReflectionShader");
 }
Ejemplo n.º 6
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();
        }
Ejemplo n.º 7
0
    void Start()
    {
        manager = ShaderManager.Get();

        renderer.material = manager.TouchMaterial;
    }
Ejemplo n.º 8
0
 public static void Select()
 {
     Selection.activeObject = ShaderManager.Get();
 }
Ejemplo n.º 9
0
        public GameStatePlay(IGameStateManager gameStateManager, IWorldManager worldManager, IChunkManager chunkManager, IChunkPartManager chunkPartManager, IBlockSelector blockSelector, IBlocksProvider blocksProvider, World world)
        {
            Debug = new DebugObjects();

            _world                 = world;
            _gameStateManager      = gameStateManager;
            _worldManager          = worldManager;
            _chunkManager          = chunkManager;
            _chunkPartManager      = chunkPartManager;
            _blockSelector         = blockSelector;
            _blocksProvider        = blocksProvider;
            _selectedBlockId       = _blockSelector.GetNextBlock(0);
            _selectedBlockMetadata = 0;

            _aabbShader   = ShaderManager.GetWithGeometry("AabbShader");
            _baseShader   = ShaderManager.GetWithGeometry("BaseShader");
            _debugShader  = ShaderManager.GetWithGeometry("Debug");
            _guiShader    = ShaderManager.Get("GuiShader");
            _skyboxShader = ShaderManager.Get("SkyboxShader");
            _player       = new Player()
            {
                Position = new Vector3(0, 90, 0)
            };
            _camera  = new Camera(new Vector3(0), new Vector3(0), (float)(80f * (Math.PI / 180f)));
            _frustum = new Plane[6];
            for (int i = 0; i < _frustum.Length; i++)
            {
                _frustum[i] = new Plane();
            }
            _terrainTexture = TextureManager.Get("terrain.png", TextureMinFilter.Nearest, TextureMagFilter.Nearest);
            _iconsTexture   = TextureManager.Get("icons.png", TextureMinFilter.Nearest, TextureMagFilter.Nearest);
            _skyTexture     = TextureManager.Get("skybox.png", TextureMinFilter.Nearest, TextureMagFilter.Nearest);
            _text           = new Text(new Vector2(5, 0), FontManager.Get("glyphs"), _guiShader, "");
            _renderDistance = 16;

            _crosshair = new Sprite(new Vector2(36, 36), new Vector2(0), new Vector2(16 / 256f), _guiShader);
            _crosshair.UploadInGl();

            _selectedBlocks = new AABBObjects();

            _skybox = new Mesh()
            {
                Vertices = new List <Vertex>()
                {
                    // FRONT
                    new Vertex(new Vector3(-10, -10, -10), Vector3.One, new Vector2(1 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(10, -10, -10), Vector3.One, new Vector2(2 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(-10, 10, -10), Vector3.One, new Vector2(1 / 4f, 1 / 3f)),

                    new Vertex(new Vector3(-10, 10, -10), Vector3.One, new Vector2(1 / 4f, 1 / 3f)),
                    new Vertex(new Vector3(10, -10, -10), Vector3.One, new Vector2(2 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(10, 10, -10), Vector3.One, new Vector2(2 / 4f, 1 / 3f)),

                    // RIGHT
                    new Vertex(new Vector3(10, -10, -10), Vector3.One, new Vector2(2 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(10, -10, 10), Vector3.One, new Vector2(3 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(10, 10, -10), Vector3.One, new Vector2(2 / 4f, 1 / 3f)),

                    new Vertex(new Vector3(10, 10, -10), Vector3.One, new Vector2(2 / 4f, 1 / 3f)),
                    new Vertex(new Vector3(10, -10, 10), Vector3.One, new Vector2(3 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(10, 10, 10), Vector3.One, new Vector2(3 / 4f, 1 / 3f)),

                    // LEFT
                    new Vertex(new Vector3(-10, -10, 10), Vector3.One, new Vector2(0 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(-10, -10, -10), Vector3.One, new Vector2(1 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(-10, 10, 10), Vector3.One, new Vector2(0 / 4f, 1 / 3f)),

                    new Vertex(new Vector3(-10, 10, 10), Vector3.One, new Vector2(0 / 4f, 1 / 3f)),
                    new Vertex(new Vector3(-10, -10, -10), Vector3.One, new Vector2(1 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(-10, 10, -10), Vector3.One, new Vector2(1 / 4f, 1 / 3f)),

                    // TOP
                    new Vertex(new Vector3(-10, 10, -10), Vector3.One, new Vector2(1 / 4f, 1 / 3f)),
                    new Vertex(new Vector3(10, 10, -10), Vector3.One, new Vector2(2 / 4f, 1 / 3f)),
                    new Vertex(new Vector3(-10, 10, 10), Vector3.One, new Vector2(1 / 4f, 0 / 3f)),

                    new Vertex(new Vector3(-10, 10, 10), Vector3.One, new Vector2(1 / 4f, 0 / 3f)),
                    new Vertex(new Vector3(10, 10, -10), Vector3.One, new Vector2(2 / 4f, 1 / 3f)),
                    new Vertex(new Vector3(10, 10, 10), Vector3.One, new Vector2(2 / 4f, 0 / 3f)),

                    // BOTTOM
                    new Vertex(new Vector3(-10, -10, 10), Vector3.One, new Vector2(1 / 4f, 3 / 3f)),
                    new Vertex(new Vector3(10, -10, 10), Vector3.One, new Vector2(2 / 4f, 3 / 3f)),
                    new Vertex(new Vector3(-10, -10, -10), Vector3.One, new Vector2(1 / 4f, 2 / 3f)),

                    new Vertex(new Vector3(-10, -10, -10), Vector3.One, new Vector2(1 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(10, -10, 10), Vector3.One, new Vector2(2 / 4f, 3 / 3f)),
                    new Vertex(new Vector3(10, -10, -10), Vector3.One, new Vector2(2 / 4f, 2 / 3f)),

                    // BACK
                    new Vertex(new Vector3(10, -10, 10), Vector3.One, new Vector2(3 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(-10, -10, 10), Vector3.One, new Vector2(4 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(10, 10, 10), Vector3.One, new Vector2(3 / 4f, 1 / 3f)),

                    new Vertex(new Vector3(10, 10, 10), Vector3.One, new Vector2(3 / 4f, 1 / 3f)),
                    new Vertex(new Vector3(-10, -10, 10), Vector3.One, new Vector2(4 / 4f, 2 / 3f)),
                    new Vertex(new Vector3(-10, 10, 10), Vector3.One, new Vector2(4 / 4f, 1 / 3f)),
                }
            };
            _skybox.LoadInGl();

            _loadingThread =
                new Thread(new ThreadStart(() =>
            {
                Func <int, Tuple <int, int> > spiral = (n) =>
                {
                    var k  = (int)Math.Ceiling((Math.Sqrt(n) - 1) / 2);
                    var t  = 2 * k + 1;
                    var m  = t * t;
                    t      = t - 1;
                    var mt = m - t;
                    if (n > mt)
                    {
                        return(new Tuple <int, int>(k - (m - n), -k));
                    }
                    m  = mt;
                    mt = m - t;
                    if (n > mt)
                    {
                        return(new Tuple <int, int>(-k, -k + (m - n)));
                    }
                    m  = mt;
                    mt = m - t;
                    if (n > mt)
                    {
                        return(new Tuple <int, int>(-k + (m - n), k));
                    }
                    return(new Tuple <int, int>(k, k - (m - n - t)));
                };
                while (!_stopLoading)
                {
                    var chunks         = _worldManager.GetLoadedChunks(_world);
                    var playerPosition = _player.Position;
                    var playerPos2D    = playerPosition.Xz;

                    ChunkPosition?chunkToLoad = null;

                    var renderDistanceTime2Square = _renderDistance * 2;
                    renderDistanceTime2Square     = renderDistanceTime2Square * renderDistanceTime2Square;
                    for (var i = 0; i < renderDistanceTime2Square; i++)
                    {
                        var pos = spiral(i);
                        var chunkPositionInLocalCoordinates = new Vector2(pos.Item1, pos.Item2);
                        if (chunkPositionInLocalCoordinates.LengthFast < _renderDistance)
                        {
                            var chunkPosition = new ChunkPosition((int)((chunkPositionInLocalCoordinates.X + Math.Floor(playerPos2D.X / 16f))), (int)((chunkPositionInLocalCoordinates.Y + Math.Floor(playerPos2D.Y / 16f))));
                            if (!chunks.Any(chunk => chunk.Item1.Equals(chunkPosition)))
                            {
                                chunkToLoad = chunkPosition;
                                break;
                            }
                        }
                    }

                    if (chunkToLoad != null)
                    {
                        _worldManager.GetChunkAt(_world, chunkToLoad.Value.X, chunkToLoad.Value.Z);
                    }
                    else
                    {
                        Thread.Sleep(1000);
                    }
                }
            }))
            {
                IsBackground = true
            };
            _loadingThread.Start();
        }