public Skill(PowerEnum engagedPower, string skillName, int skillPower, int skillSuccessRate)
     : base(skillName)
 {
     this.SuccessRate = skillSuccessRate;
     this.AttackPower = skillPower;
     this.AttackType = engagedPower;
 }
示例#2
0
 public void RefillActivatedSlot(PowerEnum powerType)
 {
     if (ActivatedSlot != null)
     {
         ActivatedSlot.Power = powerType;
     }
 }
示例#3
0
 public Skill(PowerEnum engagedPower, string skillName, int skillPower, int skillSuccessRate)
     : base(skillName)
 {
     this.SuccessRate = skillSuccessRate;
     this.AttackPower = skillPower;
     this.AttackType  = engagedPower;
 }
示例#4
0
 public superheroes(string name, string surname, string heroName, PowerEnum power, string weakness)
 {
     Name     = surname;
     Surname  = surname;
     HeroName = heroName;
     Power    = power;
     Weakness = weakness;
 }
示例#5
0
    /// <summary>
    /// Method to change slot's model
    /// </summary>
    /// <param name="power">Power type</param>
    /// <param name="name">Name of slot - not important at this time</param>
    /// <param name="obj">Object Transform of component which has SlotModelProvider component</param>
    public void ChangeModel(PowerEnum power, string name, Transform obj)
    {
        SlotModelProvider sm = obj.GetComponent <SlotModelProvider>();

        if (sm != null && sm.models.Count > 0)
        {
            Model = sm.models.Where(m => m.power == power && m.name == name).First();
        }
    }
示例#6
0
    /// <summary>
    /// Method to change slot's model
    /// </summary>
    /// <param name="power">Power type</param>
    /// <param name="obj">Object Transform of component which has SlotModelProvider component</param>
    public void ChangeModel(PowerEnum power, Transform obj)
    {
        SlotModelProvider sm = obj.GetComponent <SlotModelProvider>();

        if (sm != null && sm.models.Count > 0)
        {
            Model = sm.models.Where(m => m.power == power).First();
        }
        usingCooldownCounter = 0;
        IsUsing = false;
    }
示例#7
0
        /// <summary>
        /// モード設定の1ブロックの文字列から設定を抽出
        /// </summary>
        /// <param name="modeLines"></param>
        private Mode(List <string> modeLines)
        {
            Name    = ApplicationUtil.ExtractModProperty(modeLines, "#mode");
            Year    = int.Parse(ApplicationUtil.ExtractModProperty(modeLines, "year"));
            Money   = long.Parse(ApplicationUtil.ExtractModProperty(modeLines, "money"));
            Message = ApplicationUtil.ExtractModProperty(modeLines, "message").Replace(',', '\n');
            MYear   = int.Parse(ApplicationUtil.ExtractModProperty(modeLines, "myear"));

            DefautltCompositions = ApplicationUtil.ExtractModProperties(modeLines, "car").Select(value =>
            {
                string[] arr     = value.Split(",");
                int ck           = int.Parse(arr[2]);       //編成規格
                bool isLinear    = (ck & 32) > 0;
                bool isDiesel    = (ck & 16) > 0;
                bool isElectric  = (ck & 8) > 0;
                bool isSteam     = (ck & 4) > 0;
                bool isNarrow    = (ck & 1) > 0;
                bool isRegular   = (ck & 2) > 0;
                bool isPendulum  = (ck & 64) > 0;
                bool isFreeGauge = (ck & 128) > 0;

                RailTypeEnum railType = isLinear ? RailTypeEnum.LinearMotor : RailTypeEnum.Iron;

                CarGaugeEnum?carGauge =
                    isLinear ? (CarGaugeEnum?)null :
                    isNarrow ? CarGaugeEnum.Narrow :
                    isRegular ? CarGaugeEnum.Regular :
                    isFreeGauge ? CarGaugeEnum.FreeGauge :
                    throw new ArgumentException("軌間が未定義です");

                PowerEnum powerSource =
                    isLinear ? PowerEnum.LinearMotor :
                    isElectric ? PowerEnum.Electricity :
                    isDiesel ? PowerEnum.Diesel :
                    isSteam ? PowerEnum.Steam :
                    throw new ArgumentException("動力源が未指定です");

                return(new DefautltComposition
                {
                    Name = arr[0],
                    BestSpeed = int.Parse(arr[1]),
                    CarCount = int.Parse(arr[3]),
                    HeldUnits = int.Parse(arr[4]),
                    Price = int.Parse(arr[5]),
                    seat = LogicUtil.ConvertSeatModToInternalId(int.Parse(arr[6])),
                    Gauge = carGauge,
                    Power = powerSource,
                    Tilt = isPendulum ? CarTiltEnum.Pendulum : CarTiltEnum.None,
                    Type = railType
                });
            }).ToList();
        }
