/// <summary> /// 更新灾害信息表 /// </summary> /// <param name="dao">数据对象</param> /// <returns>成功/失败</returns> public bool Update(DisasterInfo dao) { SqlStatement stmt = _session.CreateSqlStatement(); stmt.AppendString("update DisasterInfo set "); stmt.AppendString("GroupID="); stmt.AppendParameter(_session.MakeInParameter("GroupID", dao.GroupID, SqlDbType.UniqueIdentifier)); stmt.AppendString(",StationName="); stmt.AppendParameter(_session.MakeInParameter("StationName", dao.StationName, SqlDbType.NVarChar)); stmt.AppendString(",Category="); stmt.AppendParameter(_session.MakeInParameter("Category", dao.Category, SqlDbType.Int)); stmt.AppendString(",StartMileage="); stmt.AppendParameter(_session.MakeInParameter("StartMileage", dao.StartMileage, SqlDbType.NVarChar)); stmt.AppendString(",EndMileage="); stmt.AppendParameter(_session.MakeInParameter("EndMileage", dao.EndMileage, SqlDbType.NVarChar)); stmt.AppendString(",WarningRelay="); stmt.AppendParameter(_session.MakeInParameter("WarningRelay", dao.WarningRelay, SqlDbType.NVarChar)); stmt.AppendString(",AffectedSectionName="); stmt.AppendParameter(_session.MakeInParameter("AffectedSectionName", dao.AffectedSectionName, SqlDbType.NVarChar)); stmt.AppendString(",Remark="); stmt.AppendParameter(_session.MakeInParameter("Remark", dao.Remark, SqlDbType.NVarChar)); stmt.AppendString(" where "); stmt.AppendString("ID="); stmt.AppendParameter(_session.MakeInParameter("ID", dao.ID, SqlDbType.Int)); stmt.StatementType = SqlStatementType.Update; return(_session.Excecute(stmt).RowsAffected > 0); }
private bool _Applies() { int disasterCount = Singleton <DisasterManager> .instance.m_disasterCount; if (m_DisasterFilter.Count == 0) { return(disasterCount >= m_DisasterCountFrom && disasterCount <= m_DisasterCountTo); } else { int count = 0; for (int i = 0; i < disasterCount; ++i) { DisasterInfo info = Singleton <DisasterManager> .instance.m_disasters[i].Info; if (info != null) { if (m_DisasterFilter.Contains(info.name)) { ++count; } } } return(count >= m_DisasterCountFrom && count <= m_DisasterCountTo); } }
/// <summary> /// 新增灾害信息表 /// </summary> /// <param name="dao">数据对象</param> /// <returns>成功/失败</returns> public bool Insert(DisasterInfo dao) { SqlStatement stmt = _session.CreateSqlStatement(); stmt.AppendString("insert into DisasterInfo(GroupID,StationName,Category,StartMileage,EndMileage,WarningRelay,AffectedSectionName,Remark) values ("); stmt.AppendParameter(_session.MakeInParameter("GroupID", dao.GroupID, SqlDbType.UniqueIdentifier)); stmt.AppendString(","); stmt.AppendParameter(_session.MakeInParameter("StationName", dao.StationName, SqlDbType.NVarChar)); stmt.AppendString(","); stmt.AppendParameter(_session.MakeInParameter("Category", dao.Category, SqlDbType.Int)); stmt.AppendString(","); stmt.AppendParameter(_session.MakeInParameter("StartMileage", dao.StartMileage, SqlDbType.NVarChar)); stmt.AppendString(","); stmt.AppendParameter(_session.MakeInParameter("EndMileage", dao.EndMileage, SqlDbType.NVarChar)); stmt.AppendString(","); stmt.AppendParameter(_session.MakeInParameter("WarningRelay", dao.WarningRelay, SqlDbType.NVarChar)); stmt.AppendString(","); stmt.AppendParameter(_session.MakeInParameter("AffectedSectionName", dao.AffectedSectionName, SqlDbType.NVarChar)); stmt.AppendString(","); stmt.AppendParameter(_session.MakeInParameter("Remark", dao.Remark, SqlDbType.NVarChar)); stmt.AppendString(");select SCOPE_IDENTITY();"); stmt.StatementType = SqlStatementType.Identity; SqlResult result = _session.Excecute(stmt); if (result.Data != null) { dao.ID = int.Parse(result.Data.ToString()); return(true); } return(false); }
/// <summary> /// 재난 카테고리/종류 콤보박스 설정. /// </summary> private void InitializeDisasterCmbbox() { this.cmbboxDisasterCategory.Items.Clear(); this.cmbboxDisasterKind.Items.Clear(); this.cmbboxDisasterCategory.Enabled = false; this.cmbboxDisasterKind.Enabled = false; if (BasisData.Disasters == null || BasisData.Disasters.Count <= 0) { this.cmbboxDisasterCategory.Enabled = false; this.cmbboxDisasterKind.Enabled = false; return; } this.cmbboxDisasterCategory.Enabled = true; this.cmbboxDisasterCategory.Items.Add("전체"); foreach (DisasterInfo info in BasisData.Disasters) { if (info == null || info.Category == null) { continue; } DisasterInfo copy = new DisasterInfo(); copy.DeepCopyFrom(info); this.cmbboxDisasterCategory.Items.Add(copy); } this.cmbboxDisasterCategory.SelectedIndex = 0; }
private void cmbboxDisasterCategory_SelectedIndexChanged(object sender, EventArgs e) { this.lstboxDisasterKind.Items.Clear(); this.txtboxBoard.Clear(); this.txtboxCBS.Clear(); this.txtboxTTS.Clear(); this.txtboxDMB.Clear(); this.lstboxDisasterKind.SelectedIndex = -1; this.lstboxLanguageKind.SelectedIndex = -1; this.lstboxCityType.SelectedIndex = -1; ComboBox cmb = sender as ComboBox; if (cmb.SelectedIndex < 0) { return; } DisasterInfo info = cmb.SelectedItem as DisasterInfo; if (info == null || info.Category == null || info.KindList == null) { return; } foreach (DisasterKind kind in info.KindList) { this.lstboxDisasterKind.Items.Add(kind); } }
public void UpdateDisasterProperties(bool isSet) { int prefabsCount = PrefabCollection <DisasterInfo> .PrefabCount(); for (uint i = 0; i < prefabsCount; i++) { DisasterInfo di = PrefabCollection <DisasterInfo> .GetPrefab(i); if (di == null) { continue; } if (di.m_disasterAI as EarthquakeAI != null) { if (isSet && NoCracks) { ((EarthquakeAI)di.m_disasterAI).m_crackLength = 0; ((EarthquakeAI)di.m_disasterAI).m_crackWidth = 0; } else { ((EarthquakeAI)di.m_disasterAI).m_crackLength = 1000; ((EarthquakeAI)di.m_disasterAI).m_crackWidth = 100; } } } }
private void DebugOutput() { for (uint i = 0; i < PrefabCollection <RadioChannelInfo> .PrefabCount(); ++i) { String message = ""; RadioChannelInfo info = PrefabCollection <RadioChannelInfo> .GetPrefab(i); if (info == null) { continue; } message += "[ChannelInfo] " + info + "\n"; message += "Schedule:\n"; if (info.m_stateChain != null) { foreach (RadioChannelInfo.State s in info.m_stateChain) { message += "\t" + s.m_contentType + " " + s.m_minCount + " - " + s.m_maxCount + "\n"; } } message += "Content:\n"; for (uint j = 0; j < PrefabCollection <RadioContentInfo> .PrefabCount(); ++j) { RadioContentInfo content = PrefabCollection <RadioContentInfo> .GetPrefab(j); if (content == null) { continue; } if (content.m_radioChannels != null) { if (content.m_radioChannels.Contains(info)) { message += "\t[ContentInfo] " + content + " " + content.m_fileName + "\n"; } } } CSLMusicMod.Log(message); } for (uint i = 0; i < PrefabCollection <DisasterInfo> .PrefabCount(); ++i) { DisasterInfo info = PrefabCollection <DisasterInfo> .GetPrefab(i); if (info == null) { continue; } CSLMusicMod.Log("[DisasterContext] Disaster name: " + info.name); } }
public DisasterInfo GetInfo(DisasterType type) { DisasterInfo info = null; if (DisasterInfos.TryGetValue(type, out info)) { return(info); } return(null); }
/// <summary> /// 재난 카테고리 선택 변경 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmbboxDisasterCategory_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cmbbox = sender as ComboBox; this.cmbboxDisasterKind.Items.Clear(); this.cmbboxDisasterKind.ResetText(); if (cmbbox.SelectedIndex < 0) { this.cmbboxDisasterKind.Enabled = false; this.currentOrderInfo.Disaster.Category = new DisasterCategory(); this.currentOrderInfo.Disaster.Kind = new DisasterKind(); } else { if (this.currentOrderInfo.RefType == OrderReferenceType.Clear || this.currentOrderInfo.Disaster.Kind.Code == "DWC") { this.cmbboxDisasterCategory.Enabled = false; this.cmbboxDisasterKind.Enabled = false; } else { this.cmbboxDisasterCategory.Enabled = true; this.cmbboxDisasterKind.Enabled = true; } DisasterInfo selectedCategoryInfo = cmbbox.SelectedItem as DisasterInfo; if (selectedCategoryInfo == null || selectedCategoryInfo.Category == null) { System.Console.WriteLine("[OrderForm] cmbboxDisasterCategory_SelectedIndexChanged (데이터 오류) "); return; } if (selectedCategoryInfo.KindList != null) { foreach (DisasterKind kind in selectedCategoryInfo.KindList) { this.cmbboxDisasterKind.Items.Add(kind); } } if (cmbbox.Focused) { DisasterCategory category = new DisasterCategory(); category.DeepCopyFrom(selectedCategoryInfo.Category); this.currentOrderInfo.Disaster.Category = category; this.currentOrderInfo.Disaster.Kind = new DisasterKind(); } } this.btnMsgText.Enabled = false; }
/// <summary> /// 발령 정보에서 설정한 대로 재난 카테고리/종류 정보를 설정(선택) /// </summary> private void UpdateDisasterSelection() { // 재난 카테고리 선택 상태 if (this.cmbboxDisasterCategory.Items == null) { this.cmbboxDisasterCategory.Enabled = false; return; } for (int index = 0; index < this.cmbboxDisasterCategory.Items.Count; index++) { DisasterInfo info = this.cmbboxDisasterCategory.Items[index] as DisasterInfo; if (info == null || info.Category == null) { continue; } if (info.Category.Code == this.currentOrderInfo.Disaster.Category.Code) { this.cmbboxDisasterCategory.SelectedIndex = index; break; } } if (this.cmbboxDisasterCategory.SelectedIndex < 0) { this.cmbboxDisasterKind.Items.Clear(); this.cmbboxDisasterKind.Enabled = false; return; } // 재난 종류 선택 상태 if (this.cmbboxDisasterKind.Items == null) { this.cmbboxDisasterKind.Enabled = false; return; } for (int index = 0; index < this.cmbboxDisasterKind.Items.Count; index++) { DisasterKind info = this.cmbboxDisasterKind.Items[index] as DisasterKind; if (info == null) { // 아직 데이터가 설정되지 않았다. continue; } if (info.Code == this.currentOrderInfo.Disaster.Kind.Code) { this.cmbboxDisasterKind.SelectedIndex = index; break; } } }
/// <summary> /// 재난 카테고리/종류 콤보박스 설정. /// </summary> private bool InitializeDisasterCmbbox() { this.cmbboxDisasterCategory.Items.Clear(); this.lstboxDisasterKind.Items.Clear(); this.cmbboxDisasterCategory.Enabled = false; this.lstboxDisasterKind.Enabled = false; if (BasisData.Disasters == null || BasisData.Disasters.Count <= 0) { this.cmbboxDisasterCategory.Enabled = false; this.lstboxDisasterKind.Enabled = false; return(false); } this.cmbboxDisasterCategory.Enabled = true; DisasterInfo initDisaster = null; foreach (DisasterInfo info in BasisData.Disasters) { if (info == null || info.Category == null) { continue; } DisasterInfo copy = new DisasterInfo(); copy.DeepCopyFrom(info); this.cmbboxDisasterCategory.Items.Add(copy); if (info.Category.Name == "기상") { initDisaster = copy; } } if (initDisaster == null || initDisaster.KindList == null) { return(true); } this.cmbboxDisasterCategory.SelectedText = "기상"; this.lstboxDisasterKind.Enabled = true; foreach (DisasterKind kindInfo in initDisaster.KindList) { this.lstboxDisasterKind.Items.Add(kindInfo); } return(true); }
/// <summary> /// 获取指定大小的一页灾害信息表集合 /// </summary> /// <param name="pageIndex">当前页码</param> /// <param name="pageSize">分页大小</param> /// <param name="rowsCount">总记录条数</param> /// <returns>分页数据</returns> public ObservableCollection <DisasterInfo> SelectAllCollection(int pageIndex, int pageSize, int rowsCount) { ObservableCollection <DisasterInfo> datas = new ObservableCollection <DisasterInfo>(); GenDataReader reader = Session.ExcecuteReader(_dal.SelectAllSqlStatement(), pageIndex, pageSize, rowsCount); while (reader.Read()) { DisasterInfo dao = new DisasterInfo(); _dal.DataReaderToEntity(reader, dao); datas.Add(dao); } reader.Close(); return(datas); }
protected override bool findTarget(DisasterInfo disasterInfo, out Vector3 targetPosition, out float angle) { if (aftershocksCount == 0) { bool result = base.findTarget(disasterInfo, out targetPosition, out angle); lastTargetPosition = targetPosition; lastAngle = angle; return(result); } else { targetPosition = lastTargetPosition; angle = lastAngle; return(true); } }
/// <summary> /// 获取指定的灾害信息表 /// </summary> /// <param name="iD">顺序号</param> /// <returns>灾害信息表</returns> public DisasterInfo SelectOne(int iD) { SqlStatement stmt = _session.CreateSqlStatement(); stmt.AppendString("select * from DisasterInfo where ID="); stmt.AppendParameter(_session.MakeInParameter("ID", iD, SqlDbType.Int)); stmt.StatementType = SqlStatementType.Select; SqlResult result = _session.Excecute(stmt); DisasterInfo disasterInfo = new DisasterInfo(); if (result.RowsAffected > 0) { DataRowToEntity(result.Tables[0].Rows[0], disasterInfo); } return(disasterInfo); }
protected void startDisaster(byte intensity) { DisasterInfo disasterInfo = EnhancedDisastersManager.GetDisasterInfo(DType); if (disasterInfo == null) { return; } Vector3 targetPosition; float angle; bool targetFound = findTarget(disasterInfo, out targetPosition, out angle); if (!targetFound) { DebugLogger.Log(getDebugStr() + "target not found"); return; } DisasterManager dm = Singleton <DisasterManager> .instance; ushort disasterIndex; bool disasterCreated = dm.CreateDisaster(out disasterIndex, disasterInfo); if (!disasterCreated) { DebugLogger.Log(getDebugStr() + "could not create disaster"); return; } DisasterLogger.StartedByMod = true; disasterStarting(disasterInfo); dm.m_disasters.m_buffer[(int)disasterIndex].m_targetPosition = targetPosition; dm.m_disasters.m_buffer[(int)disasterIndex].m_angle = angle; dm.m_disasters.m_buffer[(int)disasterIndex].m_intensity = intensity; DisasterData[] expr_98_cp_0 = dm.m_disasters.m_buffer; ushort expr_98_cp_1 = disasterIndex; expr_98_cp_0[(int)expr_98_cp_1].m_flags = (expr_98_cp_0[(int)expr_98_cp_1].m_flags | DisasterData.Flags.SelfTrigger); disasterInfo.m_disasterAI.StartNow(disasterIndex, ref dm.m_disasters.m_buffer[(int)disasterIndex]); DebugLogger.Log(getDebugStr() + string.Format("disaster intensity: {0}, area: {1}", intensity, unlocked ? OccurrenceAreaAfterUnlock : OccurrenceAreaBeforeUnlock)); }
private IEnumerator StartDisaster(DisasterInfo info, Vector3 target, float angle) { DisasterManager disasterManager = Singleton <DisasterManager> .instance; if (disasterManager.CreateDisaster(out ushort disaster, info)) { disasterManager.m_disasters.m_buffer[disaster].m_targetPosition = target; disasterManager.m_disasters.m_buffer[disaster].m_angle = angle; disasterManager.m_disasters.m_buffer[disaster].m_intensity = (byte)Singleton <SimulationManager> .instance.m_randomizer.Int32(10, 100); disasterManager.m_disasters.m_buffer[disaster].m_flags |= DisasterData.Flags.SelfTrigger; info.m_disasterAI.StartNow(disaster, ref disasterManager.m_disasters.m_buffer[disaster]); } yield return((object)0); /*Error: Unable to find new state assignment for yield return*/ ; }
/// <summary> /// 获取所有的灾害信息表集合 /// </summary> /// <returns>所有信息</returns> public ObservableCollection <DisasterInfo> SelectAllCollection() { ObservableCollection <DisasterInfo> datas = new ObservableCollection <DisasterInfo>(); SqlStatement stmt = _session.CreateSqlStatement(); stmt.AppendString("select * from DisasterInfo"); stmt.StatementType = SqlStatementType.Select; GenDataReader reader = _session.ExcecuteReader(stmt); while (reader.Read()) { DisasterInfo dao = new DisasterInfo(); DataReaderToEntity(reader, dao); datas.Add(dao); } reader.Close(); return(datas); }
private void InitializeDisasterInfo() { this.cmbboxDisasterCategory.Items.Clear(); if (BasisData.Disasters == null || BasisData.Disasters.Count <= 0) { return; } foreach (DisasterInfo info in BasisData.Disasters) { if (info == null || info.Category == null) { continue; } DisasterInfo copy = new DisasterInfo(); copy.DeepCopyFrom(info); this.cmbboxDisasterCategory.Items.Add(copy); } }
/// <summary> /// [재난 종류] 카테고리 선택 변경. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmbboxDisasterCategory_SelectedIndexChanged(object sender, EventArgs e) { this.cmbboxDisasterKind.ResetText(); this.cmbboxDisasterKind.Items.Clear(); this.cmbboxDisasterKind.Enabled = false; this.orderInquiryCondition.Disaster = null; ComboBox cmb = sender as ComboBox; if (cmb.SelectedIndex < 0) { return; } else if (cmb.SelectedIndex == 0 && cmb.SelectedText == "전체") { return; } else { } this.cmbboxDisasterKind.Enabled = true; DisasterInfo info = cmb.SelectedItem as DisasterInfo; if (info == null || info.Category == null) { this.cmbboxDisasterKind.Enabled = false; return; } this.orderInquiryCondition.Disaster = new Disaster(info.Category, null); this.cmbboxDisasterKind.Items.Add("전체"); foreach (DisasterKind kind in info.KindList) { this.cmbboxDisasterKind.Items.Add(kind); } this.cmbboxDisasterKind.SelectedIndex = 0; }
protected virtual bool findTarget(DisasterInfo disasterInfo, out Vector3 targetPosition, out float angle) { OccurrenceAreas area = unlocked ? OccurrenceAreaAfterUnlock : OccurrenceAreaBeforeUnlock; switch (area) { case OccurrenceAreas.LockedAreas: return(findRandomTargetInLockedAreas(out targetPosition, out angle)); case OccurrenceAreas.Everywhere: return(findRandomTargetEverywhere(out targetPosition, out angle)); case OccurrenceAreas.UnlockedAreas: // Vanilla default return(disasterInfo.m_disasterAI.FindRandomTarget(out targetPosition, out angle)); default: targetPosition = new Vector3(); angle = 0; return(false); } }
/// <summary> /// 更新灾害信息表 /// </summary> /// <param name="dao">数据对象</param> /// <returns>成功/失败</returns> public bool Update(DisasterInfo dao) { bool ret = false; try { Session.Open(); Session.BeginTransaction(); ret = _dal.Update(dao); Session.CommitTransaction(); } catch (Exception err) { ret = false; Log.Error(dao, err); Session.RollBackTransaction(); } finally { Session.Close(); } return(ret); }
/// <summary> /// [재난 종류] 카테고리 리스트 선택 변경 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmbboxDisasterCategory_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cmbbox = sender as ComboBox; this.cmbboxDisasterKind.Items.Clear(); this.cmbboxDisasterKind.ResetText(); this.cmbboxDisasterKind.Enabled = true; if (cmbbox.SelectedIndex < 0) { this.cmbboxDisasterKind.Enabled = false; return; } DisasterInfo selectedCategory = cmbbox.SelectedItem as DisasterInfo; if (selectedCategory == null) { return; } // 재난 종류 콤보박스 갱신 if (selectedCategory.KindList != null) { foreach (DisasterKind kind in selectedCategory.KindList) { this.cmbboxDisasterKind.Items.Add(kind); } } // 사용자에 의한 선택 변경 시에만 그룹 정보를 갱신 if (cmbbox.Focused) { this.currentProfile.DisasterCategoryID = selectedCategory.Category.ID; this.currentProfile.DisasterKindCode = string.Empty; } }
public void LaunchMeteor() { DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "Launch Meteor 1"); if ((UnityEngine.Object)m_cameraController != (UnityEngine.Object)null) { DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "Launch Meteor 2"); int num12 = PrefabCollection <DisasterInfo> .LoadedCount(); if (num12 != 0) { DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "Launch Meteor 3"); // for (int i = 0; i < num12; i++) // { DisasterInfo loaded = PrefabCollection <DisasterInfo> .GetLoaded((uint)3); if ((UnityEngine.Object)loaded != (UnityEngine.Object)null && loaded.m_disasterAI.CanSelfTrigger()) { DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "Name " + loaded.gameObject.name); Singleton <SimulationManager> .instance.AddAction(StartDisaster(loaded, m_cameraController.m_currentPosition, (0f - m_cameraController.m_currentAngle.x) * 0.0174532924f)); } // } } } }
private static void AddProbabilitySlider(IStronglyTypedUIHelper disasterGroup, string settingKey, DisasterInfo disasterInfo) { var probability = disasterInfo.m_finalRandomProbability; if (ModConfig.Instance.HasSetting(settingKey)) { probability = ModConfig.Instance.GetSetting <int>(settingKey); } var labelText = disasterInfo.name; var slider = disasterGroup.AddSlider( labelText, 0, 1000, 1, probability, newProbability => { disasterInfo.m_finalRandomProbability = (int)newProbability; ModConfig.Instance.SaveSetting(settingKey, (int)newProbability); }); slider.width = (int)Math.Round(slider.width * 1.5f); var label = slider.GetLabel(); label.width = (int)Math.Round(label.width * 1.5f); }
private static void HandleFireSpread(CommonBuildingAI CBAI, ushort buildingID, ref Building buildingData, int fireDamage) { unsafe { Quad2 quad2 = new Quad2(); int width = buildingData.Width; int length = buildingData.Length; Vector2 vector2 = VectorUtils.XZ(buildingData.m_position); Vector2 vector21 = new Vector2(Mathf.Cos(buildingData.m_angle), Mathf.Sin(buildingData.m_angle)); Vector2 vector22 = new Vector2(vector21.y, -vector21.x); float single = (float)Singleton <SimulationManager> .instance.m_randomizer.Int32(8, 32); quad2.a = (vector2 - (((float)width * 4f + single) * vector21)) - (((float)length * 4f + single) * vector22); quad2.b = (vector2 + (((float)width * 4f + single) * vector21)) - (((float)length * 4f + single) * vector22); quad2.c = (vector2 + (((float)width * 4f + single) * vector21)) + (((float)length * 4f + single) * vector22); quad2.d = (vector2 - (((float)width * 4f + single) * vector21)) + (((float)length * 4f + single) * vector22); Vector2 vector23 = quad2.Min(); Vector2 vector24 = quad2.Max(); float mPosition = buildingData.m_position.y - (float)buildingData.m_baseHeight; //krn //CBAI.m_info is private\instance /use reflection, should do reverse redirect. BuildingInfo bldgInfo; bldgInfo = (BuildingInfo)CBAI.GetType().GetField("m_info", BindingFlags.Instance | BindingFlags.Public).GetValue(CBAI); if (bldgInfo == null && bldgInfo.m_size == null) { Logger.dbgLog("bldgInfo was null"); } float mPosition1 = buildingData.m_position.y + bldgInfo.m_size.y; //org //float mPosition1 = buildingData.m_position.y + this.m_info.m_size.y; //end org float mFireIntensity = (float)(buildingData.m_fireIntensity * (64 - Mathf.Abs(fireDamage - 192))); InstanceID instanceID = new InstanceID() { Building = buildingID }; InstanceManager.Group group = Singleton <InstanceManager> .instance.GetGroup(instanceID); if (group != null) { ushort disaster = group.m_ownerInstance.Disaster; if (disaster != 0) { DisasterManager disasterManager = Singleton <DisasterManager> .instance; DisasterInfo info = disasterManager.m_disasters.m_buffer[disaster].Info; int fireSpreadProbability = info.m_disasterAI.GetFireSpreadProbability(disaster, ref disasterManager.m_disasters.m_buffer[disaster]); mFireIntensity = mFireIntensity * ((float)fireSpreadProbability * 0.01f); } } int num = Mathf.Max((int)((vector23.x - 72f) / 64f + 135f), 0); int num1 = Mathf.Max((int)((vector23.y - 72f) / 64f + 135f), 0); int num2 = Mathf.Min((int)((vector24.x + 72f) / 64f + 135f), 269); int num3 = Mathf.Min((int)((vector24.y + 72f) / 64f + 135f), 269); BuildingManager buildingManager = Singleton <BuildingManager> .instance; for (int i = num1; i <= num3; i++) { for (int j = num; j <= num2; j++) { ushort mBuildingGrid = buildingManager.m_buildingGrid[i * 270 + j]; int num4 = 0; object[] paramcall; while (mBuildingGrid != 0) { //Should we change this 262144? if (mBuildingGrid != buildingID && (float)Singleton <SimulationManager> .instance.m_randomizer.Int32(262144) * single < mFireIntensity) { //Logger.dbgLog("Handlefire1"); paramcall = new object[] { quad2, mPosition, mPosition1, mBuildingGrid, buildingManager.m_buildings.m_buffer[mBuildingGrid], group }; //var x = CBAI.GetType().GetMethod("TrySpreadFire", BindingFlags.Static | BindingFlags.NonPublic).Invoke(CBAI, paramcall); LimitCommonBuildingAI.TrySpreadFire(quad2, mPosition, mPosition1, mBuildingGrid, ref buildingManager.m_buildings.m_buffer[mBuildingGrid], group); //Logger.dbgLog("Handlefire2"); //orginal //CommonBuildingAI.TrySpreadFire(quad2, mPosition, mPosition1, mBuildingGrid, ref buildingManager.m_buildings.m_buffer[mBuildingGrid], group); } mBuildingGrid = buildingManager.m_buildings.m_buffer[mBuildingGrid].m_nextGridBuilding; int num5 = num4 + 1; num4 = num5; if (num5 < 49152) { continue; } CODebugBase <LogChannel> .Error(LogChannel.Core, string.Concat("Invalid list detected!\n", Environment.StackTrace)); break; } } } Vector3 vector3 = VectorUtils.X_Y(vector21); Vector3 vector31 = VectorUtils.X_Y(vector22); int num6 = Mathf.Max((int)((vector23.x - 32f) / 32f + 270f), 0); int num7 = Mathf.Max((int)((vector23.y - 32f) / 32f + 270f), 0); int num8 = Mathf.Min((int)((vector24.x + 32f) / 32f + 270f), 539); int num9 = Mathf.Min((int)((vector24.y + 32f) / 32f + 270f), 539); TreeManager treeManager = Singleton <TreeManager> .instance; for (int k = num7; k <= num9; k++) { for (int l = num6; l <= num8; l++) { uint mTreeGrid = treeManager.m_treeGrid[k * 540 + l]; int num10 = 0; while (mTreeGrid != 0) { Vector3 position = treeManager.m_trees.m_buffer[mTreeGrid].Position; Vector3 mPosition2 = position - buildingData.m_position; mPosition2 = mPosition2 - (Mathf.Clamp(Vector3.Dot(mPosition2, vector3), (float)(-width) * 4f, (float)width * 4f) * vector3); mPosition2 = mPosition2 - (Mathf.Clamp(Vector3.Dot(mPosition2, vector31), (float)(-length) * 4f, (float)length * 4f) * vector31); float single1 = mPosition2.magnitude; //Should we change this 131072? //Logger.dbgLog("Handlefire3"); if (single1 < 32f && (float)Singleton <SimulationManager> .instance.m_randomizer.Int32(131072) * single1 < mFireIntensity) { treeManager.BurnTree(mTreeGrid, group, (int)buildingData.m_fireIntensity); } mTreeGrid = treeManager.m_trees.m_buffer[mTreeGrid].m_nextGridTree; int num11 = num10 + 1; num10 = num11; if (num11 < LimitTreeManager.Helper.TreeLimit) { continue; } CODebugBase <LogChannel> .Error(LogChannel.Core, string.Concat("Invalid list detected!\n", Environment.StackTrace)); break; } } } } }
public static DisasterInfo GetDisasterInfo(DisasterType disasterType) { int prefabCount = PrefabCollection <DisasterInfo> .PrefabCount(); for (int i = 0; i < prefabCount; i++) { DisasterInfo disasterInfo = PrefabCollection <DisasterInfo> .GetPrefab((uint)i); if (disasterInfo != null) { switch (disasterType) { case DisasterType.Earthquake: if (disasterInfo.m_disasterAI as EarthquakeAI != null) { return(disasterInfo); } break; case DisasterType.ForestFire: if (disasterInfo.m_disasterAI as ForestFireAI != null) { return(disasterInfo); } break; case DisasterType.MeteorStrike: if (disasterInfo.m_disasterAI as MeteorStrikeAI != null) { return(disasterInfo); } break; case DisasterType.ThunderStorm: if (disasterInfo.m_disasterAI as ThunderStormAI != null) { return(disasterInfo); } break; case DisasterType.Tornado: if (disasterInfo.m_disasterAI as TornadoAI != null) { return(disasterInfo); } break; case DisasterType.Tsunami: if (disasterInfo.m_disasterAI as TsunamiAI != null) { return(disasterInfo); } break; case DisasterType.StructureCollapse: if (disasterInfo.m_disasterAI as StructureCollapseAI != null) { return(disasterInfo); } break; case DisasterType.StructureFire: if (disasterInfo.m_disasterAI as StructureFireAI != null) { return(disasterInfo); } break; case DisasterType.Sinkhole: if (disasterInfo.m_disasterAI as SinkholeAI != null) { return(disasterInfo); } break; } } } return(null); }
/// <summary> /// 그룹 정보에서 등록된 대로 재난 카테고리/종류 정보를 갱신. /// </summary> private void UpdateDisasterSelection() { // 사용 유무 if (this.currentProfile.DisasterCategoryID <= 0) { this.chkboxUseDisasterSet.Checked = false; this.cmbboxDisasterCategory.Enabled = false; this.cmbboxDisasterKind.Enabled = false; return; } this.chkboxUseDisasterSet.Checked = true; // 재난 카테고리 선택 상태 if (this.cmbboxDisasterCategory.Items == null) { this.cmbboxDisasterCategory.Enabled = false; return; } this.cmbboxDisasterCategory.Enabled = true; for (int index = 0; index < this.cmbboxDisasterCategory.Items.Count; index++) { DisasterInfo info = this.cmbboxDisasterCategory.Items[index] as DisasterInfo; if (info == null || info.Category == null) { continue; } if (info.Category.ID == this.currentProfile.DisasterCategoryID) { this.cmbboxDisasterCategory.SelectedIndex = index; break; } } if (this.cmbboxDisasterCategory.SelectedIndex < 0) { this.cmbboxDisasterKind.Items.Clear(); this.cmbboxDisasterKind.Enabled = false; return; } // 재난 종류 선택 상태 if (this.cmbboxDisasterKind.Items == null) { this.cmbboxDisasterKind.Enabled = false; return; } this.cmbboxDisasterKind.Enabled = true; for (int index = 0; index < this.cmbboxDisasterKind.Items.Count; index++) { DisasterKind info = this.cmbboxDisasterKind.Items[index] as DisasterKind; if (info == null) { continue; } if (info.Code == this.currentProfile.DisasterKindCode) { this.cmbboxDisasterKind.SelectedIndex = index; break; } } }
private PoolList <GroupInfo> CollectAssets(GroupFilter filter, Comparison <GroupInfo> comparison) { PoolList <GroupInfo> poolList = PoolList <GroupInfo> .Obtain(); if (filter.IsFlagSet(GroupFilter.Net)) { // TAM Edit Start poolList.AddRange(CollectAssetsNetInfoGroups().ToArray()); // TAM Edit End } if (filter.IsFlagSet(GroupFilter.Building) || filter.IsFlagSet(GroupFilter.Wonder)) { uint num2 = 0u; while ((ulong)num2 < (ulong)((long)PrefabCollection <BuildingInfo> .LoadedCount())) { BuildingInfo loaded2 = PrefabCollection <BuildingInfo> .GetLoaded(num2); if (loaded2 != null && this.FilterWonders(filter, loaded2) && this.IsServiceValid(loaded2) && this.IsPlacementRelevant(loaded2)) { this.AddGroup(poolList, loaded2); } num2 += 1u; } } if (filter.IsFlagSet(GroupFilter.Transport)) { uint num3 = 0u; while ((ulong)num3 < (ulong)((long)PrefabCollection <TransportInfo> .LoadedCount())) { TransportInfo loaded3 = PrefabCollection <TransportInfo> .GetLoaded(num3); if (loaded3 != null && this.IsServiceValid(loaded3) && this.IsPlacementRelevant(loaded3)) { this.AddGroup(poolList, loaded3); } num3 += 1u; } } if (filter.IsFlagSet(GroupFilter.Tree)) { uint num4 = 0u; while ((ulong)num4 < (ulong)((long)PrefabCollection <TreeInfo> .LoadedCount())) { TreeInfo loaded4 = PrefabCollection <TreeInfo> .GetLoaded(num4); if (loaded4 != null && this.IsServiceValid(loaded4) && this.IsPlacementRelevant(loaded4)) { this.AddGroup(poolList, loaded4); } num4 += 1u; } } if (filter.IsFlagSet(GroupFilter.Prop)) { uint num5 = 0u; while ((ulong)num5 < (ulong)((long)PrefabCollection <PropInfo> .LoadedCount())) { PropInfo loaded5 = PrefabCollection <PropInfo> .GetLoaded(num5); if (loaded5 != null && this.IsServiceValid(loaded5) && this.IsPlacementRelevant(loaded5)) { this.AddGroup(poolList, loaded5); } num5 += 1u; } } if (filter.IsFlagSet(GeneratedGroupPanel.GroupFilter.Disaster)) { uint num6 = 0u; while ((ulong)num6 < (ulong)((long)PrefabCollection <DisasterInfo> .LoadedCount())) { DisasterInfo loaded6 = PrefabCollection <DisasterInfo> .GetLoaded(num6); if (loaded6 != null && this.IsPlacementRelevant(loaded6)) { this.AddGroup(poolList, loaded6); } num6 += 1u; } } poolList.Sort(comparison); return(poolList); }
protected virtual void disasterStarting(DisasterInfo disasterInfo) { }
private bool IsPlacementRelevant(DisasterInfo info) { throw new NotImplementedException("IsPlacementRelevant is target of redirection and is not implemented."); }