示例#1
0
        /// <summary>
        /// Loads all the setup for the game to play acording to the parameter
        /// </summary>
        /// <param name="SelectedMode"></param>
        /// <returns>Game setup</returns>
        public static GameSetting LoadGameSetup(string SelectedMode)
        {
            #region variables
            //Validate the Selected game mode
            GameplayMode _selectedMode = ValidateGameMode(SelectedMode);


            //Settings to be returned in LoadGame Method
            GameSettingObj = new GameSetting();
            #endregion

            //Load Gamemode settings
            switch (_selectedMode)
            {
            case GameplayMode.easy:
                GameSettingObj.xAxis = EasyModeSettings.xAmount;
                GameSettingObj.yAxis = EasyModeSettings.yAmount;
                GameSettingObj.mines = EasyModeSettings.mineAmount;
                break;

            default:
                throw new Exception("Error");
            }

            return(GameSettingObj);
        }
示例#2
0
    //IEnemyComponent

    public virtual void Initialize(Player[] players, GameplayMode gameplayMode, PlayArea playArea)
    {
        this.players      = players;
        this.gameplayMode = gameplayMode;
        this.playArea     = playArea;
        //for example initialize movement and weapons
    }
示例#3
0
    public void SetCamsToMode(GameplayMode newMode)
    {
        GameObject camPoint = GetCorrespondingCamPoint(newMode);

        gameplayCamContainer.transform.localPosition = camPoint.transform.localPosition;
        gameplayCamContainer.transform.localRotation = camPoint.transform.localRotation;
        SyncLevelCamContainer();
    }
示例#4
0
        private GameplayScreen(string levelPath, GameplayMode gameplayMode, int stage)
        {
            _gameplayMode = gameplayMode;
            _levelPath = levelPath;
            _stage = stage;

            this.LoadLevel();
        }
示例#5
0
        /// <summary>
        /// Validate Game mode against the enum
        /// </summary>
        /// <param name="selectedMode"></param>
        /// <returns>String for game mode</returns>
        private static GameplayMode ValidateGameMode(string selectedMode)
        {
            GameplayMode recordType = new GameplayMode();

            recordType = (GameplayMode)System.Enum.Parse(typeof(GameplayMode), selectedMode);

            return(recordType);
        }
 public override void Initialize(Player[] players, GameplayMode mode, PlayArea playArea)
 {
     base.Initialize(players, mode, playArea);
     bulletDirectionScale = GetDirectionScaleVector();
     SetAppropriateBulletPool();
     chargeEffectPool = ParticleEffectPool.GetPool(ParticleEffectPool.EffectType.CHARGE_ENEMY);
     initialized      = true;
 }
示例#7
0
 public override void Initialize(Player[] players, GameplayMode gameplayMode, PlayArea playArea)
 {
     base.Initialize(players, gameplayMode, playArea);
     movement.Initialize(players, gameplayMode, playArea);
     if (weapon != null)
     {
         weapon.Initialize(players, gameplayMode, playArea);
     }
 }
    private void ReadLevel()
    {
        if (dataRecieveds.Count > 0)
        {
            if (dataRecieveds[0].Sender == SceneName.LevelEditorCreate || ((dataRecieveds[0].Sender == SceneName.PlayParbaba || dataRecieveds[0].Sender == SceneName.PlayBatuguru || dataRecieveds[0].Sender == SceneName.PlayParapat || dataRecieveds[0].Sender == SceneName.PlayTomok) && Mode == GameplayMode.ValidateLevel))
            {
                Mode      = GameplayMode.ValidateLevel;
                dataLevel = (Level)dataRecieveds[0].Data;
                if (!dataLevel.HasUndefineBubble())
                {
                    RefreshLevel(dataLevel);
                }
                else
                {
                    chooseBubbleController.Show(dataStaticLevel, RefreshBubble);
                    State = GameplayState.ChooseBubble;
                    //RefreshBackground(dataLevel.Place);
                    RefreshRubbish(dataLevel.Rubbishes);
                    RefreshBarrier(dataLevel.Barriers);
                }
            }
            else if (dataRecieveds[0].Sender == SceneName.LevelEditorCreate || ((dataRecieveds[0].Sender == SceneName.PlayParbaba || dataRecieveds[0].Sender == SceneName.PlayBatuguru || dataRecieveds[0].Sender == SceneName.PlayParapat || dataRecieveds[0].Sender == SceneName.PlayTomok) && Mode == GameplayMode.Edited))
            {
                Mode = GameplayMode.Edited;
            }
            else if ((dataRecieveds[0].Sender == SceneName.ChooseLevelParbaba || dataRecieveds[0].Sender == SceneName.ChooseLevelBatuguru || dataRecieveds[0].Sender == SceneName.ChooseLevelParapat || dataRecieveds[0].Sender == SceneName.ChooseLevelTomok) || ((dataRecieveds[0].Sender == SceneName.PlayParbaba || dataRecieveds[0].Sender == SceneName.PlayBatuguru || dataRecieveds[0].Sender == SceneName.PlayParapat || dataRecieveds[0].Sender == SceneName.PlayTomok) && Mode == GameplayMode.StaticLevel))
            {
                Mode            = GameplayMode.StaticLevel;
                dataStaticLevel = (StaticLevel)dataRecieveds[0].Data;
                if (!dataStaticLevel.HasUndefineBubble())
                {
                    RefreshLevel(dataStaticLevel);
                }
                else
                {
                    BtnShoot.SetActive(false);
                    chooseBubbleController.Show(dataStaticLevel, RefreshBubble);
                    //RefreshBackground(dataStaticLevel.Place);
                    RefreshRubbish(dataStaticLevel.Rubbishes);
                    RefreshBarrier(dataStaticLevel.Barriers);
                    State = GameplayState.ChooseBubble;

                    /*if (dataStaticLevel.HighScore==0 && dataStaticLevel.Place == "Batuguru" && dataStaticLevel.Level == 11)
                     * {
                     *      tutorialPora.SetTrigger("define");
                     *      closeForDefine.SetActive(true);
                     *      tutorialAnimator.SetTrigger("Show");
                     * }*/
                }
            }
        }
    }
