Skip to content
Snippets Groups Projects
Commit dc283f99 authored by Robin Halseth Sandvik's avatar Robin Halseth Sandvik
Browse files

Merge branch 'master' into 'main'

Moving to new damage handling system.

See merge request !13
parents cda2101e d54c558f
No related branches found
No related tags found
2 merge requests!14Main,!13Moving to new damage handling system.
...@@ -11,48 +11,49 @@ namespace BigSock { ...@@ -11,48 +11,49 @@ namespace BigSock {
/* /*
Attack speed of the character. Attack speed of the character.
*/ */
public double AttackSpeed => baseAttackSpeed; public float AttackSpeed => baseAttackSpeed;
public double baseAttackSpeed = 1; public float baseAttackSpeed = 1;
/* /*
Cooldown between attacks. Cooldown between attacks.
*/ */
public double AttackCooldown => 1.0 / AttackSpeed; public float AttackCooldown => 1.0f / AttackSpeed;
/* /*
Movement speed of the character. Movement speed of the character.
*/ */
public double MovementSpeed => baseMovementSpeed; public float MovementSpeed => baseMovementSpeed;
public double baseMovementSpeed = 1; public float baseMovementSpeed = 1;
/* /*
Damage of the character. Damage of the character.
*/ */
public double Damage => baseDamage; public float Damage => baseDamage;
public double baseDamage = 1; public float baseDamage = 1;
/* /*
Knockback force Knockback force
*/ */
public float KnockbackForce = 150; public float KnockbackForce => knockbackForce;
public float knockbackForce = 150;
/* /*
Hit points of the character. Hit points of the character.
*/ */
public double HP { public float HP {
get => baseHP; get => baseHP;
set => baseHP = value; set => baseHP = value;
} }
public double baseHP = 10; public float baseHP = 10;
/* /*
Maximum hit points of the character. Maximum hit points of the character.
*/ */
public double MaxHP => baseMaxHP; public float MaxHP => baseMaxHP;
public double baseMaxHP = 10; public float baseMaxHP = 10;
...@@ -76,10 +77,40 @@ namespace BigSock { ...@@ -76,10 +77,40 @@ namespace BigSock {
public TimeSpan _iFrameDuration = new TimeSpan(0, 0, 0, 0, 333); public TimeSpan _iFrameDuration = new TimeSpan(0, 0, 0, 0, 333);
protected Rigidbody2D rb;
void Start() {
rb = GetComponent<Rigidbody2D>();
}
/*
Add Kcockback.
*/
//public void KnockBack(float force, Vector2 difference) {
// rb.AddForce(difference * force, ForceMode2D.Impulse);
//}
public void KnockBack(IAttackStats attack) {
Vector2 difference = ((Vector2) transform.position - attack.Source).normalized;
//KnockBack(attack.Knockback, difference);
rb.AddForce(difference * attack.Knockback, ForceMode2D.Impulse);
}
/*
Adds damage to the player if they don't have IFrames.
*/
public bool TakeDamage(float amount) {
return TakeDamage(new AttackStats{
Damage = amount,
});
}
/* /*
Adds damage to the player if they don't have IFrames. Adds damage to the player if they don't have IFrames.
*/ */
public bool TakeDamage(double amount) { public bool TakeDamage(IAttackStats attack) {
// Check if player has IFrames // Check if player has IFrames
if(NextTimeCanTakeDamage > DateTime.Now) if(NextTimeCanTakeDamage > DateTime.Now)
return false; return false;
...@@ -89,8 +120,8 @@ namespace BigSock { ...@@ -89,8 +120,8 @@ namespace BigSock {
// Add damage // Add damage
HP -= amount; HP -= attack.Damage;
OnDamage(amount); OnDamage(attack);
TryKill(); TryKill();
...@@ -116,9 +147,9 @@ namespace BigSock { ...@@ -116,9 +147,9 @@ namespace BigSock {
/* /*
Method for what to do when the character takes damage. Method for what to do when the character takes damage.
*/ */
protected void OnDamage(double amount) { protected void OnDamage(IAttackStats attack) {
print($"[Character.TakeDamage()] start. | {HP} - {amount}"); print($"[Character.TakeDamage()] {HP} - {attack.Damage}");
KnockBack(attack);
} }
/* /*
......
fileFormatVersion: 2
guid: 764c609c76c014a48866aca15bcd65d9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
namespace BigSock {
/*
Represents the stats of an attack.
*/
public class AttackStats : IAttackStats {
/*
The damage of the attack.
*/
public float Damage { get; set; }
/*
The knockback of the attack.
*/
public float Knockback { get; set; }
/*
The range of the attack.
*/
public float Range { get; set; }
/*
The attack speed of the attack.
*/
public float AttackSpeed { get; set; }
/*
The source of the attack.
*/
public Vector2 Source { get; set; }
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: cd438d3dc3b447c438972219e0808814
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
namespace BigSock {
/*
Interface represents the stats of an attack.
*/
public interface IAttackStats {
/*
The damage of the attack.
*/
float Damage { get; }
/*
The knockback of the attack.
*/
float Knockback { get; }
/*
The range of the attack.
*/
float Range { get; }
/*
The attack speed of the attack.
*/
float AttackSpeed { get; }
/*
The source of the attack.
*/
Vector2 Source { get; }
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: c8f491559b2c8404bbdf588d7a00b7d9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
...@@ -17,7 +17,7 @@ namespace BigSock { ...@@ -17,7 +17,7 @@ namespace BigSock {
Vector2 movementInput; Vector2 movementInput;
SpriteRenderer spriteRenderer; SpriteRenderer spriteRenderer;
Rigidbody2D rb; //Rigidbody2D rb;
Animator animator; Animator animator;
List<RaycastHit2D> castCollisions = new List<RaycastHit2D>(); List<RaycastHit2D> castCollisions = new List<RaycastHit2D>();
...@@ -41,13 +41,6 @@ namespace BigSock { ...@@ -41,13 +41,6 @@ namespace BigSock {
} }
/*
Add Kcockback.
*/
public void KnockBack(float force, Vector2 difference){
rb.AddForce(difference * force);
}
private void FixedUpdate() { private void FixedUpdate() {
if(canMove) { if(canMove) {
......
...@@ -24,7 +24,7 @@ namespace BigSock { ...@@ -24,7 +24,7 @@ namespace BigSock {
private bool isInMelee = false; private bool isInMelee = false;
Rigidbody2D rb; //Rigidbody2D rb;
// private Collider2D_Proxy secondCollider; // private Collider2D_Proxy secondCollider;
...@@ -177,16 +177,26 @@ namespace BigSock { ...@@ -177,16 +177,26 @@ namespace BigSock {
*/ */
public partial class SlimeController { public partial class SlimeController {
private void Attack_OnColliderEnter2D(Collider2D other){ private void Attack_OnColliderEnter2D(Collider2D other) {
if (other.gameObject.tag == "Player") if (other.gameObject.tag == "Player")
isInMelee = true; isInMelee = true;
} }
private void Attack_OnColliderStay2D(Collider2D other){ private void Attack_OnColliderStay2D(Collider2D other) {
var player = other.gameObject.GetComponent<PlayerController>(); var player = other.gameObject.GetComponent<PlayerController>();
if (player != null){ if (player != null) {
if(player.TakeDamage(Damage)) { // Create attack object.
var attack = new AttackStats{
Damage = Damage,
Knockback = KnockbackForce,
Range = 0,
AttackSpeed = AttackSpeed,
Source = transform.position,
};
// Get the player to take the damage.
if(player.TakeDamage(attack)) {
//knockback ? //knockback ?
//animer nå ? //animer nå ?
......
...@@ -15,8 +15,12 @@ namespace BigSock { ...@@ -15,8 +15,12 @@ namespace BigSock {
/* /*
Damage of the character. Damage of the character.
*/ */
public double Damage => baseDamage; public float Damage => baseDamage;
public double baseDamage = 1; public float baseDamage = 1;
public float KnockbackForce => knockbackForce;
public float knockbackForce = 50;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
...@@ -48,8 +52,17 @@ namespace BigSock { ...@@ -48,8 +52,17 @@ namespace BigSock {
print($"[AttackMovement.OnCollisionEnter2D()] {collision.transform.position}"); print($"[AttackMovement.OnCollisionEnter2D()] {collision.transform.position}");
var target = collision.gameObject.GetComponent<EnemyController>(); var target = collision.gameObject.GetComponent<EnemyController>();
if(target != null){ if(target != null) {
if(target.TakeDamage(Damage)){
var attack = new AttackStats{
Damage = Damage,
Knockback = KnockbackForce,
//Range = 0,
//AttackSpeed = AttackSpeed,
Source = transform.position,
};
if(target.TakeDamage(attack)) {
} }
} }
......
...@@ -24,7 +24,7 @@ namespace BigSock { ...@@ -24,7 +24,7 @@ namespace BigSock {
private bool isInMelee = false; private bool isInMelee = false;
Rigidbody2D rb; //Rigidbody2D rb;
// private Collider2D_Proxy secondCollider; // private Collider2D_Proxy secondCollider;
...@@ -50,15 +50,13 @@ namespace BigSock { ...@@ -50,15 +50,13 @@ namespace BigSock {
private void RotateAnimation(Vector2 direction) private void RotateAnimation(Vector2 direction) {
{
if (direction.x > 0.01f){ if (direction.x > 0.01f){
gameObject.GetComponent<SpriteRenderer>().flipX = false; gameObject.GetComponent<SpriteRenderer>().flipX = false;
} }
else if (direction.x < -0.01f){ else if (direction.x < -0.01f){
gameObject.GetComponent<SpriteRenderer>().flipX = true; gameObject.GetComponent<SpriteRenderer>().flipX = true;
} }
} }
private void Update(){ private void Update(){
...@@ -113,7 +111,10 @@ namespace BigSock { ...@@ -113,7 +111,10 @@ namespace BigSock {
} }
public partial class EnemyController { //attack /*
Attack
*/
public partial class EnemyController {
private void Attack_OnColliderEnter2D(Collider2D other){ private void Attack_OnColliderEnter2D(Collider2D other){
if (other.gameObject.tag == "Player") if (other.gameObject.tag == "Player")
...@@ -122,17 +123,26 @@ namespace BigSock { ...@@ -122,17 +123,26 @@ namespace BigSock {
private void Attack_OnColliderStay2D(Collider2D other){ private void Attack_OnColliderStay2D(Collider2D other) {
if (other.gameObject.tag == "Player"){ var player = other.gameObject.GetComponent<PlayerController>();
var player = other.gameObject.GetComponent<PlayerController>(); if(player != null) {
if(player.TakeDamage(Damage)){ // Create attack object.
//rb position - player position var attack = new AttackStats{
Vector2 difference = (other.transform.position - transform.position).normalized; Damage = Damage,
player.KnockBack(KnockbackForce, difference); Knockback = KnockbackForce,
//animer nå ? Range = 0,
AttackSpeed = AttackSpeed,
} Source = transform.position,
} };
// Get the player to take the damage.
if(player.TakeDamage(attack)){
//rb position - player position
//Vector2 difference = (other.transform.position - transform.position).normalized;
//player.KnockBack(KnockbackForce, difference);
//animer nå ?
}
}
} }
private void Attack_OnColliderExit2D(Collider2D other){ private void Attack_OnColliderExit2D(Collider2D other){
if (other.gameObject.tag == "Player") if (other.gameObject.tag == "Player")
...@@ -141,7 +151,10 @@ namespace BigSock { ...@@ -141,7 +151,10 @@ namespace BigSock {
} }
public partial class EnemyController { //move /*
Move
*/
public partial class EnemyController {
private void Move_OnColliderEnter2D(Collider2D other) private void Move_OnColliderEnter2D(Collider2D other)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment