- // time = basetime + sum(feature here * feature in MaterialProperties)
- float basetime;
- float dt_weight;
- float dt_crackiness;
- float dt_crumbliness;
- float dt_cuttability;
- float basedurability;
- float dd_weight;
- float dd_crackiness;
- float dd_crumbliness;
- float dd_cuttability;
-
- ToolDiggingProperties(float a=0.75, float b=0, float c=0, float d=0, float e=0,
- float f=50, float g=0, float h=0, float i=0, float j=0):
- basetime(a),
- dt_weight(b),
- dt_crackiness(c),
- dt_crumbliness(d),
- dt_cuttability(e),
- basedurability(f),
- dd_weight(g),
- dd_crackiness(h),
- dd_crumbliness(i),
- dd_cuttability(j)
+ std::unordered_map<int, float> times;
+ int maxlevel = 1;
+ int uses = 20;
+
+ ToolGroupCap() {}
+
+ bool getTime(int rating, float *time) const
+ {
+ std::unordered_map<int, float>::const_iterator i = times.find(rating);
+ if (i == times.end()) {
+ *time = 0;
+ return false;
+ }
+ *time = i->second;
+ return true;
+ }
+};
+
+
+typedef std::unordered_map<std::string, struct ToolGroupCap> ToolGCMap;
+typedef std::unordered_map<std::string, s16> DamageGroup;
+
+struct ToolCapabilities
+{
+ float full_punch_interval;
+ int max_drop_level;
+ ToolGCMap groupcaps;
+ DamageGroup damageGroups;
+
+ ToolCapabilities(
+ float full_punch_interval_=1.4,
+ int max_drop_level_=1,
+ const ToolGCMap &groupcaps_ = ToolGCMap(),
+ const DamageGroup &damageGroups_ = DamageGroup()
+ ):
+ full_punch_interval(full_punch_interval_),
+ max_drop_level(max_drop_level_),
+ groupcaps(groupcaps_),
+ damageGroups(damageGroups_)