Beispiel #1
0
    /**
     * 更新整體
     */
    public void tmpUpdateRoof()
    {
        BuildingObj nowBuilding = Buildings[selectFloor];

        nowBuilding.roofController.mainRidgeHeightOffset = Random.Range(-3, 3);
        nowBuilding.ResetRoofFunction();
    }
    /**
     * 將建築資料轉換成陣列
     * 目前想到三種方式:
     * 1.用個二維list  List<List<float>>,將各樓層與其參數記錄下來
     * 2.用個二維list  List<List<vector3>>,將其變數最小最大值放在X、Z,而 Y 放參數值
     * 3.用個 Dic
     */
    void BuildingDataToArray(List <BuildingObj> Buildings)           //*** 方法一:這個廢棄
    {
        List <List <float> > DataList = new List <List <float> >();

        for (int iIndex = 0; iIndex < Buildings.Count; iIndex++)
        {
            BuildingObj  nowFloor      = Buildings[iIndex];
            List <float> floorDataList = new List <float>();

            floorDataList.Add(nowFloor.platformController.platWidth);
            floorDataList.Add(nowFloor.platformController.platLength);
            floorDataList.Add(nowFloor.platformController.platHeight);
            floorDataList.Add(Convert.ToInt32(nowFloor.platformController.isStair));
            floorDataList.Add(Convert.ToInt32(nowFloor.platformController.isBorder));

            floorDataList.Add(nowFloor.bodyController.eaveColumnHeight);
            floorDataList.Add(nowFloor.bodyController.goldColumnbayNumber);
            floorDataList.Add(nowFloor.bodyController.eaveColumnbayNumber);
            floorDataList.Add(nowFloor.bodyController.unitNumberInBay);
            floorDataList.Add(nowFloor.bodyController.doorNumber);
            floorDataList.Add(nowFloor.bodyController.eaveColumnRadius);
            floorDataList.Add(nowFloor.bodyController.goldColumnRadius);
            floorDataList.Add(Convert.ToInt32(nowFloor.bodyController.isGoldColumn));
            floorDataList.Add(Convert.ToInt32(nowFloor.bodyController.isFrieze));
            floorDataList.Add(Convert.ToInt32(nowFloor.bodyController.isBalustrade));

            floorDataList.Add(nowFloor.roofController.allJijaHeight);
            floorDataList.Add(nowFloor.roofController.mainRidgeHeightOffset);
            floorDataList.Add(nowFloor.roofController.flyEaveHeightOffset);
            floorDataList.Add(nowFloor.roofController.roofSurfaceHeightOffset);
            floorDataList.Add(nowFloor.roofController.eaveCurveHeightOffset);

            DataList.Add(floorDataList);
        }
    }
    /**
     * 檢查主脊
     */
    public void CheckMainRidge(BuildingObj Ting, int RidgeIndex, Vector3 LTingCenter, Vector3 RTingCenter)
    {
        RidgeStruct mainRidge      = Ting.roofController.MainRidgeList[RidgeIndex];              //* 要被檢測的主脊
        Vector3     planeNorVector = (LTingCenter - RTingCenter).normalized;                     //* 兩亭中間切平面法向量
        Plane       MidPlane       = new Plane(planeNorVector, (LTingCenter + RTingCenter) / 2); //* 兩亭中間切平面
        int         tileListCount  = mainRidge.tilePosList.Count;                                //* 暫存主脊瓦片列表總數

        for (int iIndex = 0; iIndex < tileListCount; iIndex++)
        {
            //* 若不同邊
            if (!MidPlane.SameSide(mainRidge.tilePosList[0], Ting.roofTopCenter))
            {
                mainRidge.tilePosList.RemoveAt(0);
            }
            else
            {
                break;
            }
        }
        if (tileListCount != mainRidge.tilePosList.Count)
        {
            foreach (Transform child in mainRidge.body.transform)
            {
                if (child.name.Equals("main_ridge_new(Clone)"))
                {
                    Destroy(child.gameObject);
                }
            }
            Ting.roofController.CreateTileByModelAndRidge(ModelController.Instance.mainRidgeModelStruct, mainRidge);
        }
    }
Beispiel #4
0
    /**
     * 更新屋頂
     */
    public void UpdateRoofSliderInfo(Slider slider)
    {
        BuildingObj nowBuilding = Buildings[selectFloor];

        switch (slider.name)
        {
        case RoofMenuHandler.JijaHeightSlider_NAME:
            nowBuilding.roofController.allJijaHeight = slider.value;
            nowBuilding.ResetRoofFunction();
            break;

        case RoofMenuHandler.SurfaceSlider_NAME:
            nowBuilding.roofController.roofSurfaceHeightOffset = slider.value;
            nowBuilding.ResetRoofFunction();
            break;

        case RoofMenuHandler.EaveSlider_NAME:
            nowBuilding.roofController.eaveCurveHeightOffset = slider.value;
            nowBuilding.ResetRoofFunction();
            break;

        case RoofMenuHandler.RidgeSlider_NAME:
            nowBuilding.roofController.mainRidgeHeightOffset = slider.value;
            nowBuilding.ResetRoofFunction();
            break;

        case RoofMenuHandler.WingAngleSlider_NAME:
            nowBuilding.roofController.flyEaveHeightOffset = slider.value;
            nowBuilding.ResetRoofFunction();
            break;

        default:
            break;
        }
    }
    public BuildingObj AddBuilding(Vector2Int ij, BuildingDef buildingDef, QualityEnum quality)
    {
        BuildingObj newBuilding = new BuildingObj(ij, buildingDef, quality);

        ManagerBase.domain.buildings.Add(newBuilding);
        return(newBuilding);
    }
 /**
  * 將資料陣列轉換成建築資訊
  */
 public void ArrayDataToBuildingDataMethod3(List <Dictionary <string, List <DataInfo> > > DataList)
 {
     for (int iIndex = 0; iIndex < DataList.Count; iIndex++)
     {
         Dictionary <string, List <DataInfo> > dicData = DataList[iIndex];
         List <DataInfo> platDataList = dicData[Define.PlatformDataList];
         List <DataInfo> bodyDataList = dicData[Define.BodyDataList];
         List <DataInfo> roofDataList = dicData[Define.RoofDataList];
         BuildingObj     nowBuilding  = MainController.Instance.Buildings[iIndex];
         for (int i = 0; i < platDataList.Count; i++)
         {
             Type objType = nowBuilding.platformController.GetType();
             try
             {
                 objType.GetField(platDataList[i].Name).SetValue(nowBuilding.platformController, platDataList[i].Value.y);
             }
             catch
             {
                 print("Error :" + platDataList[i].Name + " have problem");
             }
         }
         for (int i = 0; i < bodyDataList.Count; i++)
         {
             Type objType = nowBuilding.bodyController.GetType();
             try
             {
                 Type tryType = objType.GetField(bodyDataList[i].Name).FieldType;
                 if (tryType == typeof(int))
                 {
                     objType.GetField(bodyDataList[i].Name).SetValue(nowBuilding.bodyController, (int)bodyDataList[i].Value.y);
                 }
                 else if (tryType == typeof(float))
                 {
                     objType.GetField(bodyDataList[i].Name).SetValue(nowBuilding.bodyController, bodyDataList[i].Value.y);
                 }
                 else
                 {
                     objType.GetField(bodyDataList[i].Name).SetValue(nowBuilding.bodyController, bodyDataList[i].Value.y);
                 }
             }
             catch
             {
                 print("Error :" + bodyDataList[i].Name + " have problem");
             }
         }
         for (int i = 0; i < roofDataList.Count; i++)
         {
             Type objType = nowBuilding.roofController.GetType();
             try
             {
                 objType.GetField(roofDataList[i].Name).SetValue(nowBuilding.roofController, roofDataList[i].Value.y);
             }
             catch
             {
                 print("Error :" + roofDataList[i].Name + " have problem");
             }
         }
     }
 }
