Пример #1
0
        /// <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);
        }
Пример #2
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);
            }
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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;
        }
Пример #5
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;
                    }
                }
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
    public DisasterInfo GetInfo(DisasterType type)
    {
        DisasterInfo info = null;

        if (DisasterInfos.TryGetValue(type, out info))
        {
            return(info);
        }
        return(null);
    }
Пример #9
0
        /// <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;
        }
Пример #10
0
        /// <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;
                }
            }
        }
Пример #11
0
        /// <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);
        }
Пример #12
0
        /// <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);
     }
 }
Пример #14
0
        /// <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));
        }
Пример #16
0
        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*/
            ;
        }
Пример #17
0
        /// <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);
        }
Пример #18
0
        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);
            }
        }
Пример #19
0
        /// <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);
            }
        }
Пример #21
0
        /// <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);
        }
Пример #22
0
        /// <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;
            }
        }
Пример #23
0
        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);
        }
Пример #27
0
        /// <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;
                }
            }
        }
Пример #28
0
        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)
 {
 }
Пример #30
0
 private bool IsPlacementRelevant(DisasterInfo info)
 {
     throw new NotImplementedException("IsPlacementRelevant is target of redirection and is not implemented.");
 }