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

Added code for conditional items on chararcter.

- Added code to Inventory to inform owner of conditional items.
- Added code to Character to add/remove listeners.
parent b085f977
No related branches found
No related tags found
1 merge request!22Implemented initial version of conditional items.
......@@ -85,7 +85,7 @@ namespace BigSock {
/*
The inventory of the character.
*/
public Inventory Inventory { get; protected set; } = new Inventory();
public Inventory Inventory { get; protected set; } = new Inventory(this);
/*
The base stats of the character.
......@@ -123,18 +123,7 @@ namespace BigSock {
Stats = BaseStats.Modify(modifiers);
}
/*
Try to pick up an item.
*/
public bool TryPickUpItem(IItem item) {
if(Inventory.AddItem(item)) {
UpdateModifiers();
print($"[Character.TryPickUpItem()] {item.Name} picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
return true;
}
print($"[Character.TryPickUpItem()] {item.Name} NOT picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
return false;
}
/*
Add Kcockback.
......@@ -174,7 +163,7 @@ namespace BigSock {
// Add damage
HP -= attack.Damage;
OnDamage(attack);
AfterDamage(attack);
TryKill();
......@@ -189,7 +178,7 @@ namespace BigSock {
if(Alive && HP <= 0) {
Alive = false;
OnDeath();
AfterDeath();
return true;
}
......@@ -200,22 +189,72 @@ namespace BigSock {
/*
Method for what to do when the character takes damage.
*/
protected virtual void OnDamage(IAttackStats attack) {
print($"[Character.TakeDamage()] {HP} - {attack.Damage}");
protected virtual void AfterDamage(IAttackStats attack) {
print($"[Character.AfterDamage()] {HP} - {attack.Damage}");
KnockBack(attack);
}
/*
Method for what to do when the character dies.
*/
protected virtual void OnDeath() {
print($"[Character.TryKill()] start. | {HP}, {Alive}");
protected virtual void AfterDeath() {
print($"[Character.AfterDeath()] start. | {HP}, {Alive}");
Destroy(gameObject);
}
}
/*
Items
*/
public partial class Character {
/*
Adds a listener for a conditional item to this character's event.
*/
public void AddItemListener(ConditionalItemBase item) {
switch(item.Trigger) {
case TriggerType.Fire: OnFire += ((OnFireItemBase) item).Handler; break;
case TriggerType.Hit: OnHit += ((OnHitItemBase) item).Handler; break;
case TriggerType.Kill: OnKill += ((OnKillItemBase) item).Handler; break;
case TriggerType.TakeDamage: OnTakeDamage += ((OnTakeDamageItemBase) item).Handler; break;
case TriggerType.Heal: OnHeal += ((OnHealItemBase) item).Handler; break;
case TriggerType.Death: OnDeath += ((OnDeathItemBase) item).Handler; break;
}
}
/*
Remove a listener for a conditional item from this character's event.
*/
public void RemoveItemListener(ConditionalItemBase item) {
switch(item.Trigger) {
case TriggerType.Fire: OnFire -= ((OnFireItemBase) item).Handler; break;
case TriggerType.Hit: OnHit -= ((OnHitItemBase) item).Handler; break;
case TriggerType.Kill: OnKill -= ((OnKillItemBase) item).Handler; break;
case TriggerType.TakeDamage: OnTakeDamage -= ((OnTakeDamageItemBase) item).Handler; break;
case TriggerType.Heal: OnHeal -= ((OnHealItemBase) item).Handler; break;
case TriggerType.Death: OnDeath -= ((OnDeathItemBase) item).Handler; break;
}
}
/*
Try to pick up an item.
*/
public bool TryPickUpItem(IItem item) {
if(Inventory.AddItem(item)) {
UpdateModifiers();
print($"[Character.TryPickUpItem()] {item.Name} picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
return true;
}
print($"[Character.TryPickUpItem()] {item.Name} NOT picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
return false;
}
}
/*
Events
*/
......
......@@ -28,6 +28,18 @@ namespace BigSock.Item {
public int Cap { get; set; } = 3;
/*
The max number of items the inventory can hold.
*/
public Character Owner { get; }
public Inventory(Character owner) {
if(owner == null) throw new ArgumentNullException(paramName: nameof(owner));
Owner = owner;
}
/*
Adds an item to the inventory and manages changes.
*/
......@@ -40,6 +52,9 @@ namespace BigSock.Item {
if(item is PassiveItemBase passive) {
Modifier = Modifier.Add(passive.Modifier);
}
else if(item is ConditionalItemBase conditional) {
Owner.AddItemListener(conditional);
}
//! Add ifs to handle the other 2 types of items.
return true;
......
......@@ -152,8 +152,8 @@ namespace BigSock {
/*
Method for what to do when the character takes damage.
*/
protected override void OnDamage(IAttackStats attack) {
base.OnDamage(attack);
protected override void AfterDamage(IAttackStats attack) {
base.AfterDamage(attack);
hpBar.SetHealth(Convert.ToInt32(HP));
}
}
......
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