示例#1
0
//	void RPC_S2C_CLN_SetGuardPos(uLink.BitStream stream, uLink.NetworkMessageInfo info)
//	{
//        //--to do: wait
//        Vector3 guardPos = stream.Read<Vector3>();
//        //int playID = stream.Read<int>();
//        //if (playID == PlayerFactory.mMainPlayer.OwnerView.viewID.id)
//        //{
//            CSCreator creator = CSMain.GetCreator(CSConst.ciDefMgCamp);
//            if (creator != null)
//            {
//                CSPersonnel[] personnels = creator.GetNpcs();
//                foreach (CSPersonnel csp in personnels)
//                {
//                    if (csp != null && csp.m_Npc != null)
//                    {
//                        if (Id == csp.m_Npc.Id)
//                        {
//                            csp.SetGuardAttr(guardPos);
//                        }
//                    }
//                }
//            }
//        //}
//	}

    void RPC_S2C_CLN_PlantGetBack(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        int objId = stream.Read <int> ();

        if (objId != -1)
        {
            FarmManager.Instance.RemovePlant(objId);
            DragArticleAgent.Destory(objId);
            ItemMgr.Instance.DestroyItem(objId);
        }
        else
        {
            FarmPlantLogic plant = stream.Read <FarmPlantLogic>();

            CSMgCreator creator = MultiColonyManager.GetCreator(TeamId);
            if (creator == null || creator.Assembly == null)
            {
                return;
            }
            CSFarm farm = creator.Assembly.Farm;
            if (farm == null)
            {
                return;
            }
            farm.RestoreWateringPlant(plant);
        }
    }
    public void ClearFarmWorks()
    {
        if (WorkRoom == null)
        {
            return;
        }
        CSFarm farm = WorkRoom as CSFarm;

        if (farm == null)
        {
            m_FarmWorkMap.Clear();
            return;
        }

        foreach (KeyValuePair <EFarmWorkType, FarmWorkInfo> kvp in m_FarmWorkMap)
        {
            switch (kvp.Key)
            {
            case EFarmWorkType.Watering:
                farm.RestoreWateringPlant(kvp.Value.m_Plant);
                break;

            case EFarmWorkType.Cleaning:
                farm.RestoreCleaningPlant(kvp.Value.m_Plant);
                break;

            case EFarmWorkType.Harvesting:
                farm.RestoreRipePlant(kvp.Value.m_Plant);
                break;

            case EFarmWorkType.Planting:
#if NEW_CLOD_MGR
                CSMgCreator mgCreator = m_Creator as CSMgCreator;
                if (mgCreator == null)
                {
                    Debug.Log(" CSCreator is error");
                    break;
                }

                mgCreator.m_Clod.DirtyTheChunk(kvp.Value.m_ClodChunk.m_ChunkIndex, false);
#else
                CSClodMgr.DirtyTheChunk(kvp.Value.m_ClodChunk.m_ChunkIndex, false);
#endif
                break;
            }
        }

        m_FarmWorkMap.Clear();
    }
示例#3
0
    // Update is called once per frame
    void Update()
    {
        if (RefNpc == null)
        {
            return;
        }

        //bool isNeedFuillTip = false;
        CSMgCreator mgCreator = RefNpc.m_Creator as CSMgCreator;

        if (mgCreator != null)
        {
            if (mgCreator.Assembly != null)
            {
                int farmCnt    = mgCreator.Assembly.GetEntityCnt(CSConst.ObjectType.Farm);
                int maxFarmCnt = mgCreator.Assembly.GetLimitCnt(CSConst.ObjectType.Farm);

                m_FarmUI.text = "[" + farmCnt.ToString() + "/" + maxFarmCnt.ToString() + "]";

                if (farmCnt != 0)
                {
                    CSFarm farm         = mgCreator.Assembly.m_BelongObjectsMap[CSConst.ObjectType.Farm][0] as CSFarm;
                    int    curFarmerCnt = farm.WorkerCount;
                    int    maxFarmerCnt = farm.WorkerMaxCount;
                    m_TotalFamersUI.text = curFarmerCnt.ToString() + "/" + maxFarmerCnt.ToString();
                    //if (curFarmerCnt >= maxFarmerCnt)
                    //    isNeedFuillTip = true;
                    if (curFarmerCnt >= maxFarmerCnt)
                    {
                        m_TotalFamersUI.color = Color.red;
                    }
                    else
                    {
                        m_TotalFamersUI.color = Color.white;
                    }
                }
                else
                {
                    m_TotalFamersUI.text = "0/0";
                }

                m_MangeNumUI.text   = mgCreator.FarmMgNum.ToString();
                m_HarvestNumUI.text = mgCreator.FarmHarvestNum.ToString();
                m_PlantNumUI.text   = mgCreator.FarmPlantNum.ToString();
            }
        }

        m_FullTipUI.gameObject.SetActive(false);
    }
