forked from whztt07/UnityGameplayAbilitySystem
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAbilityHotbarManager.cs
More file actions
69 lines (57 loc) · 2.62 KB
/
Copy pathAbilityHotbarManager.cs
File metadata and controls
69 lines (57 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
using Unity.Collections;
public class AbilityHotbarManager : MonoBehaviour {
public AbilityCharacter AbilityCharacter;
public List<AbilityHotbarButton> AbilityButtons;
public List<AbilityIconMap> AbilityIconMaps;
void Start() {
for (int i = 0; i < AbilityCharacter.Abilities.Count; i++) {
if (AbilityButtons.Count > i) {
var abilityGraphic = AbilityIconMaps.FirstOrDefault(x => x.Ability == AbilityCharacter.Abilities[i].Ability);
if (abilityGraphic != null) {
AbilityButtons[i].ImageIcon.sprite = abilityGraphic.Sprite;
AbilityButtons[i].ImageIcon.color = abilityGraphic.SpriteColor;
}
}
}
World.Active.GetOrCreateSystem<AbilityHotbarUpdateSystem>().CharacterEntity = AbilityCharacter.SelfAbilitySystem.entity;
World.Active.GetOrCreateSystem<AbilityHotbarUpdateSystem>().AbilityButtons = AbilityButtons;
}
}
public class AbilityHotbarUpdateSystem : ComponentSystem {
public Entity CharacterEntity;
public List<AbilityHotbarButton> AbilityButtons;
EAbility[] AbilityMapping;
protected override void OnCreate() {
AbilityMapping = new[] {
EAbility.FireAbility,
EAbility.FireAbility,
EAbility.HealAbility
};
}
protected override void OnUpdate() {
// reset all cooldowns
for (int i = 0; i < AbilityButtons.Count; i++) {
AbilityButtons[i].SetCooldownRemainingPercent(1);
}
Entities.ForEach<AbilityComponent, GrantedAbilityComponent, GrantedAbilityCooldownComponent>((Entity entity, ref AbilityComponent Ability, ref GrantedAbilityComponent grantedAbility, ref GrantedAbilityCooldownComponent cooldown) => {
// UpdateButton(0, cooldown.Duration, cooldown.TimeRemaining);
for (var i = 0; i < AbilityMapping.Length; i++) {
if (Ability.Ability == AbilityMapping[i] && grantedAbility.GrantedTo == CharacterEntity) {
UpdateButton(i, cooldown.Duration, cooldown.TimeRemaining, cooldown.Duration > 0);
}
}
});
}
private void UpdateButton(int index, float cooldownDuration, float cooldownTimeRemaining, bool cooldownActive) {
var button = AbilityButtons[index];
var remainingPercent = 1f;
if (cooldownDuration != 0) {
remainingPercent = 1 - cooldownTimeRemaining / cooldownDuration;
}
button.SetCooldownRemainingPercent(remainingPercent);
}
}