Beispiel #7
0
    /**
     * UI
     */
    public void OnRoofTypeBtnClick(RoofType roofType)
    {
        print("!!!!" + roofType.ToString());
        BuildingObj nowBuilding = Buildings[selectFloor];

        nowBuilding.roofController.roofType = roofType;
        nowBuilding.ResetRoofFunction();
    }
Beispiel #8
0
    public ResourceJobObj AddJob(JobDef newJobDef, BuildingObj bldg)
    {
        ResourceJobObj newJobObj = new ResourceJobObj(newJobDef, bldg);

        newJobObj.UpdateBonuses(jobBonusList);
        jobList.Add(newJobObj);
        return(newJobObj);
    }
Beispiel #9
0
    public void Init(IGetUnitInfo info)
    {
        Info = info;
        UnitType unitType = info.GetUnitType();

        Instantiate(UnitTable.Instance.GetUnitModel(unitType).Model, modelRoot);

        //Movement
        GetComponent <Movement>().Init(new Vector3(info.GetXPos(), info.GetYPos(), info.GetZPos()), info.GetRotation());

        //Animation
        IGetAnimInfo animInfo = info as IGetAnimInfo;

        if (animInfo != null)
        {
            GetComponent <Animation>().Init(animInfo.GetAnimType(), animInfo.GetSpeedRate(), animInfo.GetPlayTime());
        }

        //HealthBar
        if (UnitType.Core <= unitType && unitType <= UnitType.Tower)
        {
            BuildingObj obj = info as BuildingObj;

            healthBarInstance = Instantiate(generalHealthBar, GameObject.Find("HealthBars").transform);
            healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.6f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team);
        }
        else if (UnitType.TowerBullet <= unitType && unitType <= UnitType.PressurisedSteam)
        {
            ActorObj obj = info as ActorObj;
        }
        else if (UnitType.Minion <= unitType && unitType <= UnitType.UltraMonster)
        {
            UnitObj obj = info as UnitObj;

            healthBarInstance = Instantiate(generalHealthBar, GameObject.Find("HealthBars").transform);
            healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.0f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team);
        }
        else
        {
            ChampionObj obj = info as ChampionObj;

            healthBarInstance = Instantiate(championHealthBar, GameObject.Find("HealthBars").transform);
            SetChampionHealthBarData(obj);
        }

        //Minimap
        if (unitType < UnitType.HatsuneMiku)
        {
            dotInstance = Instantiate(generalDot, GameObject.Find("MinimapUI").transform);
            dotInstance.GetComponent <GeneralDot>().SetData(info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos()));
        }
        else
        {
            dotInstance = Instantiate(championDot, GameObject.Find("MinimapUI").transform);
            dotInstance.GetComponent <ChampionDot>().SetData(info.GetUnitType(), info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos()));
        }
    }
Beispiel #10
0
 public ResourceJobObj(JobDef def, BuildingObj bldg) : base(def)
 {
     this.buildingObj  = bldg;
     this.buildingGuid = bldg.guid;
     // Add in Building Bonuses
     foreach (JobBonus jb in bldg.buildingBonuses)
     {
         jb.ApplyBonusToJob(this);
     }
     this.iLoc = bldg.ijLocation.x;
     this.jLoc = bldg.ijLocation.y;
 }
    void StartJobButton(JobDef jobSelected)
    {
        thisBuilding = BuildingQueries.ByLocation(ManagerBase.domain.buildings, new Vector2Int(iLoc, jLoc)); // Update the building here
        ResourceJobObj newJob = jobManager.AddJob(jobSelected, thisBuilding);
        ResourceQuantityQualityList jobResources = resourceChoiceDropdown.GetCurrentChoices();

        newJob.SetResources(jobResources);
        newJob.StartJob();
        newJob.AddWorker();
        newJob.AddWorker();
        FocusOnTile(iLoc, jLoc);
    }