示例#9
0
    Vector3 FlattenLocalPointToArea(GameplayMode mode, Vector3 point)
    {
        switch (currentMode)
        {
        case GameplayMode.TOPDOWN:
            return(new Vector3(point.x, 0f, point.z));

        case GameplayMode.SIDE:
            return(new Vector3(0f, point.y, point.z));

        case GameplayMode.BACK:
            return(new Vector3(point.x, point.y, 0f));

        default:
            throw GetUnknownModeException(currentMode);
        }
    }
示例#10
0
    Vector3 GetSpawnOffsetVec(GameplayMode mode)
    {
        switch (currentMode)
        {
        case GameplayMode.TOPDOWN:
            return(Vector3.left);

        case GameplayMode.SIDE:
            return(Vector3.up);

        case GameplayMode.BACK:
            return(Vector3.left);

        default:
            throw GetUnknownModeException(currentMode);
        }
    }
示例#11
0
    GameObject GetCorrespondingCamPoint(GameplayMode mode)
    {
        switch (mode)
        {
        case (GameplayMode.TOPDOWN):
            return(topPosition);

        case (GameplayMode.SIDE):
            return(sidePosition);

        case (GameplayMode.BACK):
            return(backPosition);

        default:
            throw GetUnknownModeException(mode);
        }
    }
示例#12
0
    GameObject GetCorrespondingPlayArea(GameplayMode mode)
    {
        switch (mode)
        {
        case (GameplayMode.TOPDOWN):
            return(topArea);

        case (GameplayMode.SIDE):
            return(sideArea);

        case (GameplayMode.BACK):
            return(backArea);

        default:
            throw GetUnknownModeException(mode);
        }
    }
示例#13
0
    protected RigidbodyConstraints GetMovementConstraints(GameplayMode mode)
    {
        switch (mode)
        {
        case GameplayMode.TOPDOWN:
            return(RigidbodyConstraints.FreezePositionY);

        case GameplayMode.SIDE:
            return(RigidbodyConstraints.FreezePositionX);

        case GameplayMode.BACK:
            return(RigidbodyConstraints.FreezePositionZ);

        default:
            throw new UnityException("Unknown GameplayMode \"" + mode.ToString() + "\"");
        }
    }
示例#14
0
    public IEnumerator TransitionPlayerToMode(GameObject playerObject, GameplayMode newMode, float transitionDuration)
    {
        Vector3    startPos            = playerObject.transform.localPosition;
        Quaternion startRot            = playerObject.transform.localRotation;
        Vector3    normalizedTargetPos = GetNormalizedTargetPoint(startPos, currentMode, newMode);
        Vector3    endPos   = DenormalizePoint(normalizedTargetPos, newMode);
        Quaternion endRot   = Quaternion.identity;
        float      progress = 0f;

        while (progress < 1f)
        {
            progress += (Time.deltaTime / transitionDuration);
            playerObject.transform.localPosition = Vector3.Lerp(startPos, endPos, progress);
            playerObject.transform.localRotation = Quaternion.Lerp(startRot, endRot, progress);
            yield return(null);
        }
        playerObject.transform.localPosition = endPos;
        playerObject.transform.localRotation = endRot;
    }
