Esempio n. 1
0
    public void CreateAllBuild(string modelName)
    {
        BuildHandler.Instance.manager.LoadBuildBaseRes(BuildTypeEnum.Building, modelName);

        List <BuildRuleEnum> ruleList = EnumUtil.GetEnumValue <BuildRuleEnum>();

        for (int i = 0; i < ruleList.Count; i++)
        {
            BuildRuleEnum itemRule = ruleList[i];
            GameObject    objModel = BuildHandler.Instance.manager.GetBuildBaseModel(null, itemRule, modelName);
            GameObject    objBuild = Instantiate(gameObject, modelBuilding.gameObject);

            BuildBase buildBase = objBuild.GetComponent <BuildBase>();

            BuildBaseBean buildBaseData = new BuildBaseBean();
            Vector3       centerPostion = new Vector3(i * 5, 0, 0);
            buildBaseData.SetBuildPosition(centerPostion);
            buildBaseData.SetBuildRule(itemRule);
            buildBaseData.SetBuildType(BuildTypeEnum.Building);

            buildBase.SetBuilBaseData(buildBaseData);
            objBuild.transform.position = centerPostion;

            BuildHandler.Instance.manager.AddBuildBase(buildBase);
            buildBase.AutoCheckBuildRule();
            BuildRuleEnumTool.GetBuildRuleData(itemRule, out int number, out bool up, out bool down, out bool left, out bool right, out bool before, out bool after);
            if (up)
            {
                CreateBuildItem(centerPostion + new Vector3(0, 1, 0));
            }
            if (down)
            {
                CreateBuildItem(centerPostion + new Vector3(0, -1, 0));
            }
            if (left)
            {
                CreateBuildItem(centerPostion + new Vector3(-1, 0, 0));
            }
            if (right)
            {
                CreateBuildItem(centerPostion + new Vector3(1, 0, 0));
            }
            if (before)
            {
                CreateBuildItem(centerPostion + new Vector3(0, 0, -1));
            }
            if (after)
            {
                CreateBuildItem(centerPostion + new Vector3(0, 0, 1));
            }
            buildBase.AutoCheckBuildRule();
        }
    }
Esempio n. 2
0
 /// <summary>
 /// 获取建筑模型
 /// </summary>
 /// <param name="buildRule"></param>
 /// <returns></returns>
 public GameObject GetBuildBaseModel(List <BuildBase> listAroundBuildBase, BuildBase centerBuildBase, BuildRuleEnum buildRule)
 {
     if (dicBuildRule.TryGetValue(buildRule, out BuildBaseModelBean modelData))
     {
         if (modelData != null)
         {
             if (!CheckUtil.ListIsNull(listAroundBuildBase))
             {
                 //是否有地面方块
                 bool          hasGround       = false;
                 BuildRuleEnum centerBuildRule = centerBuildBase.buildBaseData.GetBuildRule();
                 //检测周围方块
                 for (int i = 0; i < listAroundBuildBase.Count; i++)
                 {
                     BuildBase itemBuildBase = listAroundBuildBase[i];
                     //检测是否下面有砖块,并且砖块为地基
                     if (BuildRuleEnumTool.CheckHasDown(centerBuildRule) &&
                         (itemBuildBase.buildBaseData.GetBuildType() == BuildTypeEnum.Foundation || itemBuildBase.buildBaseData.GetBuildType() == BuildTypeEnum.Ground))
                     {
                         hasGround = true;
                     }
                 }
                 //如果有地面方块,则使用地基层
                 if (hasGround)
                 {
                     if (!CheckUtil.ListIsNull(modelData.listBaseModel))
                     {
                         return(RandomUtil.GetRandomDataByList(modelData.listBaseModel));
                     }
                 }
             }
             if (!CheckUtil.ListIsNull(modelData.listObjModel))
             {
                 return(RandomUtil.GetRandomDataByList(modelData.listObjModel));
             }
         }
     }
     if (dicBuildRule.TryGetValue(BuildRuleEnum.Zero, out BuildBaseModelBean modelDataZero))
     {
         if (!CheckUtil.ListIsNull(modelDataZero.listObjModel))
         {
             return(modelDataZero.listObjModel[0]);
         }
     }
     return(null);
 }
Esempio n. 3
0
    /// <summary>
    /// 获取建筑规则
    /// </summary>
    /// <param name="listData"></param>
    public virtual BuildRuleEnum GetBuildRule(List <BuildBase> listData)
    {
        bool upRule     = false;
        bool downRule   = false;
        bool leftRule   = false;
        bool rightRule  = false;
        bool beforeRule = false;
        bool afterRule  = false;

        for (int i = 0; i < listData.Count; i++)
        {
            BuildBase buildBase = listData[i];
            Vector3   tempRule  = (buildBaseData.buildPosition.GetVector3() - buildBase.buildBaseData.buildPosition.GetVector3());
            if (tempRule.y == 1)
            {
                downRule = true;
            }
            if (tempRule.y == -1)
            {
                upRule = true;
            }
            if (tempRule.x == 1)
            {
                leftRule = true;
            }
            if (tempRule.x == -1)
            {
                rightRule = true;
            }
            if (tempRule.z == 1)
            {
                beforeRule = true;
            }
            if (tempRule.z == -1)
            {
                afterRule = true;
            }
        }
        return(BuildRuleEnumTool.GetBuildRule(listData.Count, upRule, downRule, leftRule, rightRule, beforeRule, afterRule));
    }