Beispiel #12
0
    public void UpdateData(IGetUnitInfo info)
    {
        Info = info;
        UnitType unitType = info.GetUnitType();

        //Movement
        GetComponent <Movement>().SetPosition(new Vector3(info.GetXPos(), info.GetYPos(), info.GetZPos()), info.GetRotation(), info.GetWarped());

        //Animation
        IGetAnimInfo animInfo = info as IGetAnimInfo;

        if (animInfo != null)
        {
            GetComponent <Animation>().SetAnime(animInfo.GetAnimType(), animInfo.GetSpeedRate(), animInfo.GetPlayTime());
        }

        if (UnitType.Core <= unitType && unitType <= UnitType.Tower)
        {
            BuildingObj obj = info as BuildingObj;
            healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.6f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team);
        }
        else if (UnitType.TowerBullet <= unitType && unitType <= UnitType.PressurisedSteam)
        {
            ActorObj obj = info as ActorObj;
        }
        else if (UnitType.Minion <= unitType && unitType <= UnitType.UltraMonster)
        {
            UnitObj obj = info as UnitObj;
            healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.0f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team);
        }
        else
        {
            ChampionObj obj = info as ChampionObj;
            SetChampionHealthBarData(obj);
        }

        //Minimap
        if (unitType < UnitType.HatsuneMiku)
        {
            dotInstance.GetComponent <GeneralDot>().SetData(info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos()));
        }
        else
        {
            dotInstance.GetComponent <ChampionDot>().SetData(info.GetUnitType(), info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos()));
        }

        //Victory
        if (unitType == UnitType.Core && info.GetCurHP() <= 0)
        {
            GameObject.Find("VictoryUI").GetComponent <VictoryUI>().SetVictory(info.GetTeam());
        }
    }
Beispiel #13
0
    public void UpdateALL(List <Dictionary <string, List <DataInfo> > > DataList)
    {
        DataCenter.Instance.ArrayDataToBuildingDataMethod3(DataList);
        for (int iIndex = 0; iIndex < Buildings.Count; iIndex++)
        {
            BuildingObj        nowBuilding = Buildings[iIndex];
            PlatformController platform    = nowBuilding.platformController;

            //nowBuilding.ResetPlatformFunction(platform.platLength, platform.platWidth, platform.platHeight, platform.isStair);
            nowBuilding.ResetBodyFunction();
            nowBuilding.ResetRoofFunction();
        }
    }