示例#15
0
    IEnumerator WaitForRightConditionsAndTransition(GameplayMode newMode)
    {
        bool respawnInProgress = RespawnIsInProgress();

        while (respawnInProgress)
        {
            yield return(null);

            respawnInProgress = RespawnIsInProgress();
        }
        StartCoroutine(playArea.TransitionCamerasToMode(newMode, gameplayModeTransitionDuration));
        for (int i = 0; i < players.Length; i++)
        {
            Player player = players[i];
            if (player.IsDead)
            {
                playerRespawnStartTimes[i] = Mathf.Infinity;
            }
            else
            {
                player.SetRegularComponentsActive(false);
                StartCoroutine(playArea.TransitionPlayerToMode(player.gameObject, newMode, gameplayModeTransitionDuration));
            }
        }
        yield return(new WaitForSeconds(gameplayModeTransitionDuration));

        for (int i = 0; i < players.Length; i++)
        {
            Player player = players[i];
            if (player.IsDead)
            {
                playerRespawnStartTimes[i] = Time.time;
            }
            else
            {
                player.SetRegularComponentsActive(true);
            }
            player.Mode = newMode;
        }
        playArea.SetAreaToMode(newMode);
        playArea.SetMode(newMode);
    }
 public override StandardLevelSO[] GetLevels(GameplayMode gameplayMode)
 {
     foreach (var levelCollectionForGameplayMode in _collections)
     {
         if (levelCollectionForGameplayMode.gameplayMode == gameplayMode)
         {
             var customLevelCollections = levelCollectionForGameplayMode as CustomLevelCollectionForGameplayMode;
             if (customLevelCollections != null)
             {
                 var customLevelCollection = customLevelCollections.levelCollection as CustomLevelCollectionSO;
                 if (customLevelCollection != null)
                 {
                     return(customLevelCollection.LevelList.ToArray());
                 }
             }
             return(levelCollectionForGameplayMode.levelCollection.levels);
         }
     }
     return(null);
 }
示例#17
0
        private static string GetGameplayModeImage(GameplayMode gameplayMode)
        {
            switch (gameplayMode)
            {
            case GameplayMode.SoloStandard:
                return("solo");

            case GameplayMode.SoloOneSaber:
                return("one_saber");

            case GameplayMode.SoloNoArrows:
                return("no_arrows");

            case GameplayMode.PartyStandard:
                return("party");

            default:
                return("solo");
            }
        }
示例#18
0
        public static string GetGameplayModeName(GameplayMode gameplayMode)
        {
            switch (gameplayMode)
            {
            case GameplayMode.SoloStandard:
                return("Solo Standard");

            case GameplayMode.SoloOneSaber:
                return("One Saber");

            case GameplayMode.SoloNoArrows:
                return("No Arrows");

            case GameplayMode.PartyStandard:
                return("Party");

            default:
                return("Solo Standard");
            }
        }
示例#19
0
    public IEnumerator TransitionCamerasToMode(GameplayMode newMode, float transitionDuration)
    {
        Vector3    startPos = gameplayCamContainer.transform.localPosition;
        Quaternion startRot = gameplayCamContainer.transform.localRotation;
        GameObject newPoint = GetCorrespondingCamPoint(newMode);
        Vector3    endPos   = newPoint.transform.localPosition;
        Quaternion endRot   = newPoint.transform.localRotation;
        float      progress = 0f;

        while (progress < 1f)
        {
            progress += (Time.deltaTime / transitionDuration);
            gameplayCamContainer.transform.localPosition = Vector3.Lerp(startPos, endPos, progress);
            gameplayCamContainer.transform.localRotation = Quaternion.Lerp(startRot, endRot, progress);
            SyncLevelCamContainer();
            yield return(null);
        }
        gameplayCamContainer.transform.localPosition = endPos;
        gameplayCamContainer.transform.localRotation = endRot;
        SyncLevelCamContainer();
    }
        public static string GetLeaderboardID(IStandardLevelDifficultyBeatmap difficultyLevel, GameplayMode gameplayMode)
        {
            CheckForHiddenBlocks();
            string text = "Unknown";

            switch (difficultyLevel.difficulty)
            {
            case LevelDifficulty.Easy:
                text = "Easy";
                break;

            case LevelDifficulty.Normal:
                text = "Normal";
                break;

            case LevelDifficulty.Hard:
                text = "Hard";
                break;

            case LevelDifficulty.Expert:
                text = "Expert";
                break;

            case LevelDifficulty.ExpertPlus:
                text = "ExpertPlus";
                break;
            }
            string text2 = "Unknown";

            switch (gameplayMode)
            {
            case GameplayMode.SoloStandard:
                text2 = "SoloStandard";
                break;

            case GameplayMode.SoloOneSaber:
                text2 = "SoloOneSaber";
                break;

            case GameplayMode.SoloNoArrows:
                text2 = "SoloNoArrows";
                break;

            case GameplayMode.PartyStandard:
                text2 = "PartyStandard";
                break;
            }
            string leaderboardID = string.Concat(new string[]
            {
                difficultyLevel.level.levelID,
                "_",
                text,
                "_",
                text2
            });

            if (isHDMod)
            {
                leaderboardID += "HD";
            }
            if (Plugin.IsDarthModeOn && Plugin.NoArrowRandLv == 0)
            {
                leaderboardID += "DM";
                if (Plugin.IsOneHanded)
                {
                    leaderboardID += "OH";
                }
            }
            return(leaderboardID);
        }
