예제 #1
0
    /// <summary>
    /// 自动检测建筑的朝向规则
    /// </summary>
    public virtual void AutoCheckBuildRule()
    {
        List <BuildBase> listData  = BuildHandler.Instance.manager.GetAroundBuildBase(this);
        BuildRuleEnum    buildRule = GetBuildRule(listData);

        ChangeBuildRule(buildRule);
    }
예제 #2
0
    /// <summary>
    /// 设置建筑模型
    /// </summary>
    /// <param name="buildRule"></param>
    public virtual void SetBuildModel(BuildRuleEnum buildRule)
    {
        GameObject objModel = BuildHandler.Instance.manager.GetBuildBaseModel(this, buildRule, "def");

        if (objModel == null)
        {
            return;
        }
        if (objBuildModel)
        {
            DestroyImmediate(objBuildModel);
            objBuildModel = null;
        }
        objBuildModel = Instantiate(gameObject, objModel);

        //Renderer[] listRenderer = objBuildModel.GetComponentsInChildren<Renderer>();
        //if (listRenderer != null)
        //{
        //    foreach (Renderer itemRenderer in  listRenderer)
        //    {
        //        Shader shader= Shader.Find("Color/MasterShaderLocalSpace");
        //        itemRenderer.material.shader = shader;
        //    }
        //}

        objBuildModel.transform.localPosition = Vector3.zero;
        objBuildModel.transform.eulerAngles   = Vector3.zero;
        objBuildModel.transform.localScale    = Vector3.one;
    }
예제 #3
0
 /// <summary>
 /// 获取建筑模型
 /// </summary>
 /// <param name="buildTypeEnum"></param>
 /// <param name="name"></param>
 /// <param name="buildRule"></param>
 public GameObject GetBuildBaseModel(BuildBase centerBuildBase, BuildRuleEnum buildRule, string name)
 {
     if (dicBuildBaseForBuilding.TryGetValue(name, out BuildBaseManager buildBaseManager))
     {
         List <BuildBase> listAroundBuildBase = GetAroundBuildBase(centerBuildBase);
         return(buildBaseManager.GetBuildBaseModel(listAroundBuildBase, centerBuildBase, buildRule));
     }
     return(null);
 }
예제 #4
0
 /// <summary>
 /// 修改建造规则
 /// </summary>
 public virtual void ChangeBuildRule(BuildRuleEnum buildRule)
 {
     //方向不同时才修改模型
     if (buildRule == buildBaseData.GetBuildRule())
     {
         return;
     }
     buildBaseData.SetBuildRule(buildRule);
     SetBuildModel(buildRule);
     AnimForChangeRule();
 }
예제 #5
0
    /// <summary>
    /// 添加所有规则
    /// </summary>
    public void AddAllRule()
    {
        List <BuildRuleEnum> listData = EnumUtil.GetEnumValue <BuildRuleEnum>();

        for (int i = 0; i < listData.Count; i++)
        {
            BuildRuleEnum      itemRule       = listData[i];
            BuildBaseModelBean buildBaseModel = new BuildBaseModelBean();
            buildBaseModel.buildRule = itemRule;
            listBuildRuleModel.Add(buildBaseModel);
        }
    }
예제 #6
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();
        }
    }
예제 #7
0
    public static void GetBuildRuleData(BuildRuleEnum buildRule, out int number, out bool up, out bool down, out bool left, out bool right, out bool before, out bool after)
    {
        int ruleTemp = (int)buildRule;

        number = (ruleTemp % 10000000) / 1000000;
        up     = (ruleTemp % 1000000) / 100000 == 1 ? true : false;
        down   = (ruleTemp % 100000) / 10000 == 1 ? true : false;
        left   = (ruleTemp % 10000) / 1000 == 1 ? true : false;
        right  = (ruleTemp % 1000) / 100 == 1 ? true : false;
        before = (ruleTemp % 100) / 10 == 1 ? true : false;
        after  = (ruleTemp % 10) == 1 ? true : false;
    }
예제 #8
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);
 }
예제 #9
0
 public void SetBuildRule(BuildRuleEnum buildRule)
 {
     this.buildRule = (int)buildRule;
 }
예제 #10
0
    /// <summary>
    /// 检测是否有下面
    /// </summary>
    /// <param name="buildRule"></param>
    /// <returns></returns>
    public static bool CheckHasDown(BuildRuleEnum buildRule)
    {
        int ruleTemp = (int)buildRule;

        return((ruleTemp % 100000) / 10000 == 1 ? true : false);
    }