Beispiel #14
0
    public void UpdateBodyToggleInfo(Toggle toggle)
    {
        BuildingObj nowBuilding = Buildings[selectFloor];
        CombineTing CT          = nowBuilding.transform.GetComponentInParent <CombineTing>();

        switch (toggle.name)
        {
        case BodyMenuHandler.GoldColToggle_NAME:
            if (CT)
            {
                CT.ResetGoldColumn(toggle.isOn);
                CT.ResetWindowAndDoorNum();
            }
            else
            {
                nowBuilding.ResetGoldColumn(toggle.isOn);
                nowBuilding.ResetWindowAndDoorNum();
            }
            break;

        case BodyMenuHandler.FriezeToggle_NAME:
            if (CT)
            {
                CT.ResetFrieze(toggle.isOn);
            }
            else
            {
                nowBuilding.ResetFrieze(toggle.isOn);
            }
            break;

        case BodyMenuHandler.BalustradeToggle_NAME:
            if (CT)
            {
                CT.ResetBalustrade(toggle.isOn);
            }
            else
            {
                nowBuilding.ResetBalustrade(toggle.isOn);
            }
            break;

        default:
            print("!!! Can't Find Toggle Name !!!");
            break;
        }
    }
    /**
     * 初始化基座
     */
    public void InitFunction(BuildingObj buildingObj, float platformFrontWidth, float platformFrontLength, float platformHeight, bool isStair, float rotateAngle = 0)
    {
        this.buildingObj = buildingObj;
        this.platWidth   = platformFrontWidth;
        this.platLength  = platformFrontLength;
        this.platHeight  = platformHeight;
        this.isStair     = isStair;
        stairHeight      = platformHeight;

        this.parentObj        = buildingObj.platform;
        this.sides            = (int)buildingObj.sides;
        this.entraneIndexList = buildingObj.entraneIndexList;

        //***********************************************************************
        platFormStruct = CreatePlatform(buildingObj.platform, (int)buildingObj.sides, buildingObj.platformCenter, rotateAngle);
        StartCreateBorder(isBorder);
        StartCreateStair(isStair);
    }
    /**
     * 檢查兩個亭是否需要合併 (只要有另一亭的一個邊點落在亭內)
     */
    public bool isNeedCombine(BuildingObj LTing, BuildingObj RTing)
    {
        List <Vector3> newLTingColPos = LTing.bodyController.GetColumnStructBottomPosList(LTing.bodyController.eaveCornerColumnList);
        List <Vector3> newRTingColPos = RTing.bodyController.GetColumnStructBottomPosList(RTing.bodyController.eaveCornerColumnList);

        /**
         * 檢查兩個亭是否需要合併(檢查向量方向)
         */
        int outPointCount2Point  = 0;
        int outPointCount2Center = 0;

        for (int j = 0; j < newRTingColPos.Count; j++)
        {
            Vector3 lastCross2Point  = Vector3.zero;
            Vector3 lastCross2Center = Vector3.zero;
            for (int i = 0; i < newLTingColPos.Count; i++)            //v和所有的e 外積方向相同 代表在正規凸多邊形內部
            {
                Vector3 e        = newLTingColPos[(i + 1) % newLTingColPos.Count] - newLTingColPos[i];
                Vector3 v        = newRTingColPos[j] - newLTingColPos[i];
                Vector3 newCross = Vector3.Cross(e, v).normalized;
                if ((Vector3.Dot(newCross, lastCross2Point) <= 0) && (lastCross2Point != Vector3.zero))                //j點落在亭外
                {
                    outPointCount2Point++;
                    break;
                }
                lastCross2Point = newCross;
            }
            //邊界中心點
            for (int i = 0; i < newLTingColPos.Count; i++)
            {
                Vector3 e        = newLTingColPos[(i + 1) % newLTingColPos.Count] - newLTingColPos[i];
                Vector3 v        = (newRTingColPos[(j + 1) % newRTingColPos.Count] + newRTingColPos[j]) / 2 - newLTingColPos[i];
                Vector3 newCross = Vector3.Cross(e, v).normalized;
                if ((Vector3.Dot(newCross, lastCross2Center)) <= 0 && (lastCross2Center != Vector3.zero))                //j點落在亭外
                {
                    outPointCount2Center++;
                    break;
                }
                lastCross2Center = newCross;
            }
        }
        return(!(outPointCount2Point == newRTingColPos.Count) || !(outPointCount2Center == newRTingColPos.Count));
    }
    /**
     * 初始化
     */
    public void InitFunction(BuildingObj buildingObj, float eaveColumnHeight, float goldColumnHeight)
    {
        //初始值******************************************************************************
        this.buildingObj      = buildingObj;
        this.eaveColumnHeight = eaveColumnHeight;
        this.goldColumnHeight = goldColumnHeight;

        columnFundationHeight = eaveColumnHeight * 0.05f;

        //**************************************************************************************
        switch (bodyType)
        {
            #region Chuan_Dou
        case BodyType.Chuan_Dou:
            if (buildingObj.sides == MainController.FormFactorSideType.FourSide)
            {
                CreateBody(buildingObj.body, (int)buildingObj.sides, buildingObj.entraneIndexList, bodyWidth, bodyLength, eaveColumnHeight, buildingObj.bodyCenter);
            }
            else
            {
                CreateBody(buildingObj.body, (int)buildingObj.sides, buildingObj.entraneIndexList, buildingObj.platformController.platFormStruct.topPointPosList, bodyWidth, eaveColumnHeight, buildingObj.bodyCenter);
            }

            if (goldColumnList.Count > 0)
            {
                CreateRingWall(buildingObj.body, ModelController.Instance.goldColumnModelStruct, GetColumnStructBottomPosList(goldColumnList), goldColumnRadius, unitNumberInBay, goldColumnbayNumber, doorNumber);
            }
            if (eaveColumnList.Count > 0 && isFrieze)
            {
                CreateRingFrieze(buildingObj.body, ModelController.Instance.eaveColumnModelStruct, GetColumnStructBottomPosList(eaveColumnList), eaveColumnRadius, 0.7f * eaveColumnHeight);
            }
            if (eaveColumnList.Count > 0 && isBalustrade)
            {
                CreateRingBalustrade(buildingObj.body, (int)buildingObj.sides, buildingObj.entraneIndexList, ModelController.Instance.eaveColumnModelStruct, GetColumnStructBottomPosList(eaveColumnList), eaveColumnRadius, 0.1f * eaveColumnHeight);
            }
            break;
            #endregion
        }
    }        /**
    public void CheckSurface(BuildingObj Ting, int SurfaceIndex, Vector3 LTingCenter, Vector3 RTingCenter)
    {
        RoofSurfaceStruct surface  = Ting.roofController.SurfaceList[SurfaceIndex];
        Plane             midPlane = new Plane((LTingCenter - RTingCenter).normalized, (LTingCenter + RTingCenter) / 2); //* 兩亭中間切平面

        //** 依序檢查每一個表面脊 (左、中、右分開做)
        for (int iIndex = 0; iIndex < surface.leftRoofSurfaceTileRidgeList.Count; iIndex++)
        {
            RoofSurfaceRidgeStruct surfaceRidge = surface.leftRoofSurfaceTileRidgeList[iIndex];
            RemoveSurfacePosByPlane(midPlane, surfaceRidge, Ting.roofTopCenter);
        }
        if (surface.midRoofSurfaceTileRidge != null)
        {
            RemoveSurfacePosByPlane(midPlane, surface.midRoofSurfaceTileRidge, Ting.roofTopCenter);
        }
        for (int iIndex = 0; iIndex < surface.rightRoofSurfaceTileRidgeList.Count; iIndex++)
        {
            RoofSurfaceRidgeStruct surfaceRidge = surface.rightRoofSurfaceTileRidgeList[iIndex];
            RemoveSurfacePosByPlane(midPlane, surfaceRidge, Ting.roofTopCenter);
        }
        //**
    }
    public void FocusOnTile(int i, int j)
    {
        // Set Location
        iLoc = i;
        jLoc = j;

        // Delete buttons
        ClearUIObjects();

        // Surface Panel
        if (SetSurfacePanel(i, j))
        {
            thisBuilding = BuildingQueries.ByLocation(ManagerBase.domain.buildings, new Vector2Int(iLoc, jLoc)); // Get the building here
        }
        // Ground Panel
        SetGroundPanel(i, j);

        // Underground Panel
        SetUndergroundPanel(i, j);

        // Draw Jobs up from the bottom
        DrawActiveJobs(i, j);
    }
Beispiel #20
0
    public void UpdatePlameToggleInfo(Toggle toggle)
    {
        PlatformController platform = Buildings[selectFloor].platformController;

        BuildingObj nowBuilding = Buildings[selectFloor];
        CombineTing CT          = nowBuilding.transform.GetComponentInParent <CombineTing>();

        switch (toggle.name)
        {
        case PlamformMenuHandler.StairToggle_NAME:
            if (CT)
            {
                CT.platformController.StartCreateStair(toggle.isOn);
            }
            else
            {
                nowBuilding.platformController.StartCreateStair(toggle.isOn);
            }
            break;

        case PlamformMenuHandler.BorderToggle_NAME:
            if (CT)
            {
                CT.platformController.StartCreateBorder(toggle.isOn);
            }
            else
            {
                nowBuilding.platformController.StartCreateBorder(toggle.isOn);
            }
            break;

        default:
            print("!!! Can't Find Toggle Name !!!");
            break;
        }
    }
    /**
     * 每個樓層皆用一個Dic ,內部分為屋頂屋身基座三個部分(皆為List),最後再放入List中
     */
    public List <Dictionary <string, List <DataInfo> > > BuildingDataToArrayMethod3(List <BuildingObj> Buildings)     //*** 方法三:目前
    {
        List <Dictionary <string, List <DataInfo> > > DataList = new List <Dictionary <string, List <DataInfo> > >();


        for (int iIndex = 0; iIndex < Buildings.Count; iIndex++)
        {
            BuildingObj nowFloor = Buildings[iIndex];
            Dictionary <string, List <DataInfo> > dicData = new Dictionary <string, List <DataInfo> >();
            List <DataInfo> roofDataList = new List <DataInfo>();
            List <DataInfo> bodyDataList = new List <DataInfo>();
            List <DataInfo> platDataList = new List <DataInfo>();
            #region PLATFORM_PARAMETER
            platDataList.Add(new DataInfo("platWidth",
                                          new Vector3(Define.Instance.getSetData("platWidth").Value.x, nowFloor.platformController.platWidth,
                                                      Define.Instance.getSetData("platWidth").Value.z),
                                          Define.Instance.getSetData("platWidth").UIName));
            platDataList.Add(new DataInfo("platLength",
                                          new Vector3(Define.Instance.getSetData("platLength").Value.x,
                                                      nowFloor.platformController.platLength,
                                                      Define.Instance.getSetData("platLength").Value.z),
                                          Define.Instance.getSetData("platLength").UIName));
            platDataList.Add(new DataInfo("platHeight",
                                          new Vector3(Define.Instance.getSetData("platHeight").Value.x,
                                                      nowFloor.platformController.platHeight,
                                                      Define.Instance.getSetData("platHeight").Value.z),
                                          Define.Instance.getSetData("platHeight").UIName));
            platDataList.Add(new DataInfo("isStair",
                                          new Vector3(Define.Instance.getSetData("isStair").Value.x,
                                                      Convert.ToInt32(nowFloor.platformController.isStair),
                                                      Define.Instance.getSetData("isStair").Value.z),
                                          Define.Instance.getSetData("isStair").UIName));
            platDataList.Add(new DataInfo("isBorder",
                                          new Vector3(Define.Instance.getSetData("isBorder").Value.x,
                                                      Convert.ToInt32(nowFloor.platformController.isBorder),
                                                      Define.Instance.getSetData("isBorder").Value.z),
                                          Define.Instance.getSetData("isBorder").UIName));

            #endregion
            #region BODY_PARAMETER

            bodyDataList.Add(new DataInfo("goldColumnbayNumber",
                                          new Vector3(Define.Instance.getSetData("goldColumnbayNumber").Value.x,
                                                      nowFloor.bodyController.goldColumnbayNumber,
                                                      Define.Instance.getSetData("goldColumnbayNumber").Value.z),
                                          Define.Instance.getSetData("goldColumnbayNumber").UIName));
            //bodyDataList.Add(new DataInfo("eaveColumnbayNumber",
            //                               new Vector3(0, nowFloor.bodyController.eaveColumnbayNumber, 10)));
            bodyDataList.Add(new DataInfo("unitNumberInBay",
                                          new Vector3(Define.Instance.getSetData("unitNumberInBay").Value.x,
                                                      nowFloor.bodyController.unitNumberInBay,
                                                      Define.Instance.getSetData("unitNumberInBay").Value.z),
                                          Define.Instance.getSetData("unitNumberInBay").UIName));
            //門的最大數量為(金柱數量的一半加一)
            bodyDataList.Add(new DataInfo("doorNumber",
                                          new Vector3(Define.Instance.getSetData("doorNumber").Value.x,
                                                      nowFloor.bodyController.doorNumber,
                                                      Define.Instance.getSetData("doorNumber").Value.y / 2 + 1),
                                          Define.Instance.getSetData("doorNumber").UIName));
            //bodyDataList.Add(new DataInfo("eaveColumnRadius",
            //                                new Vector3(0, nowFloor.bodyController.eaveColumnRadius, 10)));
            //bodyDataList.Add(new DataInfo("goldColumnRadius",
            //                                new Vector3(0, nowFloor.bodyController.goldColumnRadius, 10)));

            bodyDataList.Add(new DataInfo("eaveColRadInflate",
                                          new Vector3(Define.Instance.getSetData("eaveColRadInflate").Value.x,
                                                      nowFloor.bodyController.eaveColRadInflate,
                                                      Define.Instance.getSetData("eaveColRadInflate").Value.z),
                                          Define.Instance.getSetData("eaveColRadInflate").UIName));
            bodyDataList.Add(new DataInfo("eaveColumnHeight",
                                          new Vector3(Define.Instance.getSetData("eaveColumnHeight").Value.x,
                                                      nowFloor.bodyController.eaveColumnHeight,
                                                      Define.Instance.getSetData("eaveColumnHeight").Value.z),
                                          Define.Instance.getSetData("eaveColumnHeight").UIName));
            //bodyDataList.Add(new DataInfo("eaveColTopOffset",
            //                               new Vector3(0, nowFloor.bodyController.eaveColTopOffset, 8)));
            //bodyDataList.Add(new DataInfo("eaveColBotOffset",
            //                               new Vector3(0, nowFloor.bodyController.eaveColBotOffset, 8)));
            bodyDataList.Add(new DataInfo("isGoldColumn",
                                          new Vector3(Define.Instance.getSetData("isGoldColumn").Value.x,
                                                      Convert.ToInt32(nowFloor.bodyController.isGoldColumn),
                                                      Define.Instance.getSetData("isGoldColumn").Value.z),
                                          Define.Instance.getSetData("isGoldColumn").UIName));
            bodyDataList.Add(new DataInfo("isFrieze",
                                          new Vector3(Define.Instance.getSetData("isFrieze").Value.x,
                                                      Convert.ToInt32(nowFloor.bodyController.isFrieze),
                                                      Define.Instance.getSetData("isFrieze").Value.z),
                                          Define.Instance.getSetData("isFrieze").UIName));
            bodyDataList.Add(new DataInfo("isBalustrade",
                                          new Vector3(Define.Instance.getSetData("isBalustrade").Value.x,
                                                      Convert.ToInt32(nowFloor.bodyController.isBalustrade),
                                                      Define.Instance.getSetData("isBalustrade").Value.z),
                                          Define.Instance.getSetData("isBalustrade").UIName));
            #endregion
            #region ROOF_PARAMETER
            roofDataList.Add(new DataInfo("allJijaHeight",
                                          new Vector3(Define.Instance.getSetData("allJijaHeight").Value.x,
                                                      nowFloor.roofController.allJijaHeight,
                                                      Define.Instance.getSetData("allJijaHeight").Value.z),
                                          Define.Instance.getSetData("allJijaHeight").UIName));
            roofDataList.Add(new DataInfo("mainRidgeHeightOffset",
                                          new Vector3(Define.Instance.getSetData("mainRidgeHeightOffset").Value.x,
                                                      nowFloor.roofController.mainRidgeHeightOffset,
                                                      Define.Instance.getSetData("mainRidgeHeightOffset").Value.z),
                                          Define.Instance.getSetData("mainRidgeHeightOffset").UIName));
            roofDataList.Add(new DataInfo("flyEaveHeightOffset",
                                          new Vector3(Define.Instance.getSetData("flyEaveHeightOffset").Value.x,
                                                      nowFloor.roofController.flyEaveHeightOffset,
                                                      Define.Instance.getSetData("flyEaveHeightOffset").Value.z),
                                          Define.Instance.getSetData("flyEaveHeightOffset").UIName));
            roofDataList.Add(new DataInfo("eaveCurveHeightOffset",
                                          new Vector3(Define.Instance.getSetData("eaveCurveHeightOffset").Value.x,
                                                      nowFloor.roofController.eaveCurveHeightOffset,
                                                      Define.Instance.getSetData("eaveCurveHeightOffset").Value.z),
                                          Define.Instance.getSetData("eaveCurveHeightOffset").UIName));
            roofDataList.Add(new DataInfo("roofSurfaceHeightOffset",
                                          new Vector3(Define.Instance.getSetData("roofSurfaceHeightOffset").Value.x,
                                                      nowFloor.roofController.roofSurfaceHeightOffset,
                                                      Define.Instance.getSetData("roofSurfaceHeightOffset").Value.z),
                                          Define.Instance.getSetData("roofSurfaceHeightOffset").UIName));
            #endregion
            dicData.Add(Define.PlatformDataList, platDataList);
            dicData.Add(Define.BodyDataList, bodyDataList);
            dicData.Add(Define.RoofDataList, roofDataList);
            DataList.Add(dicData);
        }
        return(DataList);
    }
    /**
     * 檢查屋面瓦片
     */
    public void CheckAllSurface()
    {
        for (int buildingIndex = 0; buildingIndex < combinedInfos.Count; buildingIndex++)
        {
            BuildingObj LTing       = BuildingsList[buildingIndex];
            Vector3     LTingCenter = LTing.platformCenter;
            int         LTingSides  = LTing.bodyController.eaveCornerColumnList.Count;
            foreach (KeyValuePair <int, List <int> > kvp in combinedInfos[buildingIndex].Info)
            {
                int         key         = kvp.Key;
                List <int>  value       = kvp.Value;
                BuildingObj RTing       = BuildingsList[key];
                Vector3     RTingCenter = RTing.platformCenter;
                int         RTingSides  = RTing.bodyController.eaveCornerColumnList.Count;
                switch (LTing.roofController.roofType)
                {
                case MainController.RoofType.Zan_Jian_Ding:
                case MainController.RoofType.Lu_Ding:
                case MainController.RoofType.Wu_Dian_Ding:

                    for (int i = 0; i < value.Count; i++)
                    {
                        //下一亭交buildingIndex的號碼
                        int intersectionColIndex = FindOtherSideCloserIndex_Copy(combinedInfos[key].Info[buildingIndex], BuildingsList[key].bodyController.GetColumnStructBottomPosList(BuildingsList[key].bodyController.eaveCornerColumnList), BuildingsList[buildingIndex].bodyController.GetColumnStructBottomPosList(BuildingsList[buildingIndex].bodyController.eaveCornerColumnList)[value[i]]);
                        CheckMainRidge(LTing, value[i], LTingCenter, RTingCenter);

                        CheckMainRidge(RTing, intersectionColIndex, LTingCenter, RTingCenter);

                        CheckSurface(LTing, (value[i] - 1 + LTingSides) % LTingSides, LTingCenter, RTingCenter);
                        CheckSurface(LTing, value[i], LTingCenter, RTingCenter);

                        CheckSurface(RTing, (intersectionColIndex - 1 + RTingSides) % RTingSides, LTingCenter, RTingCenter);
                        CheckSurface(RTing, intersectionColIndex, LTingCenter, RTingCenter);
                    }
                    break;

                case MainController.RoofType.Shya_Shan_Ding:
                    for (int i = 0; i < value.Count; i++)
                    {
                        //下一亭交buildingIndex的號碼
                        int intersectionColIndex = FindOtherSideCloserIndex_Copy(combinedInfos[key].Info[buildingIndex], BuildingsList[key].bodyController.GetColumnStructBottomPosList(BuildingsList[key].bodyController.eaveCornerColumnList), BuildingsList[buildingIndex].bodyController.GetColumnStructBottomPosList(BuildingsList[buildingIndex].bodyController.eaveCornerColumnList)[value[i]]);



                        CheckMainRidge(LTing, value[i] * 2, LTingCenter, RTingCenter);
                        CheckMainRidge(LTing, value[i] * 2 + 1, LTingCenter, RTingCenter);

                        CheckMainRidge(RTing, intersectionColIndex * 2, LTingCenter, RTingCenter);
                        CheckMainRidge(RTing, intersectionColIndex * 2 + 1, LTingCenter, RTingCenter);

                        CheckSurface(LTing, (value[i] - 1 + LTingSides) % LTingSides, LTingCenter, RTingCenter);
                        CheckSurface(LTing, value[i], LTingCenter, RTingCenter);

                        CheckSurface(RTing, (intersectionColIndex - 1 + RTingSides) % RTingSides, LTingCenter, RTingCenter);
                        CheckSurface(RTing, intersectionColIndex, LTingCenter, RTingCenter);
                    }
                    break;

                case MainController.RoofType.Dome:
                    CheckSurface(LTing, 0, LTingCenter, RTingCenter);
                    CheckSurface(RTing, 0, LTingCenter, RTingCenter);
                    break;
                }
            }
        }
    }