示例#21
0
    Vector3 GetNormalizedTargetPoint(Vector3 origPoint, GameplayMode origMode, GameplayMode targetMode)
    {
        Vector3 origAreaScale = GetCorrespondingPlayArea(origMode).transform.localScale;
        float   normX, normY, normZ;

        switch (origMode)
        {
        case GameplayMode.TOPDOWN:
            normX = origPoint.x / origAreaScale.x;
            normZ = origPoint.z / origAreaScale.z;
            if (targetMode.Equals(GameplayMode.TOPDOWN))
            {
                return(new Vector3(normX, 0f, normZ));
            }
            else if (targetMode.Equals(GameplayMode.SIDE))
            {
                return(new Vector3(0f, normX, normZ));
            }
            else if (targetMode.Equals(GameplayMode.BACK))
            {
                return(new Vector3(normX, normZ, 0f));
            }
            else
            {
                throw GetUnknownModeException(targetMode);
            }

        case GameplayMode.SIDE:
            normY = origPoint.y / origAreaScale.y;
            normZ = origPoint.z / origAreaScale.z;
            if (targetMode.Equals(GameplayMode.TOPDOWN))
            {
                return(new Vector3(normY, 0f, normZ));
            }
            else if (targetMode.Equals(GameplayMode.SIDE))
            {
                return(new Vector3(0f, normY, normZ));
            }
            else if (targetMode.Equals(GameplayMode.BACK))
            {
                return(new Vector3(normZ, normY, 0f));
            }
            else
            {
                throw GetUnknownModeException(targetMode);
            }

        case GameplayMode.BACK:
            normX = origPoint.x / origAreaScale.x;
            normY = origPoint.y / origAreaScale.y;
            if (targetMode.Equals(GameplayMode.TOPDOWN))
            {
                return(new Vector3(normX, 0f, normY));
            }
            else if (targetMode.Equals(GameplayMode.SIDE))
            {
                return(new Vector3(0f, normY, normX));
            }
            else if (targetMode.Equals(GameplayMode.BACK))
            {
                return(new Vector3(normX, normY, 0f));
            }
            else
            {
                throw GetUnknownModeException(targetMode);
            }

        default:
            throw GetUnknownModeException(origMode);
        }
    }
示例#22
0
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // Overlay component, used to draw the pause menu and game over menu
            overlayComponent = new OverlayComponent(Game, spriteBatch);
            Game.Components.Add(overlayComponent);

            projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4,
                GraphicsDevice.Viewport.AspectRatio, 0.1f, 50000);

            directionalLight = new DirectionalLight(
                new Vector3(-1.25f, -2f, 5.0f), // Direction
                new Vector3(.1f, .1f, .1f),//new Vector3(.15f, .14f, .29f), // Ambient
                new Vector3(.46f, .33f, .75f)); // Diffuse

            Game.AddService(typeof(DirectionalLight), directionalLight);

            #region Level terrain generation

            int heightMapSize = terrainSegmentsCount * terrainSegmentSize + 1;
            float halfHeightMapSize = heightMapSize / 2f;
            HeightMap heightmapGenerator = new HeightMap(heightMapSize);
            var heightMap = heightmapGenerator.Generate();

            var roadMap = new float[heightMapSize, heightMapSize];
            raceTrack = new RaceTrack(heightMapSize, terrainScale);

            navMesh = new NavMesh(GraphicsDevice, raceTrack.Curve, //1500, roadWidth, terrainScale);
                750, roadWidth, terrainScale);

            Vector3 lastPosition = raceTrack.Curve.GetPoint(.01f) / terrainScale;

            for (float t = 0; t < 1; t += .0002f)
            {
                var e = raceTrack.Curve.GetPoint(t) / terrainScale;

                for (float j = -roadFalloff; j <= roadFalloff; j++)
                {
                    var pos = e + j * Vector3.Normalize(Vector3.Cross(lastPosition - e, Vector3.Up));

                    // Indices
                    int x = (int)(pos.X + halfHeightMapSize),
                        z = (int)(pos.Z + halfHeightMapSize);

                    float height = e.Y;

                    if (Math.Abs(j) <= roadWidth)
                    {
                        heightMap[x, z] = height;
                        roadMap[x, z] = 1;
                    }
                    else
                    {
                        float amount = (Math.Abs(j) - roadWidth) / (roadFalloff - roadWidth);
                        heightMap[x, z] = MathHelper.Lerp(height,
                            heightMap[x, z], amount);
                        roadMap[x, z] = amount / 10f;
                    }
                }
                lastPosition = e;
            }

            heightmapGenerator.Smoothen();
            heightmapGenerator.Perturb(30f);

            for (int i = 0; i < 5; i++)
            {
                heightmapGenerator.Smoothen();
            }

            terrainEffect = content.Load<Effect>(@"Effects\TerrainShading");

            //terrainEffect.Parameters["TextureMap0"].SetValue(content.Load<Texture2D>(@"Terrain\sand"));
            #region TEXTURE RENDERING

            //var unprocessedGrassTexture = content.Load<Texture2D>(@"Terrain\grass");
            //var grassTexture = new RenderTarget2D(GraphicsDevice, unprocessedGrassTexture.Width, unprocessedGrassTexture.Height);

            //GraphicsDevice.SetRenderTarget(grassTexture);
            //spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
            //spriteBatch.Draw(unprocessedGrassTexture, new Rectangle(0, 0, unprocessedGrassTexture.Width, unprocessedGrassTexture.Height), Color.White);
            //spriteBatch.Draw(content.Load<Texture2D>(@"Particles\fire"), new Rectangle(0, 0, unprocessedGrassTexture.Width, unprocessedGrassTexture.Height), Color.White);
            //spriteBatch.End();
            //GraphicsDevice.SetRenderTarget(null);

            //terrainEffect.Parameters["TextureMap1"].SetValue(grassTexture);

            #endregion
            terrainEffect.Parameters["TextureMap0"].SetValue(content.Load<Texture2D>(@"Terrain\road"));
            terrainEffect.Parameters["TextureMap1"].SetValue(content.Load<Texture2D>(@"Terrain\grass"));
            terrainEffect.Parameters["TextureMap2"].SetValue(content.Load<Texture2D>(@"Terrain\rock"));
            terrainEffect.Parameters["TextureMap3"].SetValue(content.Load<Texture2D>(@"Terrain\snow"));
            terrainEffect.Parameters["RoadNormalMap"].SetValue(content.Load<Texture2D>(@"Terrain\road_n"));
            terrainEffect.Parameters["Projection"].SetValue(projectionMatrix);

            // Creates a terrainmodel around Vector3.Zero
            terrainSegments = new TerrainModel[terrainSegmentsCount, terrainSegmentsCount];

            float terrainStart = -.5f * heightMapSize;

            for (int z = 0; z < terrainSegmentsCount; z++)
            {
                for (int x = 0; x < terrainSegmentsCount; x++)
                {
                    terrainSegments[x, z] = new TerrainModel(GraphicsDevice,
                        terrainSegmentSize, terrainSegmentsCount, terrainStart,
                        x * terrainSegmentSize, z * terrainSegmentSize,
                        terrainScale, heightMap, roadMap, terrainEffect, directionalLight);
                }
            }

            #endregion

            #region Car

            Car = MakeCar();
            gameInstance.AddService(typeof(Car), Car);
            Player localPlayer = gameInstance.GetService<ServerClient>().LocalPlayer;
            gameInstance.GetService<CarControlComponent>().Cars[localPlayer] = Car;
            gameInstance.AddService(typeof(Player), localPlayer);

            #endregion

            #region Lights

            // Load model to represent our lightsources
            var pointLightModel = content.Load<Model>(@"Models\light");

            //spotLightModel = content.Load<Model>(@"Models\Cone");

            Vector3 pointLightOffset = new Vector3(0, 250, 0);

            var cr = new CurveRasterization(raceTrack.Curve, 50);

            float colorOffset = 0f;

            foreach (var point in cr.Points)
            {
                Random r = UniversalRandom.GetInstance();

                Vector3 color = new Vector3(0f,0f,0f);
                PointLight pl = new PointLight(point.Position + pointLightOffset +
                    Vector3.Transform(50 * Vector3.Up, Matrix.CreateRotationZ(MathHelper.TwoPi * (float)UniversalRandom.GetInstance().NextDouble())),
                    color, 450)
                {
                    Model = pointLightModel,
                    ColorTimeOffset = colorOffset
                };

                pointLights.Add(pl);
                GraphicalObjects.Add(pl);

                colorOffset += 100 / cr.Points.Count;
            }

            #endregion

            dustEmitter = new ParticleEmitter(dustSystem, 150, Car.Position);

            #region SkySphere

            skyBoxModel = content.Load<Model>(@"Models/skybox");
            skyBoxEffect = content.Load<Effect>(@"Effects/SkyBox");

            skyMap = new TextureCube(GraphicsDevice, 2048, false, SurfaceFormat.Color);
            string[] cubemapfaces = { @"SkyBoxes/PurpleSky/skybox_right1",
                @"SkyBoxes/PurpleSky/skybox_left2",
                @"SkyBoxes/PurpleSky/skybox_top3",
                @"SkyBoxes/PurpleSky/skybox_bottom4",
                @"SkyBoxes/PurpleSky/skybox_front5",
                @"SkyBoxes/PurpleSky/skybox_back6_2"
            };

            //cubeMap = new TextureCube(GraphicsDevice, 1024, false, SurfaceFormat.Color);
            //string[] cubemapfaces = {
            //    @"SkyBoxes/StormyDays/stormydays_ft",
            //    @"SkyBoxes/StormyDays/stormydays_bk",
            //    @"SkyBoxes/StormyDays/stormydays_up",
            //    @"SkyBoxes/StormyDays/stormydays_dn",
            //    @"SkyBoxes/StormyDays/stormydays_rt",
            //    @"SkyBoxes/StormyDays/stormydays_lf"
            //};

            //cubeMap = new TextureCube(GraphicsDevice, 1024, false, SurfaceFormat.Color);
            //string[] cubemapfaces = {
            //    @"SkyBoxes/Miramar/miramar_ft",
            //    @"SkyBoxes/Miramar/miramar_bk",
            //    @"SkyBoxes/Miramar/miramar_up",
            //    @"SkyBoxes/Miramar/miramar_dn",
            //    @"SkyBoxes/Miramar/miramar_rt",
            //    @"SkyBoxes/Miramar/miramar_lf"
            //};

            for (int i = 0; i < cubemapfaces.Length; i++)
                LoadCubemapFace(skyMap, cubemapfaces[i], (CubeMapFace)i);

            skyBoxEffect.Parameters["SkyboxTexture"].SetValue(skyMap);

            foreach (var mesh in skyBoxModel.Meshes)
                foreach (var part in mesh.MeshParts)
                    part.Effect = skyBoxEffect;

            #endregion

            #region Weather

            thunderBoltGenerator = new ThunderBoltGenerator(gameInstance, thunderParticleSystem);
            gameInstance.Components.Add(thunderBoltGenerator);

            #endregion

            #region GameObjects

            OakTree.LoadMaterial(content);
            BirchTree.LoadMaterial(content);
            Stone.LoadMaterial(content);

            int numObjects = 75;

            for (int i = 0; i < numObjects; i++)
            {

                var t = navMesh.triangles[UniversalRandom.GetInstance().Next(navMesh.triangles.Length)];
                float v = (float)UniversalRandom.GetInstance().NextDouble();

                //float u = (float) (UniversalRandom.GetInstance().NextDouble() - 1/2f);
                //if (u < 0)
                //    u -= .5f;
                //else
                //    u += 1.5f;

                float u = 0;
                if (UniversalRandom.GetInstance().NextDouble() <= .5)
                    u = -.5f - .3f * (float)(-UniversalRandom.GetInstance().NextDouble());
                else
                    u = (float)(1.5f + .3f * UniversalRandom.GetInstance().NextDouble());

                var pos = (t.vertices[0] + u * t.ab + v * t.ac) / terrainScale;
                //var treePos = new Vector3(-halfHeightMapSize + (float)UniversalRandom.GetInstance().NextDouble() * (heightMapSize-50), 0,
                //    -halfHeightMapSize + (float)UniversalRandom.GetInstance().NextDouble() * (heightMapSize-50));

                float X = pos.X + heightMapSize / 2f,
                    Z = pos.Z +heightMapSize / 2f;

                float Xlerp = X % 1f,
                    Zlerp = Z % 1f;

                int x0 = (int)X,
                    z0 = (int)Z,
                    x1 = x0 + 1,
                    z1 = z0 + 1;

                float height;
                float k;
                if (Xlerp + Zlerp > 1)
                {
                    float h1 = MathHelper.Lerp(heightMap[x0, z1], heightMap[x1, z1], Xlerp);
                    float h2 = MathHelper.Lerp(heightMap[x1, z0], heightMap[x1, z1], Zlerp);
                    k = h2 / h1;
                    height = MathHelper.Lerp(h1, h2, .5f);
                }
                else
                {
                    float h1 = MathHelper.Lerp(heightMap[x0, z0], heightMap[x1, z0], Xlerp),
                        h2 = MathHelper.Lerp(heightMap[x0, z0], heightMap[x0, z1], Zlerp);
                    k = h2 / h1;
                    height = MathHelper.Lerp(h1, h2, .5f);
                }
                pos.Y = height - 0.002f;

                if (k > 1.02 ) continue;

                GameObject obj;
                switch(UniversalRandom.GetInstance().Next(0, 3))
                {
                case 0:
                    obj = new OakTree(gameInstance);
                    obj.Scale = 3 + 3 * (float)UniversalRandom.GetInstance().NextDouble();
                    FireflyCandidates.Add(obj);
                    break;
                case 1:
                    obj = new BirchTree(gameInstance);
                    obj.Scale = 3 + 3 * (float)UniversalRandom.GetInstance().NextDouble();
                    FireflyCandidates.Add(obj);
                    break;
                default:
                    obj = new Stone(gameInstance);
                    obj.Scale = 0.5f + (float)(.25 * UniversalRandom.GetInstance().NextDouble());
                    break;
                }

                obj.Position = terrainScale * pos;
                obj.Rotation = new Vector3(0, MathHelper.Lerp(0, MathHelper.Pi * 2, (float)UniversalRandom.GetInstance().NextDouble()), 0);

                GraphicalObjects.Add(obj);
                ShadowCasterObjects.Add(obj);
            }

            for (int i = 0; i < FireflyCandidates.Count; i+=5)
            {
                ParticleEmitter emitter = new ParticleEmitter(fireflySystem, 80, FireflyCandidates[i].Position);
                emitter.Origin = FireflyCandidates[i].Position + Vector3.Up * 500;
                fireflyEmitter.Add(emitter);
            }

            #endregion

            //foreach (GameObject obj in GraphicalObjects)
            //{
            //    pointLights.Add(new PointLight(obj.Position + Vector3.Up * 500, new Vector3(0.7f, 0.7f, 0.7f), 450)
            //    {
            //        Model = pointLightModel
            //    });
            //}
            //GraphicalObjects.AddRange(pointLights);

            //List<FireObject> list = new List<FireObject>();
            //foreach (PointLight p in pointLights)
            //{
            //    FireObject obj = new FireObject(gameInstance, content, p.Position, p.Position + Vector3.Up * 10);
            //    list.Add(obj);

            //}
            //pointLights.AddRange(list);
            //GraphicalObjects.AddRange(list);

            #region Cameras

            var input = gameInstance.GetService<InputComponent>();

            gameInstance.GetService<CameraComponent>().AddCamera(new DebugCamera(new Vector3(-11800, 3000, -8200), input));
            Camera c;
            gameInstance.GetService<CameraComponent>().AddCamera(c = new ThirdPersonCamera(Car, input));
            gameInstance.GetService<CameraComponent>().CurrentCamera = c;

            #endregion

            #region DynamicEnvironment

            // TODO: CARMOVE
            environmentCubeMap = new RenderTargetCube(this.GraphicsDevice, 256, true, SurfaceFormat.Color, DepthFormat.Depth16);
            Car.EnvironmentMap = skyMap;

            #endregion

            #region PostProcess

            postProcessingComponent = new PostProcessingComponent(Game);
            Game.Components.Add(postProcessingComponent);

            postProcessTexture = new RenderTarget2D(GraphicsDevice,
                GraphicsDevice.Viewport.Width,
                GraphicsDevice.Viewport.Height,
                true, SurfaceFormat.Color, DepthFormat.Depth24);

            #endregion

            // Adding a prelighingrenderer as a service
            prelightingRenderer = new PrelightingRenderer(GraphicsDevice, content);
            Game.AddService(typeof(PrelightingRenderer), prelightingRenderer);

            #region ShadowMapEffect

            shadowMapEffect = content.Load<Effect>(@"Effects\ShadowMap");

            #endregion

            #region Gameplay Trigger Manager (with sample)

            /// <summary>
            /// Gets the triggermanager
            /// Add new PositionTrigger
            /// Hook up to listener => when hit, use the thunderBoltGenerator and spawn a flash
            /// Adds it to triggers.
            /// </summary>

            //var triggerManager = gameInstance.GetService<TriggerManager>();

            //int noOfCheckpoints = 10;
            //for (int i = 0; i < noOfCheckpoints; i++)
            //{
            //    var trigger = new PositionTrigger(raceTrack.CurveRasterization, (int)(((float)i / noOfCheckpoints) * raceTrack.CurveRasterization.Points.Count), true, true);
            //    string cp = "Checkpoint " + i;
            //    trigger.Triggered += (sender, e) =>
            //    {
            //        Console.WriteLine(cp);
            //    };
            //    triggerManager.Triggers.Add("checkpoint"+i, trigger);
            //}

            #endregion

            #region Game Mode
            if (gameInstance.GetService<ServerClient>().connected)
            {
                foreach (var player in gameInstance.GetService<ServerClient>().Players.Values)
                {
                    gameInstance.GetService<CarControlComponent>().AddCar(player, null, this);
                }
                var carList = gameInstance.GetService<CarControlComponent>().Cars.OrderBy(pc => pc.Key.ID).Select(pc => pc.Value).ToList();
                SetCarsAtStart(carList);
            }

            int cp = 6;
            if (gameModeChoice == GameModeChoice.SimpleRace)
                this.mode = new SimpleRaceMode(gameInstance, 3, cp, raceTrack, Car);
            else if (gameModeChoice == GameModeChoice.Multiplayer)
                this.mode = new MultiplayerRaceMode(gameInstance, 3, cp, raceTrack, Car);
            else
                throw new Exception("Stop choosing weird game modes");

            gameInstance.AddService(typeof(GameplayMode), mode);

            #endregion

            #region Checkpoint lights
            for (int i=0; i<cp; i++) {
                var point = raceTrack.GetCurveRasterization(cp).Points[i];

                var pl = new CheckpointLight(point.Position + 500 * Vector3.Up)
                {
                    Model = pointLightModel
                };
                pointLights.Add(pl);
                GraphicalObjects.Add(pl);

                #region Fire
                int halfnumberoffire = 5;

                for (int o = -halfnumberoffire + 1; o < halfnumberoffire; o++)
                {
                    Vector3 side = Vector3.Cross(Vector3.Normalize(raceTrack.Curve.GetPoint((i) / (float)cp + .001f) - point.Position), Vector3.Up);

                    var fire = new FireObject(content, fireSystem, fireSmokeSystem, point.Position + side * 100 * o -
                        Vector3.Up * 400 +
                        Vector3.Up * 650 * (float)Math.Cos(o/(float)halfnumberoffire), Vector3.Up * 10);
                    pointLights.Add(fire);
                    GraphicalObjects.Add(fire);
                }
                #endregion
            }
            #endregion

            #region BackgroundSound
            loopSoundManager.AddNewSound("forestambient");
            #endregion

            prelightingRenderer.GameObjects = GraphicalObjects;

            init = true;
        }