示例#4
0
    void RPC_S2C_CLN_PlantClean(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        /*int farmId = */ stream.Read <int>();
        FarmPlantLogic plant = stream.Read <FarmPlantLogic>();

        CSMgCreator creator = MultiColonyManager.GetCreator(TeamId);

        if (creator == null || creator.Assembly == null)
        {
            return;
        }
        CSFarm farm = creator.Assembly.Farm;

        farm.RestoreCleaningPlant(plant);
    }
示例#5
0
 public bool FindBetterClod(Vector3 center, float radius, CSFarm farm, int plantItemid, out Vector3 pos)
 {
     if (m_IdleClods.Count != 0)
     {
         foreach (IntVec3 ivec in m_IdleClods.Keys)
         {
             if (new Vector3(ivec.x - center.x, ivec.y - center.y, ivec.z - center.z).magnitude < radius &&
                 farm.checkRroundCanPlant(plantItemid, m_Clods[ivec]))
             {
                 pos = m_Clods[ivec];
                 return(true);
             }
         }
     }
     pos = Vector3.zero;
     return(false);
 }
示例#6
0
 public ClodChunk FindHasIdleClodsChunk(Vector3 center, float radius, CSFarm farm, int plantItemid, out Vector3 pos)
 {
     if (m_IdleChunks.Count != 0)
     {
         float sqrRad = (radius + CHUNK_SIZE) * (radius + CHUNK_SIZE);
         foreach (IntVec3 ivec in m_IdleChunks.Keys)
         {
             Vector3 vec = new Vector3(center.x - ivec.x * CHUNK_SIZE, center.y - ivec.y * CHUNK_SIZE, center.z - ivec.z * CHUNK_SIZE);
             if (vec.sqrMagnitude < sqrRad && m_ClodChunks[ivec].HasIdleClodsInRange(radius, center))
             {
                 if (m_ClodChunks[ivec].FindBetterClod(center, radius, farm, plantItemid, out pos))
                 {
                     return(m_ClodChunks[ivec]);
                 }
             }
         }
     }
     pos = Vector3.zero;
     return(null);
 }
    private void _farmWorkStyle()
    {
        CSFarm farm = WorkRoom as CSFarm;

        if (farm == null)
        {
            return;
        }

        FarmPlantLogic plant = null;

        CSMgCreator mgCreator = m_Creator as CSMgCreator;

        // Only watering and weeding
        if (m_WorkMode == CSConst.pwtFarmForMag)
        {
            if (m_FarmWorkMap.Count != 0)
            {
                return;
            }

            ItemObject waterItem   = farm.GetPlantTool(0);
            ItemObject weedingItem = farm.GetPlantTool(1);

            // Watering
            plant = waterItem == null ? null : farm.AssignOutWateringPlant();
            if (plant != null)
            {
                FarmWorkInfo fwi = new FarmWorkInfo(plant);
                m_FarmWorkMap.Add(EFarmWorkType.Watering, fwi);

                //_sendToWorkOnFarm(fwi.m_Pos);
            }
            else
            {
                // Weeding
                plant = weedingItem == null ? null : farm.AssignOutCleaningPlant();

                if (plant != null)
                {
                    FarmWorkInfo fwi = new FarmWorkInfo(plant);
                    m_FarmWorkMap.Add(EFarmWorkType.Cleaning, fwi);

                    //_sendToWorkOnFarm(fwi.m_Pos);
                }
                //else
                //    Idle(0.0f, false);
            }
        }
        else if (m_WorkMode == CSConst.pwtFarmForHarvest)
        {
            if (m_FarmWorkMap.Count != 0)
            {
                return;
            }

            CSStorage storage = null;

            foreach (CSStorage css in farm.Assembly.m_BelongObjectsMap[CSConst.ObjectType.Storage])
            {
                SlotList slotList = css.m_Package.GetSlotList();
                if (slotList.GetVacancyCount() >= 2)
                //if (css.m_Package.GetEmptyGridCount() >= 2)
                {
                    storage = css;
                    break;
                }
            }

            if (storage != null)
            {
                plant = farm.AssignOutRipePlant();

                if (plant != null)
                {
                    FarmWorkInfo fwi = new FarmWorkInfo(plant);
                    m_FarmWorkMap.Add(EFarmWorkType.Harvesting, fwi);
                    //_sendToWorkOnFarm(fwi.m_Pos);
                }
                //else
                //    Idle(0.0f, false);
            }
            //else
            //    Idle(0.0f, false);
        }
        else if (m_WorkMode == CSConst.pwtFarmForPlant)
        {
            // Planting
            if (m_FarmWorkMap.Count == 0)
            {
#if NEW_CLOD_MGR
                ClodChunk cc = mgCreator.m_Clod.FindCleanChunk(farm.Assembly.Position, farm.Assembly.Radius);
#else
                ClodChunk cc = CSClodMgr.FindCleanChunk(farm.Assembly.Position, farm.Assembly.Radius);
#endif

                if (farm.HasPlantSeed() && cc != null)
                {
                    Vector3 pos;
                    bool    flag = cc.FindCleanClod(out pos);
                    if (flag)
                    {
#if NEW_CLOD_MGR
                        mgCreator.m_Clod.DirtyTheChunk(cc.m_ChunkIndex, true);
#else
                        CSClodMgr.DirtyTheChunk(cc.m_ChunkIndex, true);
#endif
                        FarmWorkInfo fwi = new FarmWorkInfo(cc, pos);
                        m_FarmWorkMap.Add(EFarmWorkType.Planting, fwi);

                        _sendToWorkOnFarm(fwi.m_Pos);
                    }
                }
                //else
                //    Idle(0.0f, false);
            }
            else if (m_FarmWorkMap.ContainsKey(EFarmWorkType.Planting) &&
                     m_FarmWorkMap[EFarmWorkType.Planting].m_Pos == Vector3.zero)
            {
                if (farm.HasPlantSeed())
                {
                    FarmWorkInfo fwi  = m_FarmWorkMap[EFarmWorkType.Planting];
                    bool         flag = fwi.m_ClodChunk.FindCleanClod(out fwi.m_Pos);

                    if (flag)
                    {
                        //_sendToWorkOnFarm(fwi.m_Pos);
                    }
                    else
                    {
                        m_FarmWorkMap.Remove(EFarmWorkType.Planting);
                    }
                }
                else
                {
                    FarmWorkInfo fwi = m_FarmWorkMap[EFarmWorkType.Planting];
#if NEW_CLOD_MGR
                    mgCreator.m_Clod.DirtyTheChunk(fwi.m_ClodChunk.m_ChunkIndex, false);
#else
                    CSClodMgr.DirtyTheChunk(fwi.m_ClodChunk.m_ChunkIndex, false);
#endif
                    m_FarmWorkMap.Remove(EFarmWorkType.Planting);
                }
            }

            if (!m_FarmWorkMap.ContainsKey(EFarmWorkType.Planting))
            {
                //Idle(0.0f, false);
            }
        }
    }
    public void ShowWndPart(CSUI_LeftMenuItem menuItem, int mWndPartType, CSEntity selectEntity = null)
    {
        if (!isShow)
        {
            base.Show();
            CheckFirstOpenColony();
        }

        if (null == menuItem || !m_ActiveMenuList.Contains(menuItem))
        {
            menuItem = m_Menu.m_PersonnelMI;
        }

        if (!menuItem.IsSelected)
        {
            menuItem.SelectSprite(true);
        }

        if (mSelectedMenuItem != null && mSelectedMenuItem != menuItem)
        {
            mSelectedMenuItem.IsSelected = false;
        }
        mSelectedMenuItem = menuItem;

        //log:lz-2016.05.26 只要打开都提示是否有电
        if (menuItem.NotHaveAssembly || menuItem.NotHaveElectricity)
        {
            string entityNameStr = CSUtils.GetEntityName(menuItem.m_Type);

            //log:lz-2016.05.26 Hospital里面三个机械要分别提示
            if (menuItem == m_Menu.m_HospitalMI && (m_Menu.m_HospitalMI.NotHaveAssembly || m_Menu.m_HospitalMI.NotHaveElectricity))
            {
                List <string> names = new List <string>();

                if (menuItem.AssemblyLevelInsufficient)
                {
                    names = menuItem.GetNamesByAssemblyLevelInsufficient();
                }
                else if (menuItem.NotHaveAssembly)
                {
                    names = menuItem.GetNamesByNotHaveAssembly();
                }
                else if (menuItem.NotHaveElectricity)
                {
                    names = menuItem.GetNamesByNotHaveElectricity();
                }
                if (null != names && names.Count > 0)
                {
                    entityNameStr = "";
                    for (int i = 0; i < names.Count; i++)
                    {
                        entityNameStr += names[i];
                        entityNameStr += ",";
                    }
                    entityNameStr = entityNameStr.Substring(0, entityNameStr.Length - 1);
                }
            }

            if (!string.IsNullOrEmpty(entityNameStr))
            {
                //lz-2016.06.08 检测顺序为:1.检测基地核心等级是否足够  2.检测是否有基地核心  3.检测是否有电 (注意:这个顺序不能修改,因为核心等级不足会满足没有核心的条件,具体参见menuItem.AssemblyLevelInsufficient的实现)
                if (menuItem.AssemblyLevelInsufficient)
                {
                    ShowStatusBar(CSUtils.GetNoFormatString(UIMsgBoxInfo.mCantWorkAssemblyLevelInsufficient.GetString(), entityNameStr), Color.red);
                }
                else if (menuItem.NotHaveAssembly)
                {
                    ShowStatusBar(CSUtils.GetNoFormatString(UIMsgBoxInfo.mCantWorkWithoutAssembly.GetString(), entityNameStr), Color.red);
                }
                else if (menuItem.NotHaveElectricity)
                {
                    ShowStatusBar(CSUtils.GetNoFormatString(UIMsgBoxInfo.mCantWorkWithoutElectricity.GetString(), entityNameStr), Color.red);
                }
            }
        }

        m_Windows.m_EngineeringUI.CloseLock();
        mWndPartTag = mWndPartType;
        mSkillLock.gameObject.SetActive(!IsUnLock(mWndPartType));
#if UNITY_5
        bool active = isActiveAndEnabled;
#endif
        // Assembly
        if (mWndPartType == CSConst.dtAssembly)
        {
            m_Windows.m_AssemblyUI.gameObject.SetActive(true);

            m_Windows.m_AssemblyUI.SetEntity(m_Creator.Assembly);
            mSelectedEnntity = m_Creator.Assembly;
        }
        //etStorage
        else if (mWndPartType == CSConst.dtStorage)
        {
            m_Windows.m_StorageUI.gameObject.SetActive(true);
            m_Windows.m_StorageUI.Replace(menuItem.m_EntityList);
        }
        //etPowerPlant
        else if (menuItem.m_Type == CSConst.dtppCoal)
        {
            m_Windows.m_PPCoalUI.gameObject.SetActive(true);
            m_Windows.m_PPCoalUI.SetEntityList(menuItem.m_EntityList, selectEntity);
        }
        //dtDwelling
        else if (mWndPartType == CSConst.dtDwelling)
        {
            m_Windows.m_DwellingsUI.gameObject.SetActive(active);
            m_Windows.m_DwellingsUI.SetEntityList(menuItem.m_EntityList);
        }
        //dtEngineer
        else if (mWndPartType == CSConst.dtEngineer)
        {
            m_Windows.m_EngineeringUI.Replace(menuItem.m_EntityList, selectEntity);
            m_Windows.m_EngineeringUI.gameObject.SetActive(active);
        }
        //dtFarm
        else if (menuItem.m_Type == CSConst.dtFarm)
        {
            if (menuItem.m_EntityList.Count >= 1)
            {
                m_Windows.m_FarmUI.gameObject.SetActive(active);
                CSFarm f = menuItem.m_EntityList[0] as CSFarm;
                if (menuItem.m_EntityList.Count > 1)
                {
                    foreach (CSEntity e in menuItem.m_EntityList)
                    {
                        CSFarm tempF = e as CSFarm;
                        if (tempF.IsRunning)
                        {
                            f = tempF;
                            break;
                        }
                    }
                }
                m_Windows.m_FarmUI.SetFarm(f);
                mSelectedEnntity = f;
            }
        }
        //dtFactory
        else if (menuItem.m_Type == CSConst.dtFactory)
        {
            //lz-2016.11.14 错误 #6335 Crush Bug
            if (menuItem.m_EntityList.Count >= 1)
            {
                NGUITools.SetActive(m_Windows.m_FactoryUI.gameObject, active);
                CSEntity f = menuItem.m_EntityList[0];
                if (menuItem.m_EntityList.Count > 1)
                {
                    foreach (CSEntity e in menuItem.m_EntityList)
                    {
                        if (e.IsRunning)
                        {
                            f = e;
                            break;
                        }
                    }
                }
                m_Windows.m_FactoryUI.SetEntity(f);
            }
        }
        //etPersonnel
        else if (mWndPartType == CSConst.dtPersonnel)
        {
            m_Windows.m_PersonnelUI.gameObject.SetActive(true);
        }

        //Transaction
        else if (mWndPartType == CSConst.dtTrade)
        {
            m_Windows.m_TradingPostUI.gameObject.SetActive(true);
            m_Windows.m_TradingPostUI.SetMenu(menuItem);
            //lz-2016.10.31 刷新OptionWnd和WorkWnd的Entity
            if (null != menuItem && menuItem.m_EntityList.Count > 0)
            {
                mSelectedEnntity = menuItem.m_EntityList[0];
            }
        }

        //Collect
        else if (mWndPartType == CSConst.dtProcessing)
        {
            m_Windows.m_CollectUI.gameObject.SetActive(true);
            m_Windows.m_CollectUI.UpdateCollect();
            //lz-2016.11.28 错误 #7098 crash bug
            if (menuItem.m_EntityList.Count > 0)
            {
                CSEntity f = menuItem.m_EntityList[0];
                if (menuItem.m_EntityList.Count > 1)
                {
                    foreach (CSEntity e in menuItem.m_EntityList)
                    {
                        if (e.IsRunning)
                        {
                            f = e;
                            break;
                        }
                    }
                }
                m_Windows.m_CollectUI.SetEnity(f);
            }
        }

        //Hospital
        else if (mWndPartType == CSConst.dtCheck || mWndPartType == CSConst.dtTreat || mWndPartType == CSConst.dtTent)
        {
            m_Windows.m_HospitalUI.gameObject.SetActive(true);
            //lw 2017.2.21:治疗的三个机器添加修理功能
            m_Windows.m_HospitalUI.RefleshMechine(m_Windows.m_HospitalUI.m_CheckedPartType, menuItem.m_EntityList, selectEntity);
        }
        //Train
        else if (mWndPartType == CSConst.dtTrain)
        {
            m_Windows.m_TrainUI.gameObject.SetActive(true);
            //lz-2016.01.03 选中的entity切换为训练所
            if (null != menuItem && menuItem.m_EntityList.Count > 0)
            {
                mSelectedEnntity = menuItem.m_EntityList[0];
            }
        }
        //删除bed界面子窗口
        DestroyChildWindowOfBed();
    }
