// 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(); }
// 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); }
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); }
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); }
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(); }
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); } }
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); }