示例#23
0
 public GameplayScreen(string levelPath, GameplayMode gameplayMode)
     : this(levelPath, gameplayMode, 0)
 {
 }
示例#24
0
 public void SetAreaToMode(GameplayMode newMode)
 {
     DeactivateAllPlayAreas();
     GetCorrespondingPlayArea(newMode).SetActive(true);
 }
示例#25
0
    //other public stuff

    public void SetTranslationConstraintsFromMode(GameplayMode mode)
    {
        rb.constraints  = RigidbodyConstraints.FreezeRotation & rb.constraints;         //only rotation constraints remain
        rb.constraints |= GetMovementConstraints(mode);
    }
示例#26
0
    //IEnemyComponent

    public virtual void Initialize(Player[] players, GameplayMode gameplayMode, PlayArea playArea)
    {
        this.players      = players;
        this.gameplayMode = gameplayMode;
        this.playArea     = playArea;
    }
示例#27
0
    public void TransitionToGameplayMode(GameplayMode newMode)
    {
//		enemySpawner.SetMode(newMode);
        StartCoroutine(WaitForRightConditionsAndTransition(newMode));
    }
示例#28
0
 UnityException GetUnknownModeException(GameplayMode mode)
 {
     return(new UnityException("Unknown GameplayMode \"" + mode.ToString() + "\""));
 }
