Пример #1
0
        void CreateBases()
        {
            for (int i = 0; i < GameManager.NumTeams; i++)
            {
                // Load the texture and create a copy for the colored base
                Texture2D baseTexture = File.Load <Texture2D>("Images/textures/base");
                Color     teamColor   = (i == 0) ? ScenesCommunicationManager.TeamAColor : ScenesCommunicationManager.TeamBColor;
                Texture2D coloredBase = Graphics.TextureTint(baseTexture, teamColor);

                GameObject playerBase = new GameObject("base_" + i.ToString(), File.Load <Model>("Models/primitives/plane"));
                playerBase.tag = ObjectTag.Base;
                playerBase.transform.Scale(0.5f);
                playerBase.transform.position = _basePositions[i] + 0.001f * Vector3.Up;
                playerBase.material           = new Material(coloredBase, true);
                playerBase.AddComponent(new Base(i));
                playerBase.AddComponent(new BaseParticles());
                playerBase.AddComponent(new StaticRigidBody(shapeType: ShapeType.BoxUniform, pureCollider: true));
                playerBase.AddComponent(new BaseParticles());
                ElementManager.Instance.Add(playerBase.GetComponent <Base>());

                // Model instanciation
                ModelType modelType = (ModelType)Enum.Parse(typeof(ModelType), "base" + i, true);

                playerBase.UseHardwareInstanciation = true;
                playerBase.ModelType = modelType;

                HardwareRendering.InitializeModel(modelType, playerBase.Model, playerBase.material);
                HardwareRendering.AddInstance(modelType, playerBase);
            }
        }
Пример #2
0
        void LoadBlenderBakedScene()
        {
            string level = "level" + GameManager.LvlScene;

            Material insideMat  = new Material(File.Load <Texture2D>("Images/textures/polygonHeist"), File.Load <Texture2D>("Images/lightmaps/" + level + "_inside"));
            Material outsideMat = new Material(File.Load <Texture2D>("Images/textures/polygonCity"), File.Load <Texture2D>("Images/lightmaps/" + level + "_outside"));
            Material groundMat  = new Material(File.Load <Texture2D>("Images/textures/polygonHeist"));

            HardwareRendering.InitializeModel(ModelType.InsideScene, File.Load <Model>("Models/scenes/" + level + "_inside"), insideMat);
            HardwareRendering.InitializeModel(ModelType.OutsideScene, File.Load <Model>("Models/scenes/" + level + "_outside"), outsideMat);
            HardwareRendering.InitializeModel(ModelType.Ground, File.Load <Model>("Models/elements/ground"), groundMat);

            GameObject insideScene = new GameObject("insideScene", ModelType.InsideScene, true);

            insideScene.tag = ObjectTag.Ground;

            GameObject outsideScene = new GameObject("outside", ModelType.OutsideScene, true);

            outsideScene.tag = ObjectTag.Ground;

            GameObject infinitePlane = new GameObject("infinitePlane", ModelType.Ground, true);

            infinitePlane.tag = ObjectTag.Ground;
            infinitePlane.transform.Scale(1000);
            infinitePlane.transform.position = new Vector3(0, -.1f, 0);
        }
Пример #3
0
        protected override void Update(GameTime gameTime)
        {
            if (/*GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||*/ Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }
            base.Update(gameTime);
            Time.Update(gameTime);

            Input.Update();
            Audio.Update();
            SceneManager.Update(); // check for scene change (can remove later)

            GameManager.Update();

            foreach (GameObject go in GameObject.All)
            {
                go.Update();
            }
            foreach (GameObject go in GameObject.All)
            {
                go.LateUpdate();
            }

            PhysicsDrawer.Instance.Update(gameTime);
            PhysicsManager.Instance.Update(gameTime);

            // Instanciating
            HardwareRendering.Update();
            ParticleRendering.Update();
        }
Пример #4
0
        protected override void LoadContent()
        {
            _spriteBatch     = new SpriteBatch(GraphicsDevice);
            UserInterface.sB = _spriteBatch;
            Graphics.Start();
            HardwareRendering.Start();
            ParticleRendering.Start();
            //start other big components
            Input.Start();

            //load prefabs and scene
            Prefabs.Start();
            UserInterface.Start();
            GameMode.Start();
            SceneManager.Start();

            SceneManager.LoadScene(loadMenu ? "LevelMenu" : "LevelGame");

            Audio.Start();


            PostProcessingManager.Instance.Start(_spriteBatch);

            if (ShowFps)
            {
                _font = File.Load <SpriteFont>("Other/font/debug");
            }

            // add skybox
            //Skybox.Start();
        }
