fix upgrades

This commit is contained in:
myondev 2026-03-03 09:16:19 -08:00
parent d8c49317a3
commit 5dcbd3c313
17 changed files with 477 additions and 83 deletions

View file

@ -255,6 +255,82 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 161505811}
m_CullTransparentMesh: 1
--- !u!1 &229603538
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 229603539}
- component: {fileID: 229603541}
- component: {fileID: 229603540}
m_Layer: 5
m_Name: PlayerHealthBarBG
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &229603539
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 229603538}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1008626378}
m_Father: {fileID: 1935311237}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 350, y: 220}
m_SizeDelta: {x: 660, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &229603540
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 229603538}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &229603541
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 229603538}
m_CullTransparentMesh: 1
--- !u!1 &342414423
GameObject:
m_ObjectHideFlags: 0
@ -400,6 +476,42 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 342414423}
m_CullTransparentMesh: 1
--- !u!1 &351951401
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 351951402}
m_Layer: 5
m_Name: BossUI
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &351951402
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 351951401}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1034624966}
m_Father: {fileID: 1935311237}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &382827736
GameObject:
m_ObjectHideFlags: 0
@ -501,6 +613,10 @@ PrefabInstance:
propertyPath: cam
value:
objectReference: {fileID: 519420031}
- target: {fileID: 5275979051295637757, guid: 8764555a5fdde3428903d7ac06f8ff7f, type: 3}
propertyPath: hpBarUI
value:
objectReference: {fileID: 1008626378}
- target: {fileID: 5661264056639479186, guid: 8764555a5fdde3428903d7ac06f8ff7f, type: 3}
propertyPath: m_LocalPosition.x
value: 0
@ -1737,6 +1853,81 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 944240573}
m_CullTransparentMesh: 1
--- !u!1 &1008626377
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1008626378}
- component: {fileID: 1008626380}
- component: {fileID: 1008626379}
m_Layer: 5
m_Name: PlayerHealthBar
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1008626378
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1008626377}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 229603539}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 5, y: 0}
m_SizeDelta: {x: -10, y: -10}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &1008626379
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1008626377}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0.0047169924, b: 0.0047169924, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1008626380
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1008626377}
m_CullTransparentMesh: 1
--- !u!1001 &1014855760
PrefabInstance:
m_ObjectHideFlags: 0
@ -1950,6 +2141,82 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a75a4c92b7f4707cb82c77fef57ae2b3, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1034624965
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1034624966}
- component: {fileID: 1034624968}
- component: {fileID: 1034624967}
m_Layer: 5
m_Name: HealthBarBG
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1034624966
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1034624965}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1923631094}
m_Father: {fileID: 351951402}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: -120}
m_SizeDelta: {x: 1200, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1034624967
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1034624965}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.20754719, g: 0.20754719, b: 0.20754719, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1034624968
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1034624965}
m_CullTransparentMesh: 1
--- !u!1 &1108889697
GameObject:
m_ObjectHideFlags: 0
@ -2511,6 +2778,8 @@ MonoBehaviour:
player: {fileID: 394036756}
upgradeToAdd: {fileID: 11400000, guid: 6fe34d7ec95c2ce1fac0727c553b5f0b, type: 2}
upgradeButton: {fileID: 0}
allUpgrades:
- {fileID: 11400000, guid: 6fe34d7ec95c2ce1fac0727c553b5f0b, type: 2}
--- !u!4 &1432589379
Transform:
m_ObjectHideFlags: 0
@ -3293,6 +3562,81 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a75a4c92b7f4707cb82c77fef57ae2b3, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1923631093
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1923631094}
- component: {fileID: 1923631096}
- component: {fileID: 1923631095}
m_Layer: 5
m_Name: HealthBar
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1923631094
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1923631093}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1034624966}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 10, y: 0}
m_SizeDelta: {x: -20, y: -20}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &1923631095
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1923631093}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0.1745283, b: 0.1745283, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1923631096
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1923631093}
m_CullTransparentMesh: 1
--- !u!1 &1935311233
GameObject:
m_ObjectHideFlags: 0
@ -3391,6 +3735,8 @@ RectTransform:
- {fileID: 1493212142}
- {fileID: 5007058640176408060}
- {fileID: 342414424}
- {fileID: 351951402}
- {fileID: 229603539}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@ -3536,6 +3882,8 @@ MonoBehaviour:
currentSpawnTime: 0
bossEnemy: {fileID: 2525771944862034798, guid: ca7ae32805f29008d963b8443490ef42, type: 3}
bossSpawnPoint: {fileID: 382827739}
bossUI: {fileID: 351951401}
bossHealthBar: {fileID: 1923631094}
enemyFolder: {fileID: 1319590957}
player: {fileID: 1582287016}
--- !u!4 &1972076835