示例#29
0
 public Gameplay(GameplayMode mode)
 {
     this.mode = mode;
 }
示例#30
0
        public static BeatmapData CreateTransformedBeatmapData(BeatmapData beatmapData, GameplayOptions gameplayOptions, GameplayMode gameplayMode)
        {
            BeatmapData beatmapData2 = beatmapData;

            if (gameplayOptions.mirror)
            {
                beatmapData2 = BeatDataMirrorTransform.CreateTransformedData(beatmapData2);
            }
            if (gameplayMode == GameplayMode.SoloNoArrows)
            {
                beatmapData2 = BeatmapDataNoArrowsTransform.CreateTransformedData(beatmapData2);
            }
            if (gameplayOptions.obstaclesOption != GameplayOptions.ObstaclesOption.All)
            {
                beatmapData2 = BeatmapDataObstaclesTransform.CreateTransformedData(beatmapData2, gameplayOptions.obstaclesOption);
            }
            if (beatmapData2 == beatmapData)
            {
                beatmapData2 = beatmapData.GetCopy();
            }
            if (gameplayOptions.staticLights)
            {
                BeatmapEventData[] beatmapEventData = new BeatmapEventData[]
                {
                    new BeatmapEventData(0f, BeatmapEventType.Event0, 1),
                    new BeatmapEventData(0f, BeatmapEventType.Event4, 1)
                };
                beatmapData2 = new BeatmapData(beatmapData2.beatmapLinesData, beatmapEventData);
            }
            return(beatmapData2);
        }
示例#31
0
    Vector3 DenormalizePoint(Vector3 normedPoint, GameplayMode targetMode)
    {
        Vector3 targetAreaScale = GetCorrespondingPlayArea(targetMode).transform.localScale;

        return(Vector3.Scale(normedPoint, targetAreaScale));
    }
示例#32
0
 public void OnRoundDetails(int roundId, string serverName, string mapName, FactionCountry attackingFaction, FactionCountry defendingFaction, GameplayMode gameplayMode, GameType gameType)
 {
 }
        public static BeatmapData CreateTransformedBeatmapData(BeatmapData beatmapData, GameplayOptions gameplayOptions, GameplayMode gameplayMode)
        {
            BeatmapData newData = (BeatmapData)songDataRedirect.InvokeOriginal(null, beatmapData, gameplayOptions, gameplayMode);

            if (ShouldApplyModifers())
            {
                //Console.WriteLine("Applying BeatMap modifiers.");
                newData = ApplyModifiers(newData);
            }

            return(newData);
        }