wayfinder 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/wayfinder.rb +17 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f4ae19a061f6b7caa1502c21c1a03bc914116ef
|
4
|
+
data.tar.gz: c68e89030487cecd9cd16f8be4ebe8c8c9bb2521
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b372f56c23fb34e78019eb2d63d3e1188a1f32aaf139eb06c0c03cafb066aa12ea31610948d24c6d8730e0ada426357d8c12f0038fc94ebf024a2c8f7329883
|
7
|
+
data.tar.gz: e0166635e52514241f0b11643ea1e930e0d26d243a7232de248d055e55476ce698aac11e7875a5419a10f1d28dffaad379deb66e9b85738a78d11ab0e1223e96
|
data/lib/wayfinder.rb
CHANGED
@@ -44,7 +44,6 @@ module Wayfinder
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
47
|
## Returns an array of items in the modifier stack marked with 'active: true'
|
49
48
|
def active_stack
|
50
49
|
self.modifier_stack.map(&:values).flatten.keep_if { |item| item['active'] }
|
@@ -52,14 +51,29 @@ module Wayfinder
|
|
52
51
|
|
53
52
|
## Returns an array of object who affect the specified attribute
|
54
53
|
def stack_for(attribute)
|
55
|
-
|
54
|
+
# Bonuses of the same type do not stack, we need to pick the biggest one and use that one.
|
55
|
+
applicable_stack = []
|
56
|
+
|
57
|
+
self.active_stack.keep_if { |item|
|
58
|
+
# We care about the attributes each modifier affects.
|
56
59
|
item.fetch('modifiers', {}).keys.include?(attribute)
|
60
|
+
}.group_by { |mod| mod['type'] }.each do |type, mods|
|
61
|
+
if type
|
62
|
+
# We take the highest modifier of each type
|
63
|
+
applicable_stack << mods.sort_by { |mod| mod.fetch('modifiers', {}).fetch(attribute, 0) }.reverse.first
|
64
|
+
else
|
65
|
+
# Modifiers without a type are simply added to the stack.
|
66
|
+
applicable_stack += mods
|
67
|
+
end
|
57
68
|
end
|
69
|
+
|
70
|
+
applicable_stack
|
58
71
|
end
|
59
72
|
|
60
73
|
## Outputs the final modifier for the specified attribute.
|
61
74
|
def modifier_for(attribute)
|
62
75
|
modifier = 0
|
76
|
+
|
63
77
|
stack_for(attribute).each do |mod|
|
64
78
|
modifier += mod.fetch('modifiers', {}).fetch(attribute, 0)
|
65
79
|
end
|
@@ -159,7 +173,7 @@ module Wayfinder
|
|
159
173
|
|
160
174
|
def skill(skill_name)
|
161
175
|
skill = self.source[:skills].fetch(skill_name, {})
|
162
|
-
computed_score = skill.fetch('ranks', 0) + self.send("#{ skill['stat'] }_modifier") + modifier_for(skill_name)
|
176
|
+
computed_score = skill.fetch('ranks', 0) + self.send("#{ skill['stat'] }_modifier") + modifier_for(skill_name) + modifier_for('all_skills')
|
163
177
|
|
164
178
|
if skill['class']
|
165
179
|
computed_score += 3
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wayfinder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PoTe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: box
|