示例#8
0
			/// <summary>
			/// Create exact Power Command
			/// </summary>
			/// <returns>The power command.</returns>
			/// <param name="PowerType">Power type which we want</param>
			public ICommand CreatePowerCommand(PowerEnum PowerType){
				switch(PowerType) {
					case PowerEnum.BubbleJump:
						return new BubbleJumpPowerCommand(_PowerUser);
                    case PowerEnum.SugarBrick:
                        return new SugarBrickPowerCommand(_PowerUser);
                    case PowerEnum.CandySpitter:
                        return new CandySpittingPowerCommand(_PowerUser);
                    default:
                        return new BubbleJumpPowerCommand(_PowerUser);
					//TODO
				}
			}
示例#9
0
    /// <summary>
    /// Add new slot with given power type. First of all, it's looking for already added slot with given powertype.
    /// If there is a none, it adds new, based on slot model.
    /// </summary>
    /// <param name="powerType">Power type</param>
    public void AddSlot(PowerEnum powerType)
    {
        var slot = FindSlotByPower(powerType);

        if (slot == null)
        {
            slot = ((GameObject)Instantiate(slotPrefab)).GetComponent <Slot>();
            slot.transform.parent = this.transform;
            Slots.Add(slot);
            _addedNewSlot = true;
            slot.ChangeModel(powerType, transform);
        }
        slot.IsFull = true;
    }
示例#10
0
        /// <summary>
        /// Create exact Power Command
        /// </summary>
        /// <returns>The power command.</returns>
        /// <param name="PowerType">Power type which we want</param>
        public ICommand CreatePowerCommand(PowerEnum PowerType)
        {
            switch (PowerType)
            {
            case PowerEnum.BubbleJump:
                return(new BubbleJumpPowerCommand(_PowerUser));

            case PowerEnum.SugarBrick:
                return(new SugarBrickPowerCommand(_PowerUser));

            case PowerEnum.CandySpitter:
                return(new CandySpittingPowerCommand(_PowerUser));

            default:
                return(new BubbleJumpPowerCommand(_PowerUser));
                //TODO
            }
        }
示例#11
0
        public string PowerMapper(PowerEnum powerEnum)
        {
            switch (powerEnum)
            {
            case PowerEnum.None:
                return(VibrationIDFlag.VibrationPower.None);

            case PowerEnum.Weak:
                return(VibrationIDFlag.VibrationPower.Weak);

            case PowerEnum.Normal:
                return(VibrationIDFlag.VibrationPower.Normal);

            case PowerEnum.Strong:
                return(VibrationIDFlag.VibrationPower.Strong);
            }

            return(VibrationIDFlag.VibrationPower.None);
        }
示例#12
0
        /// <summary>
        /// 車両開発
        /// </summary>
        /// <param name="name"></param>
        /// <param name="bestSpeed"></param>
        /// <param name="power"></param>
        /// <param name="gauge"></param>
        /// <param name="seat"></param>
        /// <param name="tilt"></param>
        public void DevelopVehicle(string name, int bestSpeed, PowerEnum power, CarGaugeEnum gauge, SeatEnum seat, CarTiltEnum tilt)
        {
            (bool can, _) = CheckCreateVehicle(name, bestSpeed, power, gauge, seat, tilt);

            if (!can)
            {
                throw new InvalidOperationException("車両を開発可能な技術が揃っていません");
            }

            SpendMoney(CalcDevelopVehicleCost(bestSpeed, power, gauge, seat, tilt));

            vehicles.Add(new Car
            {
                Name      = name,
                bestSpeed = bestSpeed,
                power     = power,
                gauge     = gauge,
                seat      = seat,
                carTilt   = tilt,
                type      = power == PowerEnum.LinearMotor ? RailTypeEnum.LinearMotor : RailTypeEnum.Iron,
                money     = CalcPurchaseVehicleCost(bestSpeed, power, gauge, seat, tilt),
            });
        }
