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_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 161505811} m_GameObject: {fileID: 161505811}
m_CullTransparentMesh: 1 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 --- !u!1 &342414423
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -400,6 +476,42 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 342414423} m_GameObject: {fileID: 342414423}
m_CullTransparentMesh: 1 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 --- !u!1 &382827736
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -501,6 +613,10 @@ PrefabInstance:
propertyPath: cam propertyPath: cam
value: value:
objectReference: {fileID: 519420031} objectReference: {fileID: 519420031}
- target: {fileID: 5275979051295637757, guid: 8764555a5fdde3428903d7ac06f8ff7f, type: 3}
propertyPath: hpBarUI
value:
objectReference: {fileID: 1008626378}
- target: {fileID: 5661264056639479186, guid: 8764555a5fdde3428903d7ac06f8ff7f, type: 3} - target: {fileID: 5661264056639479186, guid: 8764555a5fdde3428903d7ac06f8ff7f, type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0 value: 0
@ -1737,6 +1853,81 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 944240573} m_GameObject: {fileID: 944240573}
m_CullTransparentMesh: 1 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 --- !u!1001 &1014855760
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1950,6 +2141,82 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a75a4c92b7f4707cb82c77fef57ae2b3, type: 3} m_Script: {fileID: 11500000, guid: a75a4c92b7f4707cb82c77fef57ae2b3, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: 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 --- !u!1 &1108889697
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2511,6 +2778,8 @@ MonoBehaviour:
player: {fileID: 394036756} player: {fileID: 394036756}
upgradeToAdd: {fileID: 11400000, guid: 6fe34d7ec95c2ce1fac0727c553b5f0b, type: 2} upgradeToAdd: {fileID: 11400000, guid: 6fe34d7ec95c2ce1fac0727c553b5f0b, type: 2}
upgradeButton: {fileID: 0} upgradeButton: {fileID: 0}
allUpgrades:
- {fileID: 11400000, guid: 6fe34d7ec95c2ce1fac0727c553b5f0b, type: 2}
--- !u!4 &1432589379 --- !u!4 &1432589379
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3293,6 +3562,81 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a75a4c92b7f4707cb82c77fef57ae2b3, type: 3} m_Script: {fileID: 11500000, guid: a75a4c92b7f4707cb82c77fef57ae2b3, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: 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 --- !u!1 &1935311233
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3391,6 +3735,8 @@ RectTransform:
- {fileID: 1493212142} - {fileID: 1493212142}
- {fileID: 5007058640176408060} - {fileID: 5007058640176408060}
- {fileID: 342414424} - {fileID: 342414424}
- {fileID: 351951402}
- {fileID: 229603539}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
@ -3536,6 +3882,8 @@ MonoBehaviour:
currentSpawnTime: 0 currentSpawnTime: 0
bossEnemy: {fileID: 2525771944862034798, guid: ca7ae32805f29008d963b8443490ef42, type: 3} bossEnemy: {fileID: 2525771944862034798, guid: ca7ae32805f29008d963b8443490ef42, type: 3}
bossSpawnPoint: {fileID: 382827739} bossSpawnPoint: {fileID: 382827739}
bossUI: {fileID: 351951401}
bossHealthBar: {fileID: 1923631094}
enemyFolder: {fileID: 1319590957} enemyFolder: {fileID: 1319590957}
player: {fileID: 1582287016} player: {fileID: 1582287016}
--- !u!4 &1972076835 --- !u!4 &1972076835

View file

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

View file

@ -45,10 +45,14 @@ public class AbilityUIHandler : MonoBehaviour
{ {
Destroy(child.gameObject); Destroy(child.gameObject);
} }
foreach (AbilityManager.StoredUpgrade storedUpgrade in AbilityManager.instance.upgradesInventory) foreach (AbilityUpgrade upgrade in AbilityManager.instance.allUpgrades)
{ {
StoredAbilityUpgradeUI newUI = Instantiate(templateStoredUpgradeUI, upgradeGrid); int upgradeCount = AbilityManager.instance.GetUpgradeCount(upgrade);
newUI.SetUpgrade(storedUpgrade.upgrade, storedUpgrade.count); 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}"; piercing.text = $"Piercing: {isBullet.pierceAmount}";
projectileCount.text = $"Projectiles: {isBullet.projectileCount}"; 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); int upgradeBoxesToAdd = Math.Abs(upgradeSlotAmount - upgradeBoxes.Count);

View file

@ -15,7 +15,7 @@ public class PlayerAbility : MonoBehaviour
[Header("Stats")] [Header("Stats")]
public float power; public float power;
public float projectileCount; public float projectileCount;
public HashSet<AbilityUpgrade> attachedUpgrades = new(); public Dictionary<AbilityUpgrade, int> attachedUpgrades = new();
public void TryAbility() public void TryAbility()
{ {
@ -37,4 +37,37 @@ public class PlayerAbility : MonoBehaviour
currentCooldown -= Time.deltaTime; 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")] [Header("Identification")]
public string upgradeName; public string upgradeName;
public Sprite upgradeIcon; public Sprite upgradeIcon;
public PlayerAbility thisPlayerAbility;
[Header("Stats")] [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; [SerializeField] private float speedUpgradeAmount;
public override void ApplyUpgrade() protected override void UpgradeEffects(PlayerAbility abilityToUpgrade)
{ {
base.ApplyUpgrade();
thisPlayerAbility.cooldown *= speedUpgradeAmount; thisPlayerAbility.cooldown *= speedUpgradeAmount;
} }
} }

View file

@ -3,8 +3,8 @@ using UnityEngine;
[CreateAssetMenu(fileName = "Projectile Count Upgrade", menuName = "AbilityUpgrades/ProjectileCountUpgrade")] [CreateAssetMenu(fileName = "Projectile Count Upgrade", menuName = "AbilityUpgrades/ProjectileCountUpgrade")]
public class ProjectileCountUpgrade : AbilityUpgrade 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; return;
} }
counterUI.gameObject.SetActive(true); counterUI.gameObject.SetActive(true);
counterUI.text = $"x{thisAbilityUpgrade.count}"; counterUI.text = $"x{thisPlayerAbility.attachedUpgrades[thisAbilityUpgrade]}";
} }
public void OnDrop(PointerEventData eventData) public void OnDrop(PointerEventData eventData)
{ {
Debug.Log("A");
if (eventData.pointerDrag.TryGetComponent(out StoredAbilityUpgradeUI isStoredUpgrade) && (!thisAbilityUpgrade || isStoredUpgrade.storedUpgrade == thisAbilityUpgrade)) if (eventData.pointerDrag.TryGetComponent(out StoredAbilityUpgradeUI isStoredUpgrade) && (!thisAbilityUpgrade || isStoredUpgrade.storedUpgrade == thisAbilityUpgrade))
{ {
thisAbilityUpgrade = isStoredUpgrade.storedUpgrade; thisAbilityUpgrade = isStoredUpgrade.storedUpgrade;

View file

@ -12,6 +12,7 @@ public class Enemy : Entity
public EnemyAbility ability; public EnemyAbility ability;
public float currentCooldown; public float currentCooldown;
} }
public static event Action OnDamaged;
[Header("Targetting")] [Header("Targetting")]
public Entity closestTarget; public Entity closestTarget;
public float engagementRange; 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) protected virtual void DropUpgrade(UpgradeDrop drop)
{ {
float random = Random.Range(0, 100); float random = Random.Range(0, 100);

View file

@ -29,10 +29,14 @@ public class EnemySpawner : MonoBehaviour
[SerializeField] private float currentSpawnTime; [SerializeField] private float currentSpawnTime;
[Header("Boss")] [Header("Boss")]
public Enemy bossEnemy; public Enemy bossEnemy;
private Enemy bossEnemyInstance;
public Transform bossSpawnPoint; public Transform bossSpawnPoint;
[SerializeField] private GameObject bossUI;
[SerializeField] private Transform bossHealthBar;
[Header("Cache")] [Header("Cache")]
[SerializeField] private Transform enemyFolder; [SerializeField] private Transform enemyFolder;
[SerializeField] private Marisa player; [SerializeField] private Marisa player;
private void Update() private void Update()
{ {
if (canSpawn) 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); Enemy newEnemy = Instantiate(enemy, location, Quaternion.identity);
newEnemy.transform.SetParent(enemyFolder); newEnemy.transform.SetParent(enemyFolder);
newEnemy.closestTarget = player; //idk if there's actually gonna be any other target lol newEnemy.closestTarget = player; //idk if there's actually gonna be any other target lol
return newEnemy;
} }
public void StartBoss() public void StartBoss()
{ {
SpawnEnemy(bossEnemy, bossSpawnPoint.position); bossEnemyInstance = SpawnEnemy(bossEnemy, bossSpawnPoint.position);
bossUI.SetActive(true);
canSpawn = false; 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; using UnityEngine;
public class Entity : MonoBehaviour public class Entity : MonoBehaviour
@ -11,6 +12,7 @@ public class Entity : MonoBehaviour
[Header("Stats")] [Header("Stats")]
public float health; public float health;
public float maxHealth; public float maxHealth;
[Header("Movement")] [Header("Movement")]
[SerializeField] private bool isFacingRight; [SerializeField] private bool isFacingRight;
[SerializeField] protected Rigidbody2D rb; [SerializeField] protected Rigidbody2D rb;
@ -37,7 +39,7 @@ public class Entity : MonoBehaviour
rb.linearVelocity = moveDirection * speed; rb.linearVelocity = moveDirection * speed;
} }
} }
public void TakeDamage(float damage) public virtual void TakeDamage(float damage)
{ {
health -= damage; health -= damage;
if (health < 0) if (health < 0)

View file

@ -9,6 +9,8 @@ public class Marisa : Entity
public Vector2 mouseWorldPos; public Vector2 mouseWorldPos;
public Transform firingPointBase; public Transform firingPointBase;
public Transform firingPoint; public Transform firingPoint;
[Header("UI")]
[SerializeField] private Transform hpBarUI;
private void Update() private void Update()
{ {
mouseWorldPos = cam.ScreenToWorldPoint(Input.mousePosition); mouseWorldPos = cam.ScreenToWorldPoint(Input.mousePosition);
@ -20,4 +22,15 @@ public class Marisa : Entity
moveDirection = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")); moveDirection = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
base.FixedUpdate(); 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) public void OnBeginDrag(PointerEventData eventData)
{ {
parentAfterDrag = transform.parent; parentAfterDrag = icon.transform.parent;
icon.raycastTarget = false; icon.raycastTarget = false;
icon.transform.SetParent(transform.root); icon.transform.SetParent(transform.root);
icon.transform.SetAsLastSibling(); icon.transform.SetAsLastSibling();

View file

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