View file

@ -21,18 +21,12 @@ public class AbilityManager : MonoBehaviour
}
#endregion
public class StoredUpgrade
{
public AbilityUpgrade upgrade;
public int count;
}
public MarisaAbilityHandler player;
public AbilityUpgrade upgradeToAdd;
public Button upgradeButton;
[Header("Upgrades")]
public HashSet<StoredUpgrade> upgradesInventory = new();
public AbilityUpgrade[] allUpgrades;
public Dictionary<AbilityUpgrade, int> upgradesInventory = new();
private void Start()
{
// upgradeButton.onClick.AddListener((() => AddUpgrade(upgradeToAdd, player.mainAttackInstance)));
@ -41,72 +35,42 @@ public class AbilityManager : MonoBehaviour
public void StoreUpgrade(AbilityUpgrade upgradeToStore)
{
foreach (StoredUpgrade storedUpgrade in upgradesInventory)
if (!upgradesInventory.ContainsKey(upgradeToStore))
{
if (storedUpgrade.upgrade == upgradeToStore)
{
storedUpgrade.count++;
Debug.Log($"Added upgrade {storedUpgrade.upgrade.upgradeName}. Current count: {storedUpgrade.count}");
AbilityUIHandler.instance.UpdateInventory();
return;
}
upgradesInventory[upgradeToStore] = 0;
}
StoredUpgrade newUpgrade = new()
{
upgrade = upgradeToStore,
count = 1
};
upgradesInventory.Add(newUpgrade);
Debug.Log($"Added upgrade {newUpgrade.upgrade.upgradeName}. Current count: {newUpgrade.count}");
upgradesInventory[upgradeToStore]++;
Debug.Log($"Added upgrade {upgradeToStore.upgradeName}. Current count: {upgradesInventory[upgradeToStore]}");
AbilityUIHandler.instance.UpdateInventory();
}
public int GetUpgradeCount(AbilityUpgrade upgrade)
{
if (!upgradesInventory.ContainsKey(upgrade))
{
return 0;
}
return upgradesInventory[upgrade];
}
public void AddUpgrade(AbilityUpgrade upgrade, PlayerAbility ability)
{
foreach (StoredUpgrade storedUpgrade in upgradesInventory.ToArray())
if (upgradesInventory.ContainsKey(upgrade))
{
if (storedUpgrade.upgrade == upgrade)
upgradesInventory[upgrade]--;
if (upgradesInventory[upgrade] <= 0)
{
storedUpgrade.count--;
if (storedUpgrade.count <= 0)
{
upgradesInventory.Remove(storedUpgrade);
AbilityUIHandler.instance.UpdateInventory();
}
if (!ability.attachedUpgrades.Contains(upgrade))
{
AbilityUpgrade newUpgrade = Instantiate(upgrade, ability.transform);
ability.attachedUpgrades.Add(newUpgrade);
newUpgrade.thisPlayerAbility = ability;
newUpgrade.ApplyUpgrade();
}
else
{
ability.attachedUpgrades.TryGetValue(upgrade, out AbilityUpgrade foundUpgrade);
if (foundUpgrade)
{
foundUpgrade.count++;
foundUpgrade.ApplyUpgrade();
}
}
upgradesInventory.Remove(upgrade);
}
ability.AddUpgrade(upgrade);
AbilityUIHandler.instance.UpdateInventory();
}
}
public void RemoveUpgrade(AbilityUpgrade upgrade, PlayerAbility ability)
{
if (ability.attachedUpgrades.TryGetValue(upgrade, out AbilityUpgrade foundUpgrade))
if (ability.RemoveUpgrade(upgrade))
{
if (foundUpgrade.count > 1)
{
foundUpgrade.ApplyRemoval();
foundUpgrade.count--;
}
else
{
foundUpgrade.ApplyRemoval();
ability.attachedUpgrades.Remove(foundUpgrade);
}
StoreUpgrade(upgrade);
}
}
}

View file

@ -45,10 +45,14 @@ public class AbilityUIHandler : MonoBehaviour
{
Destroy(child.gameObject);
}
foreach (AbilityManager.StoredUpgrade storedUpgrade in AbilityManager.instance.upgradesInventory)
foreach (AbilityUpgrade upgrade in AbilityManager.instance.allUpgrades)
{
StoredAbilityUpgradeUI newUI = Instantiate(templateStoredUpgradeUI, upgradeGrid);
newUI.SetUpgrade(storedUpgrade.upgrade, storedUpgrade.count);
int upgradeCount = AbilityManager.instance.GetUpgradeCount(upgrade);
if (upgradeCount > 0)
{
StoredAbilityUpgradeUI newUI = Instantiate(templateStoredUpgradeUI, upgradeGrid);
newUI.SetUpgrade(upgrade, upgradeCount);
}
}
}
}

