diff --git a/client/assets/styles/styles.css b/client/assets/styles/styles.css
index 4c3ac69c..5eae445b 100644
--- a/client/assets/styles/styles.css
+++ b/client/assets/styles/styles.css
@@ -259,6 +259,7 @@ button[disabled] {
.blue {
color: #3498db;
stroke: #3498db;
+ stroke-linecap: round;
}
.yellow {
diff --git a/client/src/animations.test.jsx b/client/src/animations.test.jsx
index 62b9b833..203e3976 100644
--- a/client/src/animations.test.jsx
+++ b/client/src/animations.test.jsx
@@ -92,7 +92,6 @@ const SKILLS = [
'HasteI',
'HasteStrike',
'HealI',
- 'HexI',
'HybridBlast',
'HybridI',
'InterceptI',
diff --git a/client/src/components/animations.jsx b/client/src/components/animations.jsx
index eb9d4084..c437041b 100644
--- a/client/src/components/animations.jsx
+++ b/client/src/components/animations.jsx
@@ -26,6 +26,7 @@ const Intercept = require('./anims/intercept');
const Invert = require('./anims/invert');
const Link = require('./anims/link');
const Purify = require('./anims/purify');
+const Purge = require('./anims/purge');
const Recharge = require('./anims/recharge');
const Refl = require('./anims/reflect');
const Restrict = require('./anims/restrict');
@@ -136,7 +137,7 @@ function animations(props) {
case 'Decay': return ;
case 'DecayTick': return ;
case 'Invert': return ;
- case 'Purge': return false;
+ case 'Purge': return ;
case 'Silence': return ;
case 'Restrict': return ;
diff --git a/client/src/components/anims/link.jsx b/client/src/components/anims/link.jsx
index d747f60e..dc9e7ec9 100644
--- a/client/src/components/anims/link.jsx
+++ b/client/src/components/anims/link.jsx
@@ -28,7 +28,19 @@ class Link extends Component {
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+
+ componentDidMount() {
+ this.animations.push(anime({
+ targets: ['#purge'],
+ opacity: [
+ { value: 1, delay: TIMES.TARGET_DELAY_MS, duration: TIMES.TARGET_DURATION_MS * 0.2 },
+ { value: 0, delay: TIMES.TARGET_DURATION_MS * 0.6, duration: TIMES.TARGET_DURATION_MS * 0.2 },
+ ],
+ easing: 'easeInOutSine',
+ }));
+
+ this.animations.push(anime({
+ targets: ['#purge g'],
+ strokeWidth: [15, 0],
+ delay: TIMES.TARGET_DELAY_MS,
+ duration: TIMES.TARGET_DURATION_MS,
+ easing: 'easeInSine',
+ }));
+
+ this.animations.push(anime({
+ targets: ['#purgeFilter'],
+ stdDeviation: 20,
+ duration: TIMES.TARGET_DURATION_MS,
+ easing: 'easeInOutSine',
+ }));
+ }
+
+ // this is necessary because
+ // skipping / timing / unmounting race conditions
+ // can cause the animations to cut short, this will ensure the values are reset
+ // because preact will recycle all these components
+ componentWillUnmount() {
+ for (let i = this.animations.length - 1; i >= 0; i--) {
+ this.animations[i].reset();
+ }
+ }
+}
+
+module.exports = Purge;
diff --git a/client/src/components/anims/ruin.jsx b/client/src/components/anims/ruin.jsx
index 36afdbc1..fd365cab 100644
--- a/client/src/components/anims/ruin.jsx
+++ b/client/src/components/anims/ruin.jsx
@@ -47,6 +47,21 @@ class Ruin extends Component {
style="opacity: 0.5"
/>
+
+
+
+
+
);
}
diff --git a/server/src/skill.rs b/server/src/skill.rs
index 5a24f4ff..5fa29ca8 100644
--- a/server/src/skill.rs
+++ b/server/src/skill.rs
@@ -1655,6 +1655,7 @@ fn silence(source: &mut Construct, target: &mut Construct, mut results: Resoluti
}
fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
+ results.push(Resolution::new(source, target).event(Event::Skill { skill }));
while let Some(i) = target.effects
.iter()
.position(|ce| {