From 62bcf526325fd901131d8314059d0a0ebd8f1147 Mon Sep 17 00:00:00 2001
From: Ny Bruker <robinhs@stud.ntnu.no>
Date: Fri, 14 Oct 2022 18:06:45 +0200
Subject: [PATCH] Added dodge ability.

---
 .../Code/Core/Abilities/AbilityDodge.cs       | 51 +++++++++++++++++++
 .../Code/Core/Abilities/AbilityDodge.cs.meta  | 11 ++++
 2 files changed, 62 insertions(+)
 create mode 100644 MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
 create mode 100644 MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs.meta

diff --git a/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
new file mode 100644
index 00000000..6e2cccff
--- /dev/null
+++ b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
@@ -0,0 +1,51 @@
+using System.Collections;
+using System;
+using System.Collections.Generic;
+
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+using BigSock.Service;
+
+namespace BigSock {
+
+	/*
+		A basic dodge move that gives a push and a short invincibility.
+	*/
+	public class AbilityDodge : BaseAbility {
+		public static readonly float BASE_FORCE = 0.5f;
+		public static readonly TimeSpan IFRAME_DURATION = new TimeSpan(0, 0, 0, 0, 500);
+		
+		public override ulong Id => 201;
+		public override string Name => "Dodge";
+		public override string Description => "A basic dodge move.";
+
+		public AbilityDodge() {
+			StaminaCost = 4;
+			Cooldown = new TimeSpan(0, 0, 0, 1, 0);
+		}
+
+		/*
+			Activates the ability.
+		*/
+		protected override bool Activate(Character actor, Vector3? target) {
+			if(target == null) return false;
+
+			// Get direction.
+			var temp = (target.Value - actor.transform.position);
+			temp.z = 0;
+			var direction = (Vector2) temp.normalized;
+
+			// Get the force.
+			var force = BASE_FORCE * actor.Stats.MoveSpeed;
+
+			// Apply the push and iframes.
+			actor.KnockBack(force, direction);
+			actor.AddStatusEffect(StatusEffectType.Invincible, IFRAME_DURATION);
+
+			return true;
+		}
+
+	}
+
+}
\ No newline at end of file
diff --git a/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs.meta b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs.meta
new file mode 100644
index 00000000..e4b53ef2
--- /dev/null
+++ b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c7c0fcb77471bc0469856ad6f91803c5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
-- 
GitLab