View file

@ -34,9 +34,12 @@ public class AbilityUIObject : MonoBehaviour
piercing.text = $"Piercing: {isBullet.pierceAmount}";
projectileCount.text = $"Projectiles: {isBullet.projectileCount}";
}
foreach (AbilityUpgrade upgrade in thisAbility.attachedUpgrades)
foreach (AbilityUpgrade upgrade in AbilityManager.instance.allUpgrades)
{
AddUpgradeBox(upgrade);
if (thisAbility.GetUpgradeCount(upgrade) > 0)
{
AddUpgradeBox(upgrade);
}
}
int upgradeBoxesToAdd = Math.Abs(upgradeSlotAmount - upgradeBoxes.Count);

View file

@ -15,7 +15,7 @@ public class PlayerAbility : MonoBehaviour
[Header("Stats")]
public float power;
public float projectileCount;
public HashSet<AbilityUpgrade> attachedUpgrades = new();
public Dictionary<AbilityUpgrade, int> attachedUpgrades = new();
public void TryAbility()
{
@ -37,4 +37,37 @@ public class PlayerAbility : MonoBehaviour
currentCooldown -= Time.deltaTime;
}
}
public void AddUpgrade(AbilityUpgrade upgrade)
{
if (!attachedUpgrades.ContainsKey(upgrade))
{
attachedUpgrades[upgrade] = 0;
}
attachedUpgrades[upgrade]++;
upgrade.ApplyUpgrade(this);
}
public bool RemoveUpgrade(AbilityUpgrade upgrade)
{
if (attachedUpgrades.ContainsKey(upgrade))
{
attachedUpgrades[upgrade]--;
if (attachedUpgrades[upgrade] >= 0)
{
attachedUpgrades.Remove(upgrade);
}
upgrade.ApplyRemoval(this);
return true;
}
return false;
}
public int GetUpgradeCount(AbilityUpgrade upgrade)
{
if (!attachedUpgrades.ContainsKey(upgrade))
{
return 0;
}
return attachedUpgrades[upgrade];
}
}

View file

@ -5,21 +5,20 @@ public class AbilityUpgrade : ScriptableObject
[Header("Identification")]
public string upgradeName;
public Sprite upgradeIcon;
public PlayerAbility thisPlayerAbility;
[Header("Stats")]
public int count = 1;
public PlayerAbility thisPlayerAbility;
public virtual void ApplyUpgrade()
public void ApplyUpgrade(PlayerAbility abilityToUpgrade)
{
UpgradeEffects();
UpgradeEffects(abilityToUpgrade);
}
protected virtual void UpgradeEffects()
protected virtual void UpgradeEffects(PlayerAbility abilityToUpgrade)
{
}
public virtual void ApplyRemoval()
public virtual void ApplyRemoval(PlayerAbility abilityToRemove)
{
}

View file

@ -4,9 +4,8 @@ public class AttackSpeedUpgrade : AbilityUpgrade
{
[SerializeField] private float speedUpgradeAmount;
public override void ApplyUpgrade()
protected override void UpgradeEffects(PlayerAbility abilityToUpgrade)
{
base.ApplyUpgrade();
thisPlayerAbility.cooldown *= speedUpgradeAmount;
}
}

View file

@ -3,8 +3,8 @@ using UnityEngine;
[CreateAssetMenu(fileName = "Projectile Count Upgrade", menuName = "AbilityUpgrades/ProjectileCountUpgrade")]
public class ProjectileCountUpgrade : AbilityUpgrade
{
protected override void UpgradeEffects()
protected override void UpgradeEffects(PlayerAbility abilityToUpgrade)
{
thisPlayerAbility.projectileCount++; //idk how this will work for the stacking.
abilityToUpgrade.projectileCount++; //idk how this will work for the stacking.
}
}

View file