示例#9
0
    public void SetFarm(CSEntity enti)
    {
        if (enti == null)
        {
            Debug.LogWarning("Reference Entity is null.");
            return;
        }

        m_Entity = enti;
        CSFarm farm = enti as CSFarm;

        m_SequentialPlantingCB.isChecked = farm.Data.m_SequentialPlanting;

        if (farm == m_Farm)
        {
            return;
        }

        if (m_Farm != null)
        {
            m_Farm.CreatePlantEvent     -= OnCreatePlant;
            m_Farm.RemovePlantEvent     -= OnRemovePlant;
            m_Farm.CreatePlantListEvent -= OnCreatAllPlants;
            m_Farm.ClearAllPlantEvent   -= OnClearAllPlants;
            m_Farm.RemoveEventListener(OnEntityEvent);
        }

        m_Farm = farm;

        m_Farm.CreatePlantEvent     += OnCreatePlant;
        m_Farm.RemovePlantEvent     += OnRemovePlant;
        m_Farm.CreatePlantListEvent += OnCreatAllPlants;
        m_Farm.ClearAllPlantEvent   += OnClearAllPlants;
        m_Farm.AddEventListener(OnEntityEvent);

        int i = 0;

        foreach (FarmPlantLogic p in farm.Plants.Values)
        {
            if (i < m_PlantGrids.Count)
            {
            }
            else
            {
                CSUI_PlantGrid pg = _createPlantGrid(p);

                UICheckbox cb = pg.gameObject.GetComponent <UICheckbox>();
                if (i == 0)
                {
                    cb.startsChecked = true;
                }
            }
            i++;
        }

        for (int j = i; j < m_PlantGrids.Count;)
        {
            GameObject.Destroy(m_PlantGrids[j].gameObject);
            m_PlantGrids.RemoveAt(j);
        }

        m_PlantPart.m_Root.repositionNow = true;


        // Seed an tool grid
        for (int j = 0; j < CSFarm.PLANTS_SEEDS_COUNT; j++)
        {
            ItemObject io = m_Farm.GetPlantSeed(j);
            m_SeedsGrids[j].m_Grid.SetItem(io);
        }

        for (int j = 0; j < CSFarm.PLANTS_TOOLS_COUNT; j++)
        {
            ItemObject io = m_Farm.GetPlantTool(j);
            m_ToolsGrids[j].m_Grid.SetItem(io);
        }
    }
