随机路(最新)

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class RoadRandom : MonoBehaviour
{
  //  public GameObject StartLand;//length = 1.6
  private float StartLandLength;
  //  public GameObject MidLand;//length = 3.5
  private float MidLandLength;
  //  public GameObject EndLand;//length = 1.86
  private float EndLandLength;
  //  private GameObject[] Monsters_Temp;
  private List<GameObject> Monsters_Temp;
  public List<GameObject> Monsters_Dusk;
  //  public GameObject[] Monsters_Dusk;
  public List<GameObject> Monsters_Ground;
  //  public GameObject[] Monsters_Ground;
  public List<GameObject> Monsters_Night;
  //  public GameObject[] Monsters_Night;
  public List<GameObject> Monsters_Rain;
  //  public GameObject[] Monsters_Rain;
  public List<GameObject> StartList_1;
  public List<GameObject> MidList_1;
  public List<GameObject> EndList_1;
  public List<GameObject> StartList_2;
  public List<GameObject> MidList_2;
  public List<GameObject> EndList_2;
  private GameObject obj;
  private int currentDintance;
  //curret  car distance 距离
  private int CurDistance;
  private int RandomDistance = 30;
  //随机一段路的路长度
  private int RemainDistance= 20;//15
  //触发生成随机路段点
  //  private float TinyRoadDis = 3.5f;//加载每一小段的长度
  private int SumWeight;
  private List<int> WeightList;
  private List<int> TimesList;
  private int MinCliffIndex = 3;
  private float alreadyDis = 0;//记录每一次随机的路段的长度,随机完之后清零,下一次继续记录
  private float offsetX = 0.025f;
  //从加载一直到结束的计数
  private int roadType;
  //随机的路段类型 1,2,3,4,5,6
  private int randomNum;
  bool isCliff = false;
  // Cliff 悬崖
  private int StartRandomRoad = 3000;
  //开始第一次要随机的路段点,在100米处开始随机路面  加上中间过渡路面 136
  private int LastRoadType = 0;
  //2级路面
  private float Land2Height = 3.05f;//2.1
  //开始随机路段的前的游戏距离,以3000为标准
  private float RandomRoadLength = 1146;//3006.5f //1146表示换算成游戏引擎里面的距离,来判断是否加载路面
  //随机路段总长度
  private bool isRandom = false;
  //路段的Y轴偏移量
  private float YOffset = -2.1f;//-2.45
  private float XOffset = 0.01f;
  //-2.402995f
  private float MonsterYOffset = 0f;
  //-1.22278f
  private List<MonsterEntity> RandomMonsterList;
  private List<List<int>> monsterWeightList;
  private List<int> MonsterSumList;
  private float LandHalfHeight = 0f;
  private LoadBgImage bgimageload;

  [HideInInspector]
  public GameObject start_1;
  [HideInInspector]
  public GameObject start_2;
  [HideInInspector]
  public GameObject mid_1;
  [HideInInspector]
  public GameObject mid_2;
  [HideInInspector]
  public GameObject end_1;
  [HideInInspector]
  public GameObject end_2;

  public GameObject CurMidScene;

  private bool isChangeSceneBg1 = false;
  private bool isChangeSceneBg2 = false;
  private bool isChangeSceneBg3 = false;
  //  private bool isChangeSceneBg4 = false;

  //中间过渡场景路面高度
  private float MidSceneHeight = 4.72f;

  private ArrayList sceneRandomList;

  private bool isMidScene = false;
  private float isMidSceneWaitTime = 2f;

  //已经添加的中间场景的数量
  private int addedMidSceneNum = 0;

  //是否改变背景
  private bool isChangeBg = false;

  //添加中间场景的距离倍数
//  private float addMidSceneDisTimes = 3000;
  private float addMidSceneDisTimes = 1146;//此倍数是引擎里面的距离
  private float startFirstRandomRoadPoint = 1134.54f; // 1134.54f = 2970*0.382f

//  private CarControlor stopLastBoss;

  void Awake ()
  {
    InitLandList ();
    CurMidScene = (GameObject)Resources.Load (AllPrefabsInfo.MIDSCENE);
    InitMonsterList ();
  }

  void Start ()
  {
//    stopLastBoss = GameObject.FindGameObjectWithTag ("Player").GetComponent<CarControlor> ().controlBossInLevel (false);
    sceneRandomList = new ArrayList{2,3,4} ;
    //    RandomMonsterList = MonsterParseXML.monsterDict [LandParseXML.landList [LandParseXML.index].Id];
    //    RandomMonsterList = MonsterParseXML.GetMonsterListById(LandParseXML.landList [LandParseXML.index].Id);
    RandomMonsterList = MonsterParseXML.GetMonsterListById(LandParseXML.GetLand(LandParseXML.index).Id);
    bgimageload = gameObject.GetComponent<LoadBgImage> ();
    TempValue.GetInstance ().curLandType = (int)Land_type.Dusk_land;
    LandParseXML.index = 0;
    InitLandID ();
    InitLandLength ();
    //玩家行驶距离
    InitCurParm ();
    InitCurMonster ();
    //第一次加载怪物
    Monsters_Temp = Monsters_Dusk;
  }

  void InitCurParm ()
  {
    Debug.LogWarning ("************ * * * * * ** * ** * * * *重新分配路面!" + LandParseXML.index);
    WeightList = new List<int> ();
    TimesList = new List<int> ();
    //LandParseXML.GetLand(LandParseXML.index).Id
    //    LandEntity temp = LandParseXML.landList [LandParseXML.index];
    LandEntity temp = LandParseXML.GetLand(LandParseXML.index);

    TimesList.Add (temp.times1);
    TimesList.Add (temp.times2);
    TimesList.Add (temp.times3);
    TimesList.Add (temp.times4);
    TimesList.Add (temp.times5);
    TimesList.Add (temp.times6);

    WeightList.Add (SumWeight += temp.weight1);
    WeightList.Add (SumWeight += temp.weight2);
    WeightList.Add (SumWeight += temp.weight3);
    WeightList.Add (SumWeight += temp.weight4);
    WeightList.Add (SumWeight += temp.weight5);
    WeightList.Add (SumWeight += temp.weight6);

  }

  void InitCurMonster ()
  {
    monsterWeightList = new List<List<int>> ();
    List<int> singleWeightList;
    MonsterSumList = new List<int> ();
    MonsterEntity temp;
    int flag;
    int count = RandomMonsterList.Count;
    for (int i = 0; i < count; i++) {
      flag = 0;
      singleWeightList = new List<int> ();
      temp = RandomMonsterList [i];
      singleWeightList.Add (flag += temp.SunFlower);
      singleWeightList.Add (flag += temp.Stone);
      singleWeightList.Add (flag += temp.ShutUp);
      singleWeightList.Add (flag += temp.CornHeap);
      singleWeightList.Add (flag += temp.Empty);
      MonsterSumList.Add (flag);
      monsterWeightList.Add (singleWeightList);
    }
  }

  void Update ()
  {
    //*2.6178f 显示玩家距离的系数(玩家距离并非游戏引擎距离)
//    CurDistance = (int)(UserInfos.GetInstance ().distance * 2.6178f);//现在是从0开始,记录车子跑的距离
    CurDistance = UserInfos.GetInstance ().finialDistance;//现在是从0开始,记录车子跑的当前距离
    if (RandomRoadLength > startFirstRandomRoadPoint) {//100是相当于3000米时,判断开始加载随机路面
      //如果随机的路长和当前车子跑的距离小于14米(引擎距离)时,随机下一段路,随机下一段路的路长为30米(引擎距离)
//      Debug.LogWarning ("*******************************随机路1**********************************************" + RandomRoadLength);
      if (RandomRoadLength - CurDistance*0.382f < RemainDistance) {
        RandomSingleLand ();
      }
    }  else if (CurDistance > StartRandomRoad - RemainDistance) {//StartRandomRoad -  RandomDis 等到汽车行驶到一个点,然后触发随机路面
      RandomSingleLand ();
    }
    if (isChangeBg) {
      ChangeBgTexture ();
    }
  }
  void RandomSingleLand ()
  {
    if (isRandom) {
      return;
    }
    isRandom = true;
    //添加过渡场景
    bool result =  NewMidScene (RandomRoadLength);

    //设置路的类型
    if (result) {
      SetCurSceneLand (TempValue.GetInstance ().curLandType);
    }
    //LandParseXML.GetLand(LandParseXML.index).Id
    //    LandEntity le = LandParseXML.landList [LandParseXML.index];
    LandEntity le = LandParseXML.GetLand(LandParseXML.index);
    //开始随机
    int count = WeightList.Count;
    //现在默认随机 RandomDistance = 30米
    while (alreadyDis <= RandomDistance) { //玩家的距离减去开始的3000米之后,行驶的距离和已经创建路的2/3处对比,判断是否创建下一级路面 
      randomNum = (int)(Random.value * SumWeight);//随机一个权重值
      //      Debug.Log("==========================="+randomNum);
      for (int i = 0; i < count; i++) {
        if (WeightList [i] > randomNum) {//和配置表中的权重对比
          if (isCliff) {
            roadType = (int)(Random.value * MinCliffIndex) + 1;
            isCliff = false;
          }  else {
            roadType = i + 1;//
            isCliff = (roadType >= MinCliffIndex);//判断是否为悬崖
          }
          //创建路段
          int times = TimesList [roadType - 1];
          createRoad (roadType, times);
          LastRoadType = roadType > 3 ? 0 : roadType;
          break;
        }
      }
    }
    Debug.LogWarning (alreadyDis + "*******************RandomRoadLength******************" + RandomRoadLength);
    RandomRoadLength += alreadyDis;
    Debug.LogWarning ("*******************RandomRoadLength******************" + RandomRoadLength);
    alreadyDis = 0;

    if ((CurDistance + RandomDistance) > le.MINDIS) {
//      Debug.LogWarning ("*************************************************************************************************RandomDistanceRandomDistance:" + RandomDistance);
      LandParseXML.index++;
      RandomMonsterList = MonsterParseXML.GetMonsterListById(LandParseXML.GetLand(LandParseXML.index).Id);
      InitCurParm ();
    }
    isRandom = false;
  }


  bool NewMidScene(float length){

    int temp = (int)(length / addMidSceneDisTimes);
    Debug.LogWarning (LastRoadType + "*******************temp******************" + temp + "*******************添加中间场景时的距离length:" + length + "***********添加中间场景倍数:" + addMidSceneDisTimes);
    if (temp <= addedMidSceneNum) {
      return false;
    }
    //暂停前一个场景的Boss
    GameObject.FindGameObjectWithTag ("Player").GetComponent<CarControlor> ().controlBossInLevel (false);
    //切换场景前添加悬崖
    if (LastRoadType <= (int)LANDTYPE.THIRD) {
      createRoad ((int)LANDTYPE.FOURTH, 1);
      RandomRoadLength += alreadyDis;
      alreadyDis = 0;
      LastRoadType = (int)LANDTYPE.FOURTH;
    }

//    float tempPos = length/2.6178f;
    float tempPos = length;
    //36.5中间场景的长度的一半
//    GameObject ob1 = (GameObject)Instantiate (CurMidScene, new Vector3 (tempPos + 36.5f, MidSceneHeight, 7f), Quaternion.identity);
    GameObject ob1 = (GameObject)Instantiate (CurMidScene, new Vector3 (tempPos + 33.5f, MidSceneHeight, 7f), Quaternion.identity);

    addedMidSceneNum++;
    //72.5f 中间场景的总长度
    RandomRoadLength += 72.5f;
    isChangeBg = true;
    SetRandomBgIndex ();

    createRoad ((int)LANDTYPE.FOURTH, 1);
    RandomRoadLength += alreadyDis;
    alreadyDis = 0;
    LastRoadType = (int)LANDTYPE.FOURTH;
    return true;
  }
  /// <summary>
  /// 改变游戏背景Texture Update
  /// </summary>
  void ChangeBgTexture ()
  {
    int temp = (int)((CurDistance *0.382f) / (addMidSceneDisTimes + 20 ));
    if (addedMidSceneNum <=0 || temp <= addedMidSceneNum - 1) {
      return;
    }
    ChangeRandomBg ();
    isChangeBg = false;

  }
    
//  bool HasDownRoad (int temp)
//  {
//    return   (temp == 1) || (temp == 3);
//  }
//
//  bool HasUpRoad (int temp)
//  {
//    return   (temp == 2) || (temp == 3);
//  }
//
//  bool HasCliff (int temp)
//  {
//    return   temp >= 4;
//  }

  void createRoad (int roadType, int times)
  {
    //StartLand + MidLand + EndLand 根据游戏距离,切换场景类型、背景类型、路面类型
    //创建路面 
    switch (roadType) {
    case (int)LANDTYPE.FIRST:
      AddRoadLevel1 (times);
      break;
    case (int)LANDTYPE.SECOND:
      //加载2级路面
      AddRoadLevel2 (times);
      break;
    case (int)LANDTYPE.THIRD:
      //加载3级路面
      AddRoadLevel3 (times);
      break;
    case (int)LANDTYPE.FOURTH:
    case (int)LANDTYPE.FIFTH:
    case (int)LANDTYPE.SIXTH:
      //加载6级路面
      AddRoadLevel456 (times);
      break;
    }
  }

  /// <summary>
  /// 添加一级路面
  /// </summary>EndYOffset
  /// <param name="times">Times.</param>
  void AddRoadLevel1 (int times)
  {

    switch (LastRoadType) {
    case 1:
      break;
    case 2:
      //      obj = (GameObject)Instantiate (EndLand, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset + EndYOffset, 0), Quaternion.identity);  
      obj = (GameObject)Instantiate (end_2, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 5), Quaternion.identity);  
      alreadyDis += EndLandLength;
      //      obj = (GameObject)Instantiate (StartLand, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (start_1, new Vector3 (RandomRoadLength + alreadyDis + XOffset, YOffset, 5), Quaternion.identity);
      alreadyDis += StartLandLength;

      break;
    case 3:
      //      obj = (GameObject)Instantiate (EndLand, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset + EndYOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (end_2, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 5), Quaternion.identity);
      break;
    default :
      //      obj = (GameObject)Instantiate (StartLand, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (start_1, new Vector3 (RandomRoadLength + alreadyDis + XOffset, YOffset, 5), Quaternion.identity);
      alreadyDis += StartLandLength;

      break;
    }
    RandomMonster (times, MonsterYOffset);
    //添加路面RandomMonsterList = MonsterParseXML.monsterDict [LandParseXML.landList[LandParseXML.index ].Id];
    for (int i = 0; i < times; i++) {
      //      obj = (GameObject)Instantiate (MidLand, new Vector3 (RandomRoadLength +alreadyDis , YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (mid_1, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 5), Quaternion.identity);
      alreadyDis += MidLandLength;

    }
  }

  /// <summary>
  /// 添加二级路面
  /// </summary>
  /// <param name="roadType">Road type.</param>
  /// <param name="times">Times.</param>
  void AddRoadLevel2 (int times)
  {

    switch (LastRoadType) {
    case 1:
      //      obj = (GameObject)Instantiate (EndLand, new Vector3 (RandomRoadLength + alreadyDis, YOffset + EndYOffset, 0), Quaternion.identity);  
      obj = (GameObject)Instantiate (end_1, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 5), Quaternion.identity);  
      alreadyDis += EndLandLength;
      //      obj = (GameObject)Instantiate (StartLand, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (start_2, new Vector3 (RandomRoadLength + alreadyDis + offsetX, Land2Height + YOffset, 5), Quaternion.identity);
      alreadyDis += StartLandLength;

      break;
    case 2:
      break;
    case 3:
      //      obj = (GameObject)Instantiate (EndLand, new Vector3 (RandomRoadLength + alreadyDis, YOffset + EndYOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (end_1, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 5), Quaternion.identity);//修改为1

      break;
    default :
      //      obj = (GameObject)Instantiate (StartLand, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (start_2, new Vector3 (RandomRoadLength + alreadyDis + offsetX, Land2Height + YOffset, 5), Quaternion.identity);
      alreadyDis += StartLandLength;

      break;
    }
    RandomMonster2 (times, Land2Height + MonsterYOffset);
    for (int i = 0; i < times; i++) {
      //      obj = (GameObject)Instantiate (MidLand, new Vector3 (RandomRoadLength +alreadyDis, Land2Height + YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (mid_2, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 5), Quaternion.identity);
      alreadyDis += MidLandLength;

    }

  }

  /// <summary>
  /// 添加三级路面
  /// </summary>
  /// <param name="roadType">Road type.</param>
  /// <param name="times">Times.</param>
  void AddRoadLevel3 (int times)
  {
    switch (LastRoadType) {
    case 1:
      //      obj = (GameObject)Instantiate (StartLand, new Vector3 (RandomRoadLength + alreadyDis - StartLandLength, Land2Height + YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (start_2, new Vector3 (RandomRoadLength + alreadyDis - StartLandLength + offsetX, Land2Height + YOffset, 5), Quaternion.identity);

      break;
    case 2:
      //      obj = (GameObject)Instantiate (StartLand, new Vector3 (RandomRoadLength + alreadyDis - StartLandLength, YOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (start_1, new Vector3 (RandomRoadLength + alreadyDis - StartLandLength + XOffset, YOffset, 5), Quaternion.identity);

      break;
    case 3:
      break;
    default :
      obj = (GameObject)Instantiate (start_2, new Vector3 (RandomRoadLength + alreadyDis + offsetX, Land2Height + YOffset, 5), Quaternion.identity);
      obj = (GameObject)Instantiate (start_1, new Vector3 (RandomRoadLength + alreadyDis + XOffset, YOffset, 5), Quaternion.identity);
      alreadyDis += StartLandLength;

      break;
    }

    RandomMonster (times, MonsterYOffset);
    RandomMonster2 (times, Land2Height + MonsterYOffset);
    for (int i = 0; i < times; i++) {
      obj = (GameObject)Instantiate (mid_1, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 5), Quaternion.identity);
      obj = (GameObject)Instantiate (mid_2, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 5), Quaternion.identity);
      alreadyDis += MidLandLength;

    }
  }

  /// <summary>
  /// 4\5\6添加悬崖
  /// </summary>
  /// <param name="roadType">Road type.</param>
  /// <param name="times">Times.</param>
  void AddRoadLevel456 (int times)
  {
    switch (LastRoadType) {
    case 1:
      //      obj = (GameObject)Instantiate (EndLand, new Vector3 (RandomRoadLength + alreadyDis, YOffset + EndYOffset, 0), Quaternion.identity);  
      obj = (GameObject)Instantiate (end_1, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 5), Quaternion.identity);  
      alreadyDis += EndLandLength;

      break;
    case 2:
      //      obj = (GameObject)Instantiate (EndLand, new Vector3 (RandomRoadLength +alreadyDis, Land2Height + YOffset + EndYOffset, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (end_2, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 5), Quaternion.identity);
      alreadyDis += EndLandLength;

      break;
    case 3:
      obj = (GameObject)Instantiate (end_2, new Vector3 (RandomRoadLength + alreadyDis, Land2Height + YOffset, 5), Quaternion.identity);
      obj = (GameObject)Instantiate (end_1, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 5), Quaternion.identity);
      alreadyDis += EndLandLength;
      break;
    default :
      break;
    }

    for (int i = 0; i < times; i++) {
    obj = (GameObject)Instantiate (mid_1, new Vector3 (RandomRoadLength + alreadyDis, YOffset, 5), Quaternion.identity);
    alreadyDis += MidLandLength;
    obj.GetComponent<Land> ().GetComponent<SpriteRenderer> ().enabled = false;
    obj.GetComponent<PolygonCollider2D> ().enabled = false;

    }
  }

  /// <summary>
  /// 随机怪物
  /// </summary>
  /// <param name="times">Times.</param>
  /// <param name="Yoffset">Yoffset.</param>
  void RandomMonster (int times, float Yoffset)
  {
    List<float> refpoint = RandomMonsterList [times].RefreshPoint;
    float OnceLandLength = times * MidLandLength;
    if (refpoint.Count < 1) {
      return;
    }
    int SumMonsterWeight = MonsterSumList [times - 1];
    List<int> list = monsterWeightList [times - 1];
    for (int i = 0; i < refpoint.Count; i++) {
      int Num = (int)(Random.value * SumMonsterWeight);//随机一个权重值
      for (int j = 0; j < list.Count; j++) {
        if (list [j] > Num) {//和配置表中的权重对比
          createMonster (OnceLandLength * refpoint [i], j, Yoffset + LandHalfHeight);
          break;
        }
      }
    }
  }
  //创建怪物
  void createMonster (float offset, int type, float Yoffset)
  {
    switch (type) {
    case 0: //Sunflower
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, -1.29f, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 0.4f, 5), Quaternion.identity);
      break;
    case 1: //Stone
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 0.5f, 5), Quaternion.identity);
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, -1.719267f, 0), Quaternion.identity);
      break;
    case 2: //Mouse
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, -1.41f, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 0.5f, 5), Quaternion.identity);
      break;
    case 3: //CornHeap
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, -1.455448f, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 0.3f, 5), Quaternion.identity);
      break;
    case 4: //Empty
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, -1.455448f, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 0.3f, 5), Quaternion.identity);
      break;
    }
  }

  void RandomMonster2 (int times, float Yoffset)
  {
    List<float> refpoint = RandomMonsterList [times].RefreshPoint;
    float OnceLandLength = times * MidLandLength;
    if (refpoint.Count < 1) {
      return;
    }
    int SumMonsterWeight = MonsterSumList [times - 1];
    List<int> list = monsterWeightList [times - 1];
    for (int i = 0; i < refpoint.Count; i++) {
      int Num = (int)(Random.value * SumMonsterWeight);//随机一个权重值
      for (int j = 0; j < list.Count; j++) {
        if (list [j] > Num) {//和配置表中的权重对比
          createMonster2 (OnceLandLength * refpoint [i], j, Yoffset + LandHalfHeight);
          break;
        }
      }
    }
  }
  //创建怪物
  void createMonster2 (float offset, int type, float Yoffset)
  {
    switch (type) {
    case 0: //Sunflower
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 1.3f, 0), Quaternion.identity);//0.84 0.9899795
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 2f, 5), Quaternion.identity);//0.84 0.9899795
      break;
      //    case 1: //Stone
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 2.5f, 5), Quaternion.identity);//1.2
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 1.032524f, 0), Quaternion.identity);//1.2
      break;
    case 2: //Mouse
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 1.134363f, 0), Quaternion.identity);//0.669744f
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 2f, 5), Quaternion.identity);//0.669744f
      break;
    case 3: //CornHeap
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 1.131733f, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 2.2f, 5), Quaternion.identity);
      break;
    case 4: //Empty
      //      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 1.11f, 0), Quaternion.identity);
      obj = (GameObject)Instantiate (Monsters_Temp [type], new Vector3 (RandomRoadLength + alreadyDis + offset, 2.5f, 5), Quaternion.identity);
      break;
    }
  }



  void SetCurSceneLand (int landType)
  {
    switch (landType) {
    case (int)Land_type.Dusk_land:
      start_1 = StartList_1 [0]; //(GameObject)Resources.Load("Prefab/Land/1/Start_1");
      start_2 = StartList_2 [0];//(GameObject)Resources.Load("Prefab/Land/1/Start_2");

      mid_1 = MidList_1 [0];//(GameObject)Resources.Load("Prefab/Land/1/Mid_1");
      mid_2 = MidList_2 [0];//(GameObject)Resources.Load("Prefab/Land/1/Mid_2");

      end_1 = EndList_1 [0]; //(GameObject)Resources.Load("Prefab/Land/1/End_1");
      end_2 = EndList_2 [0];//(GameObject)Resources.Load("Prefab/Land/1/End_2");
      break;
    case (int)Land_type.Ground_land:
      start_1 = StartList_1 [1];//(GameObject)Resources.Load("Prefab/Land/2/Start_1");
      start_2 = StartList_2 [1];//(GameObject)Resources.Load("Prefab/Land/2/Start_2");

      mid_1 = MidList_1 [1];//(GameObject)Resources.Load("Prefab/Land/2/Mid_1");
      mid_2 = MidList_2 [1];//(GameObject)Resources.Load("Prefab/Land/2/Mid_2");

      end_1 = EndList_1 [1];//(GameObject)Resources.Load("Prefab/Land/2/End_1");
      end_2 = EndList_2 [1];//(GameObject)Resources.Load("Prefab/Land/2/End_2");
      break;
    case (int)Land_type.Night_land:
      start_1 = StartList_1 [2];//(GameObject)Resources.Load("Prefab/Land/3/Start_1");
      start_2 = StartList_2 [2];//(GameObject)Resources.Load("Prefab/Land/3/Start_2");

      mid_1 = MidList_1 [2];//(GameObject)Resources.Load("Prefab/Land/3/Mid_1");
      mid_2 = MidList_2 [2];//(GameObject)Resources.Load("Prefab/Land/3/Mid_2");

      end_1 = EndList_1 [2];//(GameObject)Resources.Load("Prefab/Land/3/End_1");
      end_2 = EndList_2 [2];//(GameObject)Resources.Load("Prefab/Land/3/End_2");
      break;
    case (int)Land_type.Rain_land:
      start_1 = StartList_1 [3];//(GameObject)Resources.Load("Prefab/Land/4/Start_1");
      start_2 = StartList_2 [3];//(GameObject)Resources.Load("Prefab/Land/4/Start_2");

      mid_1 = MidList_1 [3];//(GameObject)Resources.Load("Prefab/Land/4/Mid_1");
      mid_2 = MidList_2 [3];//(GameObject)Resources.Load("Prefab/Land/4/Mid_2");

      end_1 = EndList_1 [3];//(GameObject)Resources.Load("Prefab/Land/4/End_1");
      end_2 = EndList_2 [3];//(GameObject)Resources.Load("Prefab/Land/4/End_2");
      break;
    }
    //    isChangeLand = false;
  }

  /// <summary>
  /// 根据随机数初始化路面
  /// </summary>
  void InitLandID ()
  {
    switch (TempValue.GetInstance ().SceneID) {
    case 1:
      start_1 = StartList_1 [0]; //(GameObject)Resources.Load("Prefab/Land/1/Start_1");
      start_2 = StartList_2 [0];//(GameObject)Resources.Load("Prefab/Land/1/Start_2");

      mid_1 = MidList_1 [0];//(GameObject)Resources.Load("Prefab/Land/1/Mid_1");
      mid_2 = MidList_2 [0];//(GameObject)Resources.Load("Prefab/Land/1/Mid_2");

      end_1 = EndList_1 [0]; //(GameObject)Resources.Load("Prefab/Land/1/End_1");
      end_2 = EndList_2 [0];//(GameObject)Resources.Load("Prefab/Land/1/End_2");
      break;
    case 2:
      start_1 = StartList_1 [1];//(GameObject)Resources.Load("Prefab/Land/2/Start_1");
      start_2 = StartList_2 [1];//(GameObject)Resources.Load("Prefab/Land/2/Start_2");

      mid_1 = MidList_1 [1];//(GameObject)Resources.Load("Prefab/Land/2/Mid_1");
      mid_2 = MidList_2 [1];//(GameObject)Resources.Load("Prefab/Land/2/Mid_2");

      end_1 = EndList_1 [1];//(GameObject)Resources.Load("Prefab/Land/2/End_1");
      end_2 = EndList_2 [1];//(GameObject)Resources.Load("Prefab/Land/2/End_2");
      break;
    case 3:
      start_1 = StartList_1 [2];//(GameObject)Resources.Load("Prefab/Land/3/Start_1");
      start_2 = StartList_2 [2];//(GameObject)Resources.Load("Prefab/Land/3/Start_2");

      mid_1 = MidList_1 [2];//(GameObject)Resources.Load("Prefab/Land/3/Mid_1");
      mid_2 = MidList_2 [2];//(GameObject)Resources.Load("Prefab/Land/3/Mid_2");

      end_1 = EndList_1 [2];//(GameObject)Resources.Load("Prefab/Land/3/End_1");
      end_2 = EndList_2 [2];//(GameObject)Resources.Load("Prefab/Land/3/End_2");
      break;
    case 4:
      start_1 = StartList_1 [3];//(GameObject)Resources.Load("Prefab/Land/4/Start_1");
      start_2 = StartList_2 [3];//(GameObject)Resources.Load("Prefab/Land/4/Start_2");

      mid_1 = MidList_1 [3];//(GameObject)Resources.Load("Prefab/Land/4/Mid_1");
      mid_2 = MidList_2 [3];//(GameObject)Resources.Load("Prefab/Land/4/Mid_2");

      end_1 = EndList_1 [3];//(GameObject)Resources.Load("Prefab/Land/4/End_1");
      end_2 = EndList_2 [3];//(GameObject)Resources.Load("Prefab/Land/4/End_2");
      break;
    }
  }

  void InitLandList ()
  {
    StartList_1.Add ((GameObject)Resources.Load ("Prefab/Land/1/Start_1"));
    StartList_1.Add ((GameObject)Resources.Load ("Prefab/Land/2/Start_1"));
    StartList_1.Add ((GameObject)Resources.Load ("Prefab/Land/3/Start_1"));
    StartList_1.Add ((GameObject)Resources.Load ("Prefab/Land/4/Start_1"));

    MidList_1.Add ((GameObject)Resources.Load ("Prefab/Land/1/Mid_1"));
    MidList_1.Add ((GameObject)Resources.Load ("Prefab/Land/2/Mid_1"));
    MidList_1.Add ((GameObject)Resources.Load ("Prefab/Land/3/Mid_1"));
    MidList_1.Add ((GameObject)Resources.Load ("Prefab/Land/4/Mid_1"));

    EndList_1.Add ((GameObject)Resources.Load ("Prefab/Land/1/End_1"));
    EndList_1.Add ((GameObject)Resources.Load ("Prefab/Land/2/End_1"));
    EndList_1.Add ((GameObject)Resources.Load ("Prefab/Land/3/End_1"));
    EndList_1.Add ((GameObject)Resources.Load ("Prefab/Land/4/End_1"));

    StartList_2.Add ((GameObject)Resources.Load ("Prefab/Land/1/Start_2"));
    StartList_2.Add ((GameObject)Resources.Load ("Prefab/Land/2/Start_2"));
    StartList_2.Add ((GameObject)Resources.Load ("Prefab/Land/3/Start_2"));
    StartList_2.Add ((GameObject)Resources.Load ("Prefab/Land/4/Start_2"));

    MidList_2.Add ((GameObject)Resources.Load ("Prefab/Land/1/Mid_2"));
    MidList_2.Add ((GameObject)Resources.Load ("Prefab/Land/2/Mid_2"));
    MidList_2.Add ((GameObject)Resources.Load ("Prefab/Land/3/Mid_2"));
    MidList_2.Add ((GameObject)Resources.Load ("Prefab/Land/4/Mid_2"));

    EndList_2.Add ((GameObject)Resources.Load ("Prefab/Land/1/End_2"));
    EndList_2.Add ((GameObject)Resources.Load ("Prefab/Land/2/End_2"));
    EndList_2.Add ((GameObject)Resources.Load ("Prefab/Land/3/End_2"));
    EndList_2.Add ((GameObject)Resources.Load ("Prefab/Land/4/End_2"));
  }

  void InitMonsterList ()
  {
    Monsters_Dusk.Add ((GameObject)Resources.Load ("Prefab/Dusk/SunflowerRun"));
    Monsters_Dusk.Add ((GameObject)Resources.Load ("Prefab/Dusk/Stone1"));
    Monsters_Dusk.Add ((GameObject)Resources.Load ("Prefab/Dusk/MouseRun"));
    Monsters_Dusk.Add ((GameObject)Resources.Load ("Prefab/Dusk/Corn_Heap_Line"));
    Monsters_Dusk.Add ((GameObject)Resources.Load ("Prefab/Dusk/Empty"));

    Monsters_Ground.Add ((GameObject)Resources.Load ("Prefab/Ground/Ground_Pumpkin"));
    Monsters_Ground.Add ((GameObject)Resources.Load ("Prefab/Ground/Ground_Bone"));
    Monsters_Ground.Add ((GameObject)Resources.Load ("Prefab/Ground/Ground_Apple"));
    Monsters_Ground.Add ((GameObject)Resources.Load ("Prefab/Ground/Corn_Heap_Line"));
    Monsters_Ground.Add ((GameObject)Resources.Load ("Prefab/Ground/Empty"));


    Monsters_Night.Add ((GameObject)Resources.Load ("Prefab/Night/Night_Cactus"));
    Monsters_Night.Add ((GameObject)Resources.Load ("Prefab/Night/Night_Grass"));
    Monsters_Night.Add ((GameObject)Resources.Load ("Prefab/Night/Night_Duck"));
    Monsters_Night.Add ((GameObject)Resources.Load ("Prefab/Night/Corn_Heap_Line"));
    Monsters_Night.Add ((GameObject)Resources.Load ("Prefab/Night/Empty"));


    Monsters_Rain.Add ((GameObject)Resources.Load ("Prefab/Rain/Rain_Wind_Sway"));
    Monsters_Rain.Add ((GameObject)Resources.Load ("Prefab/Rain/Rain_Puddles_Wave"));
    Monsters_Rain.Add ((GameObject)Resources.Load ("Prefab/Rain/Rain_Frog_Jump"));
    Monsters_Rain.Add ((GameObject)Resources.Load ("Prefab/Rain/Corn_Heap_Line"));
    Monsters_Rain.Add ((GameObject)Resources.Load ("Prefab/Rain/Empty"));

  }

  void InitLandLength ()
  {
    StartLandLength = start_1.GetComponent<Land> ().GetComponent<SpriteRenderer> ().bounds.size.x;
    MidLandLength = mid_1.GetComponent<Land> ().GetComponent<SpriteRenderer> ().bounds.size.x;

    EndLandLength = end_1.GetComponent<Land> ().GetComponent<SpriteRenderer> ().bounds.size.x;
  }

  void ChangeRandomBg(){

    bgimageload.ChangeSceneIdBg (TempValue.GetInstance ().curLandType + 1);
 

  }

  int SetRandomBgIndex(){
    int tempIndex = Random.Range (0,sceneRandomList.Count);
    int tempId = (int)sceneRandomList [tempIndex];
    sceneRandomList.RemoveAt (tempIndex);
    //    int tempId = 2;
    switch (tempId) {
    case 1:
      Monsters_Temp = Monsters_Dusk;
      AudioMngr.GetInstance ().PlayMusic (AudioConfig.SCENE_DUST);
      break;
    case 2:
      Monsters_Temp = Monsters_Ground;
      AudioMngr.GetInstance ().PlayMusic (AudioConfig.UNDERGROUND);
      break;
    case 3:
      Monsters_Temp = Monsters_Night;
      AudioMngr.GetInstance ().PlayMusic (AudioConfig.NIGHT);
      break;
    case 4:
      Monsters_Temp = Monsters_Rain;
      AudioMngr.GetInstance ().PlayMusic (AudioConfig.RAIN);
      break;
    }

    if(sceneRandomList.Count <= 0){
      sceneRandomList.Add (2);
      sceneRandomList.Add (3);
      sceneRandomList.Add (4);
    }
    TempValue.GetInstance ().curLandType = tempId - 1;
    return tempId;
  }






}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值