示例#13
0
 public void RefillActivatedSlot(PowerEnum powerType) {
     if (ActivatedSlot != null) {
         ActivatedSlot.Power = powerType;
     }
 }
示例#14
0
 public human(string name, string surname, string heroName, string weakness, PowerEnum power, string acquisition) //wAy = what are you
     : base(name, surname, heroName, power, weakness)
 {
     Acquisition = acquisition;
 }
示例#15
0
    void UsePower(PowerEnum PowerType)
    {
        ICommand PowerCommand = pcf.CreatePowerCommand(PowerType);

        PowerCommand.Execute();
    }
示例#16
0
 public Mutant(string name, string surname, string heroName, string weakness, PowerEnum power, string withOrNotXmen) //wAy = what are you
     : base(name, surname, heroName, power, weakness)
 {
     WithOrNotXmen = withOrNotXmen;
 }
示例#17
0
文件: Slot.cs 项目: Nitwoe/Nommy
    /// <summary>
    /// Method to change slot's model
    /// </summary>
    /// <param name="power">Power type</param>
    /// <param name="name">Name of slot - not important at this time</param>
    /// <param name="obj">Object Transform of component which has SlotModelProvider component</param>
    public void ChangeModel(PowerEnum power, string name, Transform obj) {
        SlotModelProvider sm = obj.GetComponent<SlotModelProvider>();
        if (sm != null && sm.models.Count > 0) {
            Model = sm.models.Where(m => m.power == power && m.name == name).First();

        }
    }
示例#18
0
    private Slot FindSlotByPower(PowerEnum powerType)
    {
        var slot = Slots.Where(s => s.Power == powerType).FirstOrDefault();

        return(slot);
    }
示例#19
0
 public SpecialPower(PowerEnum attackType, string name, int price, int attackPower, int successRate)
     : base(attackType, name, attackPower, successRate)
 {
     this.Price = price;
 }
示例#20
0
    void UsePower(PowerEnum PowerType) {
        ICommand PowerCommand = pcf.CreatePowerCommand(PowerType);

        PowerCommand.Execute();
    }
示例#21
0
文件: Hit.cs 项目: amelia77/NinjaRPG
 public Hit(int hitPower, PowerEnum hitType)
     : this(hitPower)
 {
     this.Type = hitType;
 }