示例#10
0
    CSCommon _CreateCommon(int type)
    {
        CSCommon csc = null;

        switch (type)
        {
        case CSConst.etStorage:
            csc = new CSStorage();
            CSStorage css = csc as CSStorage;
            css.m_Info    = CSInfoMgr.m_StorageInfo;
            css.m_Creator = this;
            css.m_Package.ExtendPackage(CSInfoMgr.m_StorageInfo.m_MaxItem, CSInfoMgr.m_StorageInfo.m_MaxEquip, CSInfoMgr.m_StorageInfo.m_MaxRecource, CSInfoMgr.m_StorageInfo.m_MaxArmor);
            break;

        case CSConst.etEnhance:
            csc = new CSEnhance();
            CSEnhance csen = csc as CSEnhance;
            csen.m_Creator = this;
            csen.m_Info    = CSInfoMgr.m_EnhanceInfo;
            break;

        case CSConst.etRepair:
            csc = new CSRepair();
            CSRepair csr = csc as CSRepair;
            csr.m_Creator = this;
            csr.m_Info    = CSInfoMgr.m_RepairInfo;
            break;

        case CSConst.etRecyle:
            csc = new CSRecycle();
            CSRecycle csrc = csc as CSRecycle;
            csrc.m_Creator = this;
            csrc.m_Info    = CSInfoMgr.m_RecycleInfo;
            break;

        case CSConst.etDwelling:
            csc = new CSDwellings();
            CSDwellings csd = csc as CSDwellings;
            csd.m_Creator = this;
            csd.m_Info    = CSInfoMgr.m_DwellingsInfo;

            // Find the npc to live
            if (!PeGameMgr.IsMulti)
            {
                int index = 0;
                foreach (KeyValuePair <int, CSCommon> kvp in m_CommonEntities)
                {
                    if (index >= csd.m_NPCS.Length)
                    {
                        break;
                    }

                    if (kvp.Value.m_Type == CSConst.etDwelling)
                    {
                        CSDwellings dwellings = kvp.Value as CSDwellings;
                        if (dwellings.IsRunning)
                        {
                            continue;
                        }
                        for (int i = 0; i < dwellings.m_NPCS.Length; i++)
                        {
                            if (dwellings.m_NPCS[i] != null)
                            {
                                csd.AddNpcs(dwellings.m_NPCS[i]);
                                dwellings.RemoveNpc(dwellings.m_NPCS[i]);
                                index++;
                            }
                        }
                    }
                }
            }
            break;

        case CSConst.etppCoal:
            csc = new CSPPCoal();
            CSPPCoal cscppc = csc as CSPPCoal;
            cscppc.m_Creator   = this;
            cscppc.m_Power     = 10000;
            cscppc.m_RestPower = 10000;
            cscppc.m_Info      = CSInfoMgr.m_ppCoal;
            break;

        case CSConst.etppSolar:
            csc = new CSPPSolar();
            CSPPSolar cspps = csc as CSPPSolar;
            cspps.m_Creator   = this;
            cspps.m_Power     = 10000;
            cspps.m_RestPower = 10000;
            cspps.m_Info      = CSInfoMgr.m_ppCoal;
            break;

        case CSConst.etFarm:
            csc           = new CSFarm();
            csc.m_Creator = this;
            csc.m_Info    = CSInfoMgr.m_FarmInfo;
            break;

        case CSConst.etFactory:
            csc           = new CSFactory();
            csc.m_Creator = this;
            csc.m_Info    = CSInfoMgr.m_FactoryInfo;
            break;

        case CSConst.etProcessing:
            csc = new CSProcessing(this);
            CSProcessing csp = csc as CSProcessing;
            csp.m_Info = CSInfoMgr.m_ProcessingInfo;
            break;

        case CSConst.etTrade:
            csc = new CSTrade(this);
            CSTrade cst = csc as CSTrade;
            cst.m_Info = CSInfoMgr.m_Trade;
            break;

        case CSConst.etTrain:
            csc = new CSTraining(this);
            CSTraining cstrain = csc as CSTraining;
            cstrain.m_Info = CSInfoMgr.m_Train;
            break;

        case CSConst.dtCheck:
            csc = new CSMedicalCheck(this);
            CSMedicalCheck csCheck = csc as CSMedicalCheck;
            csCheck.m_Info = CSInfoMgr.m_Check;
            break;

        case CSConst.dtTreat:
            csc = new CSMedicalTreat(this);
            CSMedicalTreat csTreat = csc as CSMedicalTreat;
            csTreat.m_Info = CSInfoMgr.m_Treat;
            break;

        case CSConst.dtTent:
            csc = new CSMedicalTent(this);
            CSMedicalTent csTent = csc as CSMedicalTent;
            csTent.m_Info = CSInfoMgr.m_Tent;
            break;

        case CSConst.dtppFusion:
            csc = new CSPPFusion();
            CSPPFusion csFusion = csc as CSPPFusion;
            csFusion.m_Creator   = this;
            csFusion.m_Power     = 10000;
            csFusion.m_RestPower = 100000;
            csFusion.m_Info      = CSInfoMgr.m_ppFusion;
            break;

        default:
            break;
        }

        return(csc);
    }