Beispiel #23
0
    /**
     * 更新基座
     */
    public void UpdatePlameSliderInfo(Slider slider)
    {
        PlatformController platform    = Buildings[selectFloor].platformController;
        BuildingObj        nowBuilding = Buildings[selectFloor];
        CombineTing        CT          = nowBuilding.transform.GetComponentInParent <CombineTing>();

        switch (slider.name)
        {
        case PlamformMenuHandler.WidthSlider_NAME:
            if (CT)
            {
                CT.platformController.platWidth = slider.value;
                CT.UpdatePlatformFunction();
            }
            else
            {
                nowBuilding.ResetPlatformFunction(platform.platLength, slider.value, platform.platHeight, platform.isStair);
            }
            break;

        case PlamformMenuHandler.DepthSlider_NAME:
            nowBuilding.ResetPlatformFunction(slider.value, platform.platWidth, platform.platHeight, platform.isStair);
            break;

        case PlamformMenuHandler.HeightSlider_NAME:

            if (CT)
            {
                float moveOffset = (slider.value - CT.platformController.platHeight) / 2;
                CT.MoveBuildingBody(new Vector3(0, moveOffset, 0));
                for (int i = 0; i < CT.BuildingsList.Count; i++)
                {
                    CT.BuildingsList[i].MoveBuildingRoof(new Vector3(0, moveOffset, 0));
                }
                CT.platformController.platHeight = slider.value;
                CT.UpdatePlatformFunction();
            }
            else
            {
                float moveOffset = (slider.value - nowBuilding.platformController.platHeight) / 2;
                nowBuilding.MoveBuildingBody(new Vector3(0, moveOffset, 0));
                nowBuilding.MoveBuildingRoof(new Vector3(0, moveOffset, 0));
                nowBuilding.ResetPlatformFunction(platform.platLength, platform.platWidth, slider.value, platform.isStair);
            }
            break;

        case PlamformMenuHandler.StairNumSlider_NAME:

            break;

        case PlamformMenuHandler.StairLengthSlider_NAME:
            nowBuilding.ResetStair(slider.value, platform.stairWidth);                      //***參數未設定好
            break;

        case PlamformMenuHandler.StairWidthSlider_NAME:
            nowBuilding.ResetStair(platform.stairLength, slider.value);                      //***參數未設定好
            break;

        default:
            print("!!! Can't Find Slider Name !!!");
            break;
        }
    }