示例#22
0
        /// <summary>
        /// 指定の車両が開発可能か
        /// </summary>
        /// <returns>開発可否 メッセージ</returns>
        public (bool CanCreateVehicle, string msg) CheckCreateVehicle(string Name, int BestSpeed, PowerEnum Power, CarGaugeEnum Gauge, SeatEnum Seat, CarTiltEnum tilt)
        {
            if (string.IsNullOrWhiteSpace(Name))
            {
                return(false, "名無しの権兵衛です");
            }

            if (Power == PowerEnum.LinearMotor)
            {
                if (genkaiLinear == 0)
                {
                    return(false, "リニアは作れません");
                }
                else if (BestSpeed > genkaiLinear)
                {
                    return(false, "速すぎます");
                }
            }

            if (Gauge == CarGaugeEnum.FreeGauge && !isDevelopedFreeGauge)
            {
                return(false, "フリーゲージは作れません");
            }

            if (Power == PowerEnum.Steam)
            {
                if (!IsSteamAvailable())
                {
                    return(false, "時代遅れです");
                }
                if (BestSpeed > genkaiJoki)
                {
                    return(false, "速すぎます");
                }
            }

            if (Power == PowerEnum.Electricity)
            {
                if (genkaiDenki == 0)
                {
                    return(false, "電車は作れません");
                }
                else if (BestSpeed > genkaiDenki)
                {
                    return(false, "速すぎます");
                }
            }

            if (Power == PowerEnum.Diesel)
            {
                if (genkaiKidosha == 0)
                {
                    return(false, "ディーゼルは作れません");
                }
                else if (BestSpeed > genkaiKidosha)
                {
                    return(false, "速すぎます");
                }
            }

            if (Seat == SeatEnum.Dual && !isDevelopedDualSeat)
            {
                return(false, "デュアル不可");
            }
            if (Seat == SeatEnum.Convertible && !isDevelopedConvertibleCross)
            {
                return(false, "転換式クロス不可");
            }
            if (Seat == SeatEnum.RetructableLong && !isDevelopedRetructableLong)
            {
                return(false, "収納式ロング不可");
            }
            if (Seat == SeatEnum.Rich && !isDevelopedRichCross)
            {
                return(false, "豪華クロス不可");
            }
            if (Seat == SeatEnum.DoubleDeckerRich && !isDevelopedRichCross)
            {
                return(false, "豪華クロス不可");
            }

            switch (tilt)
            {
            case CarTiltEnum.Pendulum:
                if (!isDevelopedCarTiltPendulum)
                {
                    return(false, "振り子式車体傾斜装置は未開発");
                }
                break;

            case CarTiltEnum.SimpleMecha:
            case CarTiltEnum.HighMecha:
                if (!isDevelopedMachineTilt)
                {
                    return(false, "機械式式車体傾斜装置は未開発");
                }
                break;
            }

            return(true, "");
        }
示例#23
0
 /// <summary>
 /// Add new slot with given power type. First of all, it's looking for already added slot with given powertype.
 /// If there is a none, it adds new, based on slot model.
 /// </summary>
 /// <param name="powerType">Power type</param>
 public void AddSlot(PowerEnum powerType) {
     var slot = FindSlotByPower(powerType);
     if (slot == null) {
         slot = ((GameObject)Instantiate(slotPrefab)).GetComponent<Slot>();
         slot.transform.parent = this.transform;
         Slots.Add(slot);
         _addedNewSlot = true;
         slot.ChangeModel(powerType,transform);
     }
     slot.IsFull = true;
     
 }
示例#24
0
        /// <summary>
        /// 車両購入コスト計算
        /// </summary>
        /// <param name="bestSpeed"></param>
        /// <param name="power"></param>
        /// <param name="gauge"></param>
        /// <param name="seat"></param>
        /// <param name="tilt"></param>
        /// <param name="genkaiLinear"></param>
        /// <param name="genkaiJoki"></param>
        /// <param name="genkaiDenki"></param>
        /// <param name="genkaiKidosha"></param>
        /// <returns></returns>
        public static int CalcPurchaseCarCost(int bestSpeed, PowerEnum power, CarGaugeEnum gauge, SeatEnum seat, CarTiltEnum tilt,
                                              int genkaiLinear, int genkaiJoki, int genkaiDenki, int genkaiKidosha)
        {
            // 8*速度^2
            int cost = 8 * bestSpeed * bestSpeed;

            if (power == PowerEnum.LinearMotor)
            {
                cost = cost * 6 / 5 / genkaiLinear;
            }                                                                                       //リニア
            else
            {
                if (gauge == CarGaugeEnum.Regular || gauge == CarGaugeEnum.FreeGauge)
                {
                    cost = cost * 3 / 2;
                }                                                                                                              //標準軌orフリーゲージ
                if (power == PowerEnum.Steam)
                {
                    cost = cost * 6 / 5 / genkaiJoki;
                }                                                                                   //蒸気
                if (power == PowerEnum.Electricity)
                {
                    cost /= genkaiDenki;
                }                                                                            //電車
                if (power == PowerEnum.Diesel)
                {
                    cost /= genkaiKidosha;
                }                                                                         //ディーゼル
            }
            switch (tilt)
            {
            case CarTiltEnum.Pendulum:
                cost = cost * 6 / 5;
                break;

            case CarTiltEnum.SimpleMecha:
                cost = cost * 11 / 10;
                break;

            case CarTiltEnum.HighMecha:
                cost = cost * 6 / 5;
                break;
            }
            cost += 500;

            //シート別
            switch (seat)
            {
            case SeatEnum.None:
            case SeatEnum.Dual:
                cost += 100;
                break;

            case SeatEnum.RetructableLong:
                cost += 50;
                break;

            case SeatEnum.Long:
            case SeatEnum.Semi:
            case SeatEnum.Convertible:
                cost += 150;
                break;

            case SeatEnum.DoubleDeckerRotatable:
            case SeatEnum.DoubleDeckerRich:
                cost = cost * 4 / 3;
                break;
            }

            return(cost);
        }