@ -17,12 +17,11 @@ public class UpgradeBoxUI : MonoBehaviour, IDropHandler
return;
}
counterUI.gameObject.SetActive(true);
counterUI.text = $"x{thisAbilityUpgrade.count}";
counterUI.text = $"x{thisPlayerAbility.attachedUpgrades[thisAbilityUpgrade]}";
}
public void OnDrop(PointerEventData eventData)
{
Debug.Log("A");
if (eventData.pointerDrag.TryGetComponent(out StoredAbilityUpgradeUI isStoredUpgrade) && (!thisAbilityUpgrade || isStoredUpgrade.storedUpgrade == thisAbilityUpgrade))
{
thisAbilityUpgrade = isStoredUpgrade.storedUpgrade;

View file

@ -12,6 +12,7 @@ public class Enemy : Entity
public EnemyAbility ability;
public float currentCooldown;
}
public static event Action OnDamaged;
[Header("Targetting")]
public Entity closestTarget;
public float engagementRange;
@ -112,6 +113,12 @@ public class Enemy : Entity
}
}
public override void TakeDamage(float damage)
{
base.TakeDamage(damage);
OnDamaged?.Invoke();
}
protected virtual void DropUpgrade(UpgradeDrop drop)
{
float random = Random.Range(0, 100);

View file

@ -29,10 +29,14 @@ public class EnemySpawner : MonoBehaviour
[SerializeField] private float currentSpawnTime;
[Header("Boss")]
public Enemy bossEnemy;
private Enemy bossEnemyInstance;
public Transform bossSpawnPoint;
[SerializeField] private GameObject bossUI;
[SerializeField] private Transform bossHealthBar;
[Header("Cache")]
[SerializeField] private Transform enemyFolder;
[SerializeField] private Marisa player;
private void Update()
{
if (canSpawn)
@ -46,16 +50,24 @@ public class EnemySpawner : MonoBehaviour
}
}
public void SpawnEnemy(Enemy enemy, Vector3 location)
public Enemy SpawnEnemy(Enemy enemy, Vector3 location)
{
Enemy newEnemy = Instantiate(enemy, location, Quaternion.identity);
newEnemy.transform.SetParent(enemyFolder);
newEnemy.closestTarget = player; //idk if there's actually gonna be any other target lol
return newEnemy;
}
public void StartBoss()
{
SpawnEnemy(bossEnemy, bossSpawnPoint.position);
bossEnemyInstance = SpawnEnemy(bossEnemy, bossSpawnPoint.position);
bossUI.SetActive(true);
canSpawn = false;
Enemy.OnDamaged += UpdateBossHealthBar; //this kinda sucks but it technically works??
}
private void UpdateBossHealthBar()
{
bossHealthBar.localScale = new Vector3(Math.Clamp(bossEnemyInstance.health / bossEnemyInstance.maxHealth, 0, bossEnemyInstance.maxHealth), 1, 1);
}
}

View file

@ -1,3 +1,4 @@
using System;
using UnityEngine;
public class Entity : MonoBehaviour
@ -11,6 +12,7 @@ public class Entity : MonoBehaviour
[Header("Stats")]
public float health;
public float maxHealth;
[Header("Movement")]
[SerializeField] private bool isFacingRight;
[SerializeField] protected Rigidbody2D rb;
@ -37,7 +39,7 @@ public class Entity : MonoBehaviour
rb.linearVelocity = moveDirection * speed;
}
}
public void TakeDamage(float damage)
public virtual void TakeDamage(float damage)
{
health -= damage;
if (health < 0)

View file

@ -9,6 +9,8 @@ public class Marisa : Entity
public Vector2 mouseWorldPos;
public Transform firingPointBase;
public Transform firingPoint;
[Header("UI")]
[SerializeField] private Transform hpBarUI;
private void Update()
{
mouseWorldPos = cam.ScreenToWorldPoint(Input.mousePosition);
@ -20,4 +22,15 @@ public class Marisa : Entity
moveDirection = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
base.FixedUpdate();
}
public override void TakeDamage(float damage)
{
base.TakeDamage(damage);
UpdateHealthUI();
}
private void UpdateHealthUI()
{
hpBarUI.localScale = new Vector3(Math.Clamp(health/maxHealth,0,maxHealth), 1,1);
}
}

View file

@ -0,0 +1,9 @@
using UnityEngine;
public class LevelSwitcher : MonoBehaviour
{
public void ChangeLevel()
{
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 717ca245990ccea7580364c54b200c8d

View file

@ -21,7 +21,7 @@ public class StoredAbilityUpgradeUI : MonoBehaviour, IBeginDragHandler, IDragHan
public void OnBeginDrag(PointerEventData eventData)
{
parentAfterDrag = transform.parent;
parentAfterDrag = icon.transform.parent;
icon.raycastTarget = false;
icon.transform.SetParent(transform.root);
icon.transform.SetAsLastSibling();

View file

@ -53,4 +53,4 @@ Physics2DSettings:
m_ReuseCollisionCallbacks: 1
m_AutoSyncTransforms: 0
m_GizmoOptions: 10
m_LayerCollisionMatrix: 010000000000000000000000400000000000000000000000c801000040000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
m_LayerCollisionMatrix: 010000000000000000000000400000000000000000000000c803000040000000400000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000