Beispiel #24
0
    public void UpdateRoofOnSliderPointUp(Slider slider)
    {
        BuildingObj nowBuilding = Buildings[selectFloor];

        nowBuilding.ResetRoofFunction();
    }
Beispiel #25
0
    public List <BuildingObj> AddBuilding(Vector3 pos, float rotateAngle)
    {
        List <BuildingObj> buildings = new List <BuildingObj>();

        //檢查是否為組合亭
        if (AllBuildings.Count > 0)
        {
            List <BuildingObj> selectBuildings = MainController.Instance.AllBuildings[selectBuildingsIndex];
            for (int i = 0; i < selectBuildings.Count; i++)
            {
                GameObject building = new GameObject("building" + buildingCount++);
                building.gameObject.AddComponent <BuildingObj>();
                Vector3 revisePos = pos;
                revisePos.y = selectBuildings[i].platformCenter.y;
                building.GetComponent <BuildingObj>().InitFunction(building, revisePos, sides, selectBuildings[i].platformController.platLength, selectBuildings[i].platformController.platWidth, selectBuildings[i].platformController.platHeight, selectBuildings[i].bodyController.eaveColumnHeight, selectBuildings[i].bodyController.goldColumnHeight, selectBuildings[i].roofController.mainRidgeHeightOffset, selectBuildings[i].roofController.allJijaHeight, Vector3ListAddVector3(selectBuildings[i].roofController.topFloorBorderList, pos), (int)selectBuildings[i].roofController.roofType, selectBuildings[i].platformController.isStair, rotateAngle);
                buildings.Add(building.GetComponent <BuildingObj>());

                BuildingObj LTing = building.GetComponent <BuildingObj>();
                //檢查與其他組合亭有無需要合併
                for (int j = AllBuildings.Count - 1; j >= 0; j--)
                {
                    BuildingObj RTing = AllBuildings[j][i];
                    if (isNeedCombine(LTing, RTing))
                    {
                        GameObject         combinTing      = new GameObject("CombinTing");
                        CombineTing        combineTingCtrl = combinTing.AddComponent <CombineTing>();
                        List <BuildingObj> buildingsList   = new List <BuildingObj>();
                        if (RTing.transform.GetComponentInParent <CombineTing>())
                        {
                            Debug.Log("Already Has CombineTingoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo");
                            Destroy(combinTing);
                            combinTing             = RTing.transform.GetComponentInParent <CombineTing>().gameObject;
                            combineTingCtrl        = RTing.transform.GetComponentInParent <CombineTing>();
                            LTing.transform.parent = combinTing.transform;
                            buildingsList.AddRange(combineTingCtrl.BuildingsList);
                            Destroy(combineTingCtrl.body.gameObject);
                            Destroy(combineTingCtrl.platform.gameObject);
                        }
                        else
                        {
                            LTing.transform.parent = combinTing.transform;
                            RTing.transform.parent = combinTing.transform;
                            buildingsList.Add(RTing);
                        }
                        buildingsList.Add(LTing);

                        combineTingCtrl.InitFunction(buildingsList.ToArray());

                        AllCT.Add(combineTingCtrl);
                        break;
                    }
                }
            }
        }
        else
        {
            Debug.Log("FirstBuilding");
            GameObject building = new GameObject("building" + buildingCount++);
            building.gameObject.AddComponent <BuildingObj>();
            building.GetComponent <BuildingObj>().InitFunction(building, pos, sides, initPlatformLength_DownStair, initPlatformWidth_DownStair, initPlatformHeight_DownStair, initEaveColumnHeight, initGoldColumnHeight, 0, initAllJijaHeight_TopStair, null, (int)roofType, false, rotateAngle);
            buildings.Add(building.GetComponent <BuildingObj>());
            Debug.Log("----------------------------------- ----------------------------------- -----------------------------------");
            Debug.Log("AllBuildings.Count : " + AllBuildings.Count);
        }

        AllBuildings.Add(buildings);

        return(buildings);
    }
    //檢查亭的交界情況
    List <CombinedInfo> CheckConnectedInfo(List <BuildingObj> BuildingsList)
    {
        List <CombinedInfo> combinedInfos = new List <CombinedInfo>();

        for (int i = 0; i < BuildingsList.Count; i++)
        {
            CombinedInfo combinedInfo = new CombinedInfo();
            combinedInfos.Add(combinedInfo);
        }
        for (int i = 0; i < BuildingsList.Count; i++)
        {
            Dictionary <int, List <int> > info = new Dictionary <int, List <int> >();
            BuildingObj LTing = BuildingsList[i];
            for (int j = BuildingsList.Count - 1; j >= 0; j--)
            {
                if (i == j)
                {
                    continue;
                }
                BuildingObj RTing = BuildingsList[j];
                if (isNeedCombine(LTing, RTing))
                {
                    //Debug.Log(i + "&" + j + " Nedd to be combined");
                    //檐柱
                    List <Vector3> LEaveColPosList = LTing.bodyController.GetColumnStructBottomPosList(LTing.bodyController.eaveCornerColumnList);
                    List <Vector3> REaveColPosList = RTing.bodyController.GetColumnStructBottomPosList(RTing.bodyController.eaveCornerColumnList);
                    //中心點位置
                    Vector3 LTingCenter = LTing.platformCenter;
                    Vector3 RTingCenter = RTing.platformCenter;
                    //交平面
                    Plane midPlan = new Plane((LTingCenter - RTingCenter).normalized, (LTingCenter + RTingCenter) / 2);
                    //i亭交j亭的交界點
                    List <int> LIntersectionIndexList = new List <int>(FindOtherSideIndex(LEaveColPosList, RTingCenter, midPlan));
                    //與j亭交LIntersectionIndexList
                    info.Add(j, LIntersectionIndexList);
                }
            }
            combinedInfos[i].Info = info;
        }

        /**
         * 紀錄所有柱子個別交了多少亭
         */
        for (int i = 0; i < BuildingsList.Count; i++)
        {
            List <int> colStates = new List <int>();
            for (int j = 0; j < BuildingsList[i].bodyController.eaveCornerColumnList.Count; j++)
            {
                colStates.Add(0);
            }
            foreach (KeyValuePair <int, List <int> > kvp in combinedInfos[i].Info)
            {
                List <int> value = kvp.Value;
                for (int j = 0; j < value.Count; j++)
                {
                    colStates[value[j]]++;
                }
            }
            combinedInfos[i].colStates = colStates;
            //檢查是否有cycle
            for (int j = 0; j < combinedInfos[i].colStates.Count; j++)
            {
                if (combinedInfos[i].colStates[j] == 3)                //為內部點
                {
                    combinedInfos[i].count++;
                    combinedInfos[i].startCount++;
                }
            }
        }
        for (int i = 0; i < combinedInfos.Count; i++)
        {
            combinedInfos[i].init_Count = combinedInfos[i].count;
        }
        return(combinedInfos);
    }