Пример #5
0
        /// <summary>
        /// Load the menu scene
        /// </summary>
        void MenuScene()
        {
            Material insideMat  = new Material(File.Load <Texture2D>("Images/textures/polygonHeist"), File.Load <Texture2D>("Images/lightmaps/menu_inside"));
            Material outsideMat = new Material(File.Load <Texture2D>("Images/textures/polygonCity"), File.Load <Texture2D>("Images/lightmaps/menu_outside"));
            Material groundMat  = new Material(File.Load <Texture2D>("Images/textures/polygonHeist"));

            // Model instanciation -> not wokring with these models, but not to bad since we have not many models in the menu-level
            HardwareRendering.InitializeModel(ModelType.InsideScene, File.Load <Model>("Models/scenes/menu_inside"), insideMat);
            HardwareRendering.InitializeModel(ModelType.OutsideScene, File.Load <Model>("Models/scenes/menu_outside"), outsideMat);
            HardwareRendering.InitializeModel(ModelType.Ground, File.Load <Model>("Models/elements/ground"), groundMat);

            GameObject insideScene = new GameObject("menu_inside", ModelType.InsideScene, true);

            insideScene.tag = ObjectTag.Ground;

            GameObject outsideScene = new GameObject("menu_outside", ModelType.OutsideScene, true);

            outsideScene.tag = ObjectTag.Ground;

            GameObject infinitePlane = new GameObject("infinitePlane", ModelType.Ground, true);

            infinitePlane.tag = ObjectTag.Ground;
            infinitePlane.transform.Scale(1000);
            infinitePlane.transform.position = new Vector3(0, -5.0f, 0);
        }
Пример #6
0
        private static void InitializeHardwareInstancing()
        {
            //-------------------MATERIALS-------------------
            Material powerupMat     = new Material(File.Load <Texture2D>("Images/textures/powerups"));
            Material shadowMat      = new Material(File.Load <Texture2D>("Images/textures/shadow"), true);
            Material lightPlayerMat = new Material(File.Load <Texture2D>("Images/textures/player_light"), true, true);
            Material lightBlueMat   = new Material(File.Load <Texture2D>("Images/textures/police_blue"), true, true);
            Material lightRedMat    = new Material(File.Load <Texture2D>("Images/textures/police_red"), true, true);
            Material carTrackOilMat = new Material(File.Load <Texture2D>("Images/particles3d/tracks_oil"), true, true)
            {
                RenderingType = RenderingType.TextureAlpha
            };
            Material carTrackSpeedMat = new Material(File.Load <Texture2D>("Images/particles3d/tracks_speed"), true, true)
            {
                RenderingType = RenderingType.TextureAlpha
            };
            Material elementsMat = new Material(File.Load <Texture2D>("Images/textures/polygonHeist"), File.Load <Texture2D>("Images/lightmaps/elements"));
            Material policeMat   = new Material(File.Load <Texture2D>("Images/textures/Vehicle_Police"), File.Load <Texture2D>("Images/lightmaps/elements"));
            Material playerMat   = new Material(File.Load <Texture2D>("Images/textures/player_colors_p1"), File.Load <Texture2D>("Images/lightmaps/elements"));

            // Initialize the models for hardware instanciating
            HardwareRendering.InitializeModel(ModelType.Cash, File.Load <Model>("Models/elements/cash"), elementsMat);
            HardwareRendering.InitializeModel(ModelType.Gold, File.Load <Model>("Models/elements/gold"), powerupMat);
            HardwareRendering.InitializeModel(ModelType.Diamond, File.Load <Model>("Models/elements/diamond"), powerupMat);
            HardwareRendering.InitializeModel(ModelType.Police, File.Load <Model>("Models/vehicles/police_chassis"), policeMat);
            HardwareRendering.InitializeModel(ModelType.Crate, File.Load <Model>("Models/elements/crate"), powerupMat);
            HardwareRendering.InitializeModel(ModelType.Oil, File.Load <Model>("Models/elements/oil"), elementsMat);
            HardwareRendering.InitializeModel(ModelType.Bomb, File.Load <Model>("Models/powerups/bomb"), powerupMat);
            HardwareRendering.InitializeModel(ModelType.Weight, File.Load <Model>("Models/powerups/weight"), powerupMat);
            HardwareRendering.InitializeModel(ModelType.Magnet, File.Load <Model>("Models/powerups/magnet"), powerupMat);
            HardwareRendering.InitializeModel(ModelType.Speedpad, File.Load <Model>("Models/elements/speedpad"), elementsMat);
            HardwareRendering.InitializeModel(ModelType.Stack, File.Load <Model>("Models/elements/stack"), elementsMat);
            HardwareRendering.InitializeModel(ModelType.Shadow, File.Load <Model>("Models/primitives/plane"), shadowMat);
            HardwareRendering.InitializeModel(ModelType.YellowLight, File.Load <Model>("Models/primitives/plane"), lightPlayerMat);
            HardwareRendering.InitializeModel(ModelType.BlueLight, File.Load <Model>("Models/primitives/plane"), lightBlueMat);
            HardwareRendering.InitializeModel(ModelType.RedLight, File.Load <Model>("Models/primitives/plane"), lightRedMat);
            HardwareRendering.InitializeModel(ModelType.TracksOil, File.Load <Model>("Models/primitives/plane"), carTrackOilMat);
            HardwareRendering.InitializeModel(ModelType.TracksSpeed, File.Load <Model>("Models/primitives/plane"), carTrackSpeedMat);
            HardwareRendering.InitializeModel(ModelType.WheelFl, File.Load <Model>("Models/vehicles/wheel_fl"), playerMat);
            HardwareRendering.InitializeModel(ModelType.WheelBz, File.Load <Model>("Models/vehicles/wheel_bz"), playerMat);
            HardwareRendering.InitializeModel(ModelType.WheelPolice, File.Load <Model>("Models/vehicles/wheel_police"), policeMat);
            HardwareRendering.InitializeModel(ModelType.Vault, File.Load <Model>("Models/elements/vault"), elementsMat);
            HardwareRendering.InitializeModel(ModelType.ArrowBase, File.Load <Model>("Models/elements/arrow_green"), elementsMat);
            HardwareRendering.InitializeModel(ModelType.ArrowEnemy, File.Load <Model>("Models/elements/arrow_red"), elementsMat);

            for (int i = 0; i < powerupName.Length; i++)
            {
                ModelType modelType = (ModelType)Enum.Parse(typeof(ModelType), powerupName[i], true);
                HardwareRendering.InitializeModel(modelType, File.Load <Model>("Models/powerups/" + powerupName[i]), powerupMat);
            }

            foreach (string s in dynamicElements)
            {
                ModelType modelType = (ModelType)Enum.Parse(typeof(ModelType), s, true);
                HardwareRendering.InitializeModel(modelType, File.Load <Model>("Models/elements/" + s), elementsMat);
            }
        }
Пример #7
0
        void CreateSkybox()
        {
            bool useRandomSkybox = true;

            string[] skyboxTextures = { "daybreak", "midday", "evening", "sunset", "midnight", };
            string   skyTexture     = useRandomSkybox ? skyboxTextures[MyRandom.Range(0, 5)] : "midday";
            Material skyboxMat      = new Material(File.Load <Texture2D>("Images/skyboxes/" + skyTexture));

            // Hardware instancing
            HardwareRendering.InitializeModel(ModelType.Skybox, File.Load <Model>("Models/elements/skybox"), skyboxMat);

            // Visible skybox to render normaly
            GameObject skybox = new GameObject("skybox", ModelType.Skybox, true);

            skybox.transform.Scale(2); // not more than this or it will be culled
            skybox.material = skyboxMat;
        }
Пример #8
0
        /// <summary>
        /// This constructor is ONLY for the use of hardware instanciation..
        /// </summary>
        /// <param name="name"></param>
        /// <param name="modelType"></param>
        /// <param name="addToDrawings">True if the model is drawn, false if not.</param>
        public GameObject(string name, ModelType modelType, bool addToDrawings)
        {
            Debug.Assert(!NameExists(name), "Name " + name + " must be unique!");

            this.name  = name;
            DrawOrder  = 0;
            transform  = new Transform();
            components = new List <IComponent>();
            AddGameObject(this);

            UseHardwareInstanciation = true;
            ModelType = modelType;

            if (addToDrawings)
            {
                HardwareRendering.AddInstance(modelType, this);
            }
        }
Пример #9
0
        public virtual object Clone()
        {
            int counter = 0;

            lock (LockCounter) {
                counter = InstanceCount++;
            }
            string     newName = name + "_clone_" + counter;
            GameObject newObject;

            if (UseHardwareInstanciation)
            {
                newObject = new GameObject(newName, ModelType, true);
            }
            else
            {
                newObject          = new GameObject(newName);
                newObject.Model    = Model;
                newObject.material = material?.Clone();
            }

            newObject.UseHardwareInstanciation = UseHardwareInstanciation;
            newObject.ModelType = ModelType;
            newObject.Alpha     = Alpha;
            newObject.transform.CopyFrom(this.transform);
            newObject.tag    = tag;
            newObject.active = true;

            foreach (IComponent c in this.components)
            {
                newObject.AddComponent((IComponent)c.Clone());
            }


            // Instanciating
            if (Model != null && UseHardwareInstanciation)
            {
                HardwareRendering.AddInstance(ModelType, newObject);
            }

            return(newObject);
        }
Пример #10
0
        public static void LoadScene(string sceneName, int sceneId = 1)
        {
            // Disable the physics-manager when loading the scene to avoid inconsistency between collision-handlings and loading
            PhysicsManager.Instance.IsActive = false;

            //GameManager.LvlScene = sceneId;
            GameObject.ClearAll();
            HardwareRendering.Reset();
            ParticleRendering.Reset();
            currentScene = scenes[sceneName];
            Screen.SetupViewportsAndCameras(Graphics.gDM, currentScene.GetNumCameras());
            if (currentScene != null)
            {
                currentScene.Load();
            }
            StartScene();

            // Enable the physics-manager after all is loaded and positioned
            PhysicsManager.Instance.IsActive = true;
        }
Пример #11
0
        public static void Destroy(GameObject o)
        {
            if (o == null)
            {
                return;
            }
            o.active = false;

            // Instanciating
            if (o.Model != null)
            {
                HardwareRendering.RemoveInstance(o.ModelType, o);
            }

            //if (o.HasComponent<RigidBodyComponent>()) RigidBodyComponent.allcolliders.Remove(o.GetComponent<RigidBodyComponent>()); // to avoid increase in colliders
            RemoveGameObject(o);
            //TODO free up memory
            foreach (Component c in o.components)
            {
                c.Destroy();
            }
        }
Пример #12
0
        void CreatePlayers()
        {
            //Material playerMat = new Material(File.Load<Texture2D>("Images/textures/player_colors"), File.Load<Texture2D>("Images/lightmaps/elements"));

            for (int i = 0; i < GameManager.NumPlayers; i++)
            {
                Vector3    startPos = _startPositions[i];
                GameObject player   = new GameObject("player_" + i.ToString(), File.Load <Model>("Models/vehicles/forklift"));
                player.tag = ObjectTag.Player;
                player.transform.position = startPos;

                player.material = new Material(File.Load <Texture2D>("Images/textures/player_colors_p" + (i + 1).ToString()), File.Load <Texture2D>("Images/lightmaps/elements"));

                player.AddComponent(new Player(i, i % 2, startPos));
                player.AddComponent(new MovingRigidBody());
                //subcomponents
                player.AddComponent(new PlayerAttack());
                player.AddComponent(new PlayerInventory());
                player.AddComponent(new PlayerMovement());
                player.AddComponent(new PlayerParticles());
                player.AddComponent(new PlayerPowerup());
                player.AddComponent(new PlayerStamina());

                player.AddComponent(new DynamicShadow());
                player.AddComponent(new SpeechManager(i));
                player.AddComponent(new TutorialUI(i));

                // Modify player's name and model and color(choosen by user during menu)
                if (MenuManager.Instance != null)
                {
                    MenuManager.Instance.ChangeModelNameColorPlayer(player, i);

                    int modelIndex = 0;
                    if (ScenesCommunicationManager.Instance != null && ScenesCommunicationManager.Instance.PlayersInfo != null && ScenesCommunicationManager.Instance.PlayersInfo.ContainsKey("player_" + i))
                    {
                        modelIndex = ScenesCommunicationManager.Instance.PlayersInfo["player_" + i].Item2;
                    }

                    player.AddComponent(new FrontLight(FrontLight.Type.FrontAndBack, modelIndex));
                    player.AddComponent(new AnimatedWheels(AnimatedWheels.Type.BackOnly, 5, modelIndex));
                }
                else
                {
                    player.AddComponent(new FrontLight(FrontLight.Type.FrontAndBack, 0));
                    player.AddComponent(new AnimatedWheels(AnimatedWheels.Type.BackOnly, 5, 0));
                }


                ElementManager.Instance.Add(player.GetComponent <Player>());

                // Model instanciation
                ModelType modelType = (ModelType)Enum.Parse(typeof(ModelType), "player" + i, true);

                player.UseHardwareInstanciation = true;
                player.ModelType = modelType;

                HardwareRendering.InitializeModel(modelType, player.Model, player.material);
                HardwareRendering.AddInstance(modelType, player);

                //ARROWS

                //arrow for base
                GameObject arrow = new GameObject("arrow_" + i, ModelType.ArrowBase, true);
                arrow.AddComponent(new Arrow(player, false, i, player.GetComponent <PlayerInventory>().IsAlmostFull));
                arrow.transform.Scale(.6f);

                //arrow for enemy
                if (GameManager.NumPlayers > 1)
                {
                    GameObject arrow2 = new GameObject("arrow2_" + i, ModelType.ArrowEnemy, true);
                    arrow2.AddComponent(new Arrow(player, true, i, () => true));
                    arrow2.transform.Scale(.3f);
                }
            }
        }
