-
Notifications
You must be signed in to change notification settings - Fork 48
/
RuneCostSheet.cs
87 lines (74 loc) · 2.43 KB
/
RuneCostSheet.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.Linq;
namespace Nekoyume.TableData
{
using static TableExtensions;
[Serializable]
public class RuneCostSheet : Sheet<int, RuneCostSheet.Row>
{
[Serializable]
public class RuneCostData
{
public int Level { get; }
public int RuneStoneQuantity { get; }
public int CrystalQuantity { get; }
public int NcgQuantity { get; }
public int LevelUpSuccessRate { get; }
public RuneCostData(
int level,
int runeStoneQuantity,
int crystalQuantity,
int ncgQuantity,
int levelUpSuccessRate)
{
Level = level;
RuneStoneQuantity = runeStoneQuantity;
CrystalQuantity = crystalQuantity;
NcgQuantity = ncgQuantity;
LevelUpSuccessRate = levelUpSuccessRate;
}
}
[Serializable]
public class Row : SheetRow<int>
{
public override int Key => RuneId;
public int RuneId { get; private set; }
public List<RuneCostData> Cost { get; private set; }
public override void Set(IReadOnlyList<string> fields)
{
RuneId = ParseInt(fields[0]);
var level = ParseInt(fields[1]);
var runeStoneQuantity = ParseInt(fields[2]);
var crystal = ParseInt(fields[3]);
var ncg = ParseInt(fields[4]);
var successRate = ParseInt(fields[5]);
Cost = new List<RuneCostData>
{
new RuneCostData(level, runeStoneQuantity, crystal, ncg, successRate)
};
}
public bool TryGetCost(int level, out RuneCostData costData)
{
costData = Cost.FirstOrDefault(x => x.Level.Equals(level));
return !(costData is null);
}
}
public RuneCostSheet() : base(nameof(RuneCostSheet))
{
}
protected override void AddRow(int key, Row value)
{
if (!TryGetValue(key, out var row))
{
Add(key, value);
return;
}
if (!value.Cost.Any())
{
return;
}
row.Cost.Add(value.Cost[0]);
}
}
}