Beispiel #27
0
    /**
     * 更新屋身
     */
    public void UpdateBodySliderInfo(Slider slider)
    {
        BuildingObj nowBuilding = Buildings[selectFloor];
        CombineTing CT          = nowBuilding.transform.GetComponentInParent <CombineTing>();

        switch (slider.name)
        {
        case BodyMenuHandler.ColumeHeightSlider_NAME:

            if (CT)
            {
                float moveOffset = slider.value - CT.bodyController.eaveColumnHeight;
                for (int i = 0; i < CT.BuildingsList.Count; i++)
                {
                    CT.BuildingsList[i].MoveBuildingRoof(new Vector3(0, moveOffset, 0));
                }
                CT.bodyController.eaveColumnHeight = slider.value;
                CT.bodyController.goldColumnHeight = slider.value;
                CT.UpdateBodyFunction();
            }
            else
            {
                float moveOffset = slider.value - nowBuilding.bodyController.eaveColumnHeight;
                nowBuilding.bodyController.eaveColumnHeight = slider.value;
                nowBuilding.bodyController.goldColumnHeight = slider.value;
                nowBuilding.MoveBuildingRoof(new Vector3(0, moveOffset, 0));
                nowBuilding.ResetBodyFunction();
            }
            break;

        case BodyMenuHandler.GoldColNumSlider_NAME:
            if (CT)
            {
                CT.bodyController.goldColumnbayNumber = (int)slider.value;
                CT.UpdateBodyFunction();
            }
            else
            {
                nowBuilding.bodyController.goldColumnbayNumber = (int)slider.value;
                nowBuilding.DeleteGoldColumn();
                nowBuilding.ResetGoldColumn(true);
                nowBuilding.ResetWindowAndDoorNum();
            }
            break;

        case BodyMenuHandler.UnitInBay_NAME:

            if (CT)
            {
                CT.bodyController.unitNumberInBay = (int)slider.value;
                CT.UpdateBodyFunction();
            }
            else
            {
                nowBuilding.bodyController.unitNumberInBay = (int)slider.value;
                nowBuilding.ResetWindowAndDoorNum();
            }
            break;

        case BodyMenuHandler.DoorNumSlider_NAME:

            if (CT)
            {
                CT.bodyController.doorNumber = (int)slider.value;
                CT.UpdateBodyFunction();
            }
            else
            {
                nowBuilding.bodyController.doorNumber = (int)slider.value;
                nowBuilding.ResetWindowAndDoorNum();
            }
            break;

        case BodyMenuHandler.BodyWidthSlider_NAME:

            if (CT)
            {
                nowBuilding.bodyController.bodyWidth = slider.value;
                nowBuilding.ResetBodyFunction();
                CT.UpdateBodyFunction();
                CT.UpdatePlatformFunction();
            }
            else
            {
                nowBuilding.bodyController.bodyWidth = slider.value;
                nowBuilding.ResetBodyFunction();
            }
            break;

        case BodyMenuHandler.BodyLengthSlider_NAME:

            if (CT)
            {
                nowBuilding.bodyController.bodyLength = slider.value;
                nowBuilding.ResetBodyFunction();
                CT.UpdateBodyFunction();
                CT.UpdatePlatformFunction();
            }
            else
            {
                nowBuilding.bodyController.bodyLength = slider.value;
                nowBuilding.ResetBodyFunction();
            }
            break;
        }
    }
Beispiel #28
0
 public void Clear()
 {
     masterBuildingObj  = null;
     previewBuildingHex = null;
 }