Пример #13
0
        protected override void Draw(GameTime gameTime)
        {
            // render scene for real
            GraphicsDevice.SetRenderTarget(PostProcessingManager.SceneTarget);
            GraphicsDevice.Clear(Graphics.SkyBlue);

            base.Draw(gameTime);
            _graphics.PreferMultiSampling = true;

            //-----3D-----
            GraphicsDevice.DepthStencilState = DepthStencilState.Default; // new DepthStencilState() { DepthBufferEnable = true }; // activates z buffer

            HardwareRendering.Draw();
            ParticleRendering.Draw();

            if (PhysicsDrawer.Instance.DoDrawings)
            {
                foreach (Camera cam in Screen.Cameras)
                {
                    GraphicsDevice.Viewport = cam.Viewport;

                    // Allow physics drawing for debug-reasons (display boundingboxes etc..)
                    PhysicsDrawer.Instance.Draw(cam);

                    //gizmos
                    GraphicsDevice.RasterizerState = Screen._wireRasterizer;
                    Gizmos.DrawWire(cam);
                    GraphicsDevice.RasterizerState = Screen._fullRasterizer;
                    Gizmos.DrawFull(cam);
                }

                Gizmos.ClearOrders();
            }

            // draw everything 3D to get the depth info
            _graphics.GraphicsDevice.SetRenderTarget(PostProcessingManager.DepthTarget);
            _graphics.GraphicsDevice.Clear(Color.Black);

            HardwareRendering.DrawDepth();
            ParticleRendering.DrawDepth();

            // apply post processing
            PostProcessingManager.Instance.Draw(_spriteBatch);

            // Drop the render target
            GraphicsDevice.SetRenderTarget(null);


            //-----2D-----
            int i = 0;

            foreach (Camera cam in Screen.Cameras)
            {
                GraphicsDevice.Viewport = cam.Viewport;
                _spriteBatch.Begin();
                if (showUI)
                {
                    foreach (GameObject go in GameObject.All)
                    {
                        go.Draw2D(i);
                    }
                }
                _spriteBatch.End();
                i++;
            }

            GraphicsDevice.Viewport = Screen.FullViewport;
            if (showUI)
            {
                _spriteBatch.Begin();
                foreach (GameObject go in GameObject.All)
                {
                    go.Draw2D(-1);
                }
                _spriteBatch.End();
            }

            if (ShowFps)
            {
                try {
                    string text = string.Format(
                        "Frames per second: {0}/{1}\n" +
                        "Instances: {2}\n",
                        (1.0f / gameTime.ElapsedGameTime.TotalSeconds).ToString("0.00"),
                        (_frames++ / gameTime.TotalGameTime.TotalSeconds).ToString("0.00"),
                        GameObject.All.Length);

                    _spriteBatch.Begin();

                    _spriteBatch.DrawString(_font, text, new Vector2(65, 265), Color.Black);
                    _spriteBatch.DrawString(_font, text, new Vector2(64, 264), Color.White);

                    _spriteBatch.End();
                } catch {
                    // Do nothing
                }
            }
        }