示例#25
0
文件: Slot.cs 项目: Nitwoe/Nommy
    /// <summary>
    /// Method to change slot's model
    /// </summary>
    /// <param name="power">Power type</param>
    /// <param name="obj">Object Transform of component which has SlotModelProvider component</param>
    public void ChangeModel(PowerEnum power, Transform obj) {
        SlotModelProvider sm = obj.GetComponent<SlotModelProvider>();
        if (sm != null && sm.models.Count > 0) {
            Model = sm.models.Where(m => m.power == power).First();

        }
        usingCooldownCounter = 0;
        IsUsing = false;
    }
示例#26
0
 private Slot FindSlotByPower(PowerEnum powerType) {
     var slot = Slots.Where(s => s.Power == powerType).FirstOrDefault();
     return slot;
 }
示例#27
0
 public Hit(int hitPower, PowerEnum hitType)
     : this(hitPower)
 {
     this.Type = hitType;
 }
示例#28
0
 public Alien(string name, string surname, string heroName, string weakness, PowerEnum power, PlanetEnum planet) //wAy = what are you
     : base(name, surname, heroName, power, weakness)
 {
     Weakness = weakness;
     Planet   = planet;
 }
 public SpecialPower(PowerEnum attackType, string name, int price, int attackPower, int successRate)
     : base(attackType, name, attackPower, successRate)
 {
     this.Price = price;
 }
示例#30
0
        /// <summary>
        /// モード設定文字列からモードオブジェクト作成
        /// </summary>
        /// <param name="modeLines"></param>
        /// <returns></returns>
        private static Mode CreateMode(List <string> modeLines)
        {
            Mode mode = new Mode();

            //ゲーム設定
            mode.Name          = ExtractModProperty(modeLines, "#mode");
            mode.Year          = int.Parse(ExtractModProperty(modeLines, "year"));
            mode.Money         = long.Parse(ExtractModProperty(modeLines, "money"));
            mode.Message       = ExtractModProperty(modeLines, "message").Replace(',', '\n');
            mode.MYear         = int.Parse(ExtractModProperty(modeLines, "myear"));
            mode.genkaiJoki    = ParseIntOrNull(ExtractModProperty(modeLines, "steam")) ?? 40;
            mode.genkaiDenki   = ParseIntOrNull(ExtractModProperty(modeLines, "elect"));
            mode.genkaiKidosha = ParseIntOrNull(ExtractModProperty(modeLines, "diesel"));
            mode.genkaiLinear  = ParseIntOrNull(ExtractModProperty(modeLines, "linear"));
            var tecno = ParseIntOrNull(ExtractModProperty(modeLines, "tecno"));

            if (tecno.HasValue)
            {
                int tecnoV = tecno.Value;
                if ((tecnoV & 256) > 0)                 //動的信号
                {
                    mode.isDevelopedDynamicSignal    = true;
                    mode.isDevelopedFreeGauge        = true;
                    mode.isDevelopedMachineTilt      = true;
                    mode.isDevelopedDualSeat         = true;
                    mode.isDevelopedRetructableLong  = true;
                    mode.isDevelopedRichCross        = true;
                    mode.isDevelopedCarTiltPendulum  = true;
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 4) > 0)                 //フリーゲージトレイン
                {
                    mode.isDevelopedFreeGauge        = true;
                    mode.isDevelopedMachineTilt      = true;
                    mode.isDevelopedDualSeat         = true;
                    mode.isDevelopedRetructableLong  = true;
                    mode.isDevelopedRichCross        = true;
                    mode.isDevelopedCarTiltPendulum  = true;
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 512) > 0)                 //機械式車体傾斜装置
                {
                    mode.isDevelopedMachineTilt      = true;
                    mode.isDevelopedDualSeat         = true;
                    mode.isDevelopedRetructableLong  = true;
                    mode.isDevelopedRichCross        = true;
                    mode.isDevelopedCarTiltPendulum  = true;
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 8) > 0)                 //デュアルシート
                {
                    mode.isDevelopedDualSeat         = true;
                    mode.isDevelopedRetructableLong  = true;
                    mode.isDevelopedRichCross        = true;
                    mode.isDevelopedCarTiltPendulum  = true;
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 32) > 0)                 //収納式ロングシート
                {
                    mode.isDevelopedRetructableLong  = true;
                    mode.isDevelopedRichCross        = true;
                    mode.isDevelopedCarTiltPendulum  = true;
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 16) > 0)                 //豪華クロスシート
                {
                    mode.isDevelopedRichCross        = true;
                    mode.isDevelopedCarTiltPendulum  = true;
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 1) > 0)                 //振り子式車体傾斜装置
                {
                    mode.isDevelopedCarTiltPendulum  = true;
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 128) > 0)                 //自動改札機
                {
                    mode.isDevelopedAutoGate         = true;
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 64) > 0)                 //転換クロスシート
                {
                    mode.isDevelopedConvertibleCross = true;
                    mode.isDevelopedBlockingSignal   = true;
                }
                else if ((tecnoV & 2) > 0)                 //閉塞信号
                {
                    mode.isDevelopedBlockingSignal = true;
                }
            }
            int[] people = ExtractModProperty(modeLines, "people")?.Split(",").Select(it => int.Parse(it)).Take(2).ToArray() ?? new int[] { 1, 1 };
            if (people.Count() == 2)
            {
                mode.peopleNume  = people[0];
                mode.peopleDenom = people[1];
            }


            //デフォルト編成
            mode.DefautltCompositions = ExtractModProperties(modeLines, "car").Select(value =>
            {
                string[] arr     = value.Split(",");
                int ck           = int.Parse(arr[2]);       //編成規格
                bool isLinear    = (ck & 32) > 0;
                bool isDiesel    = (ck & 16) > 0;
                bool isElectric  = (ck & 8) > 0;
                bool isSteam     = (ck & 4) > 0;
                bool isNarrow    = (ck & 1) > 0;
                bool isRegular   = (ck & 2) > 0;
                bool isPendulum  = (ck & 64) > 0;
                bool isFreeGauge = (ck & 128) > 0;

                RailTypeEnum railType = isLinear ? RailTypeEnum.LinearMotor : RailTypeEnum.Iron;

                CarGaugeEnum?carGauge =
                    isLinear ? (CarGaugeEnum?)null :
                    isNarrow ? CarGaugeEnum.Narrow :
                    isRegular ? CarGaugeEnum.Regular :
                    isFreeGauge ? CarGaugeEnum.FreeGauge :
                    throw new ArgumentException("軌間が未定義です");

                PowerEnum powerSource =
                    isLinear ? PowerEnum.LinearMotor :
                    isElectric ? PowerEnum.Electricity :
                    isDiesel ? PowerEnum.Diesel :
                    isSteam ? PowerEnum.Steam :
                    throw new ArgumentException("動力源が未指定です");

                return(new DefautltComposition
                {
                    Name = arr[0],
                    BestSpeed = int.Parse(arr[1]),
                    CarCount = int.Parse(arr[3]),
                    HeldUnits = int.Parse(arr[4]),
                    Price = int.Parse(arr[5]),
                    seat = LogicUtil.ConvertSeatModToInternalId(int.Parse(arr[6])),
                    Gauge = carGauge,
                    Power = powerSource,
                    Tilt = isPendulum ? CarTiltEnum.Pendulum : CarTiltEnum.None,
                    Type = railType
                });
            }).ToList();

            //路線
            List <LineDefaultSetting> lineDefaultSettings = new List <LineDefaultSetting>();

            bool[] ltn  = ExtractModProperty(modeLines, "ltn")?.Split(",").Select(flg => int.Parse(flg) != 0).ToArray() ?? new bool[0];
            int[]  lk   = ExtractModProperty(modeLines, "lk")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? new int[ltn.Length];
            int[]  lbs  = ExtractModProperty(modeLines, "lbs")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? new int[ltn.Length];
            int[]  las  = ExtractModProperty(modeLines, "las")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? new int[ltn.Length];
            int[]  lwe  = ExtractModProperty(modeLines, "lwe")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? Enumerable.Repeat(GameConstants.RetentionRateDefault, ltn.Length).ToArray();
            int[]  lts  = ExtractModProperty(modeLines, "lts")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? new int[ltn.Length];
            int[]  ulc  = ExtractModProperty(modeLines, "ulc")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? null;
            int[]  ulcr = ExtractModProperty(modeLines, "ulcr")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? new int[ltn.Length];
            for (int i = 0; i < ltn.Length; i++)
            {
                LineDefaultSetting setting = new LineDefaultSetting();

                setting.IsExist = ltn[i];
                if (setting.IsExist)
                {
                    if (i < lk.Length)
                    {
                        setting.Type          = (lk[i] & 4) > 0 ? RailTypeEnum.LinearMotor : RailTypeEnum.Iron;
                        setting.gauge         = (lk[i] & 1) > 0 ? RailGaugeEnum.Regular : RailGaugeEnum.Narrow;
                        setting.IsElectrified = (lk[i] & 2) > 0;
                    }
                    if (i < lbs.Length)
                    {
                        setting.bestSpeed = lbs[i];
                    }
                    if (i < las.Length)
                    {
                        setting.LaneNum = las[i];
                    }
                    if (i < lwe.Length)
                    {
                        setting.retentionRate = lwe[i];
                    }
                    if (i < lts.Length)
                    {
                        setting.taihisen = (TaihisenEnum)lts[i];
                    }
                    if (ulc != null)
                    {
                        setting.useComposition = mode.DefautltCompositions[ulc[i] - 1];
                    }
                    if (i < ulcr.Length)
                    {
                        setting.runningPerDay = ulcr[i];
                    }
                }
                lineDefaultSettings.Add(setting);
            }
            mode.LineSettings = lineDefaultSettings;

            //運行系統
            List <KeitoDefaultSetting> keitoDefaultSettings = new List <KeitoDefaultSetting>();

            int[] udc  = ExtractModProperty(modeLines, "udc")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? new int[0];
            int[] udcr = ExtractModProperty(modeLines, "udcr")?.Split(",").Select(value => int.Parse(value)).ToArray() ?? new int[udc.Length];
            for (int i = 0; i < udc.Length; i++)
            {
                KeitoDefaultSetting setting = new KeitoDefaultSetting()
                {
                    useComposition = mode.DefautltCompositions[udc[i] - 1],
                    runningPerDay  = udcr[i]
                };
                keitoDefaultSettings.Add(setting);
            }
            mode.KeitoDefaultSettings = keitoDefaultSettings;

            //目標
            mode.goalLineMake    = (LineGoalTargetEnum?)ParseIntOrNull(ExtractModProperty(modeLines, "mmake"));
            mode.goalTechDevelop = ExtractModProperties(modeLines, "mtec").ToDictionary(
                value => (PowerEnum)(int.Parse(value.Split(",")[0]) - 1),
                value => int.Parse(value.Split(",")[1]));
            string[] mlbsValues = ExtractModProperty(modeLines, "mlbs")?.Split(",") ?? null;
            if (mlbsValues != null)
            {
                mode.goalLineBestSpeed = ((LineGoalTargetEnum?)ParseIntOrNull(mlbsValues[0]), int.Parse(mlbsValues[1]));
            }
            string[] mmanegeValues = ExtractModProperty(modeLines, "mmanage")?.Split(",") ?? null;
            if (mmanegeValues != null)
            {
                mode.goalLineManage = (LineGoalTargetEnum?)ParseIntOrNull(mmanegeValues[0]);
            }
            mode.goalMoney    = ParseIntOrNull(ExtractModProperty(modeLines, "mmoney"));
            mode.gameoverYear = int.Parse(ExtractModProperty(modeLines, "myear"));

            return(mode);
        }