Skip to content

Commit

Permalink
hide abilities from other classes in ability manager
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelday008 committed Oct 12, 2020
1 parent f97ab21 commit 0024733
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 12 deletions.
1 change: 1 addition & 0 deletions Abilities/Ability/IAbility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public interface IAbility {
int ResourceGainPerLevel { get; set; }
float SpendDelay { get; set; }
bool UseSpeedMultipliers { get; set; }
List<CharacterClass> CharacterClassRequirementList { get; set; }

float GetAbilityCastingTime(IAbilityCaster abilityCaster);

Expand Down
6 changes: 3 additions & 3 deletions Characters/AI/AICombat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public BaseAbility GetValidAttackAbility() {
if (MyBaseCharacter != null && MyBaseCharacter.CharacterAbilityManager != null) {
//Debug.Log(gameObject.name + ".AICombat.GetValidAttackAbility(): CHARACTER HAS ABILITY MANAGER");

foreach (BaseAbility baseAbility in MyBaseCharacter.CharacterAbilityManager.MyAbilityList.Values) {
foreach (BaseAbility baseAbility in MyBaseCharacter.CharacterAbilityManager.AbilityList.Values) {
//Debug.Log(gameObject.name + ".AICombat.GetValidAttackAbility(): Checking ability: " + baseAbility.MyName);
//if (baseAbility.maxRange == 0 || Vector3.Distance(aiController.MyBaseCharacter.MyCharacterUnit.transform.position, aiController.MyTarget.transform.position) < baseAbility.maxRange) {
if (baseAbility.CanCastOnEnemy &&
Expand Down Expand Up @@ -100,7 +100,7 @@ public BaseAbility GetMeleeAbility() {
if (MyBaseCharacter != null && MyBaseCharacter.CharacterAbilityManager != null) {
//Debug.Log(gameObject.name + ".AICombat.GetValidAttackAbility(): CHARACTER HAS ABILITY MANAGER");

foreach (BaseAbility baseAbility in MyBaseCharacter.CharacterAbilityManager.MyAbilityList.Values) {
foreach (BaseAbility baseAbility in MyBaseCharacter.CharacterAbilityManager.AbilityList.Values) {
//Debug.Log(gameObject.name + ".AICombat.GetValidAttackAbility(): Checking ability: " + baseAbility.MyName);
//if (baseAbility.maxRange == 0 || Vector3.Distance(aiController.MyBaseCharacter.MyCharacterUnit.transform.position, aiController.MyTarget.transform.position) < baseAbility.maxRange) {
if (baseAbility.CanCastOnEnemy && baseAbility.UseMeleeRange == true) {
Expand All @@ -121,7 +121,7 @@ public List<BaseAbility> GetAttackRangeAbilityList() {
if (MyBaseCharacter != null && MyBaseCharacter.CharacterAbilityManager != null) {
//Debug.Log(gameObject.name + ".AICombat.GetValidAttackAbility(): CHARACTER HAS ABILITY MANAGER");

foreach (BaseAbility baseAbility in MyBaseCharacter.CharacterAbilityManager.MyAbilityList.Values) {
foreach (BaseAbility baseAbility in MyBaseCharacter.CharacterAbilityManager.AbilityList.Values) {
returnList.Add(baseAbility);
}
}
Expand Down
23 changes: 20 additions & 3 deletions Characters/BaseClasses/CharacterAbilityManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,26 @@ public override bool IsDead {
}
}

public Dictionary<string, IAbility> MyAbilityList { get => abilityList; }
public Dictionary<string, IAbility> AbilityList {
get {
Dictionary<string, IAbility> returnAbilityList = new Dictionary<string, IAbility>();
foreach (string abilityName in abilityList.Keys) {
if (abilityList[abilityName].CharacterClassRequirementList == null || abilityList[abilityName].CharacterClassRequirementList.Count == 0 || abilityList[abilityName].CharacterClassRequirementList.Contains(baseCharacter.CharacterClass)) {
returnAbilityList.Add(abilityName, abilityList[abilityName]);
}
}
return returnAbilityList;
}

}
public bool WaitingForAnimatedAbility { get => waitingForAnimatedAbility; set => waitingForAnimatedAbility = value; }
public bool IsCasting { get => isCasting; set => isCasting = value; }
public Dictionary<string, AbilityCoolDownNode> MyAbilityCoolDownDictionary { get => abilityCoolDownDictionary; set => abilityCoolDownDictionary = value; }
public Coroutine MyCurrentCastCoroutine { get => currentCastCoroutine; }
public BaseAbility AutoAttackAbility { get => autoAttackAbility; set => autoAttackAbility = value; }

// direct access for save manager so we don't miss saving abilities we know but belong to another class
public Dictionary<string, IAbility> RawAbilityList { get => abilityList; set => abilityList = value; }

protected virtual void Start() {
//Debug.Log(gameObject.name + "CharacterAbilityManager.Start()");
Expand Down Expand Up @@ -909,9 +923,12 @@ public virtual void UnLearnClassAbilities (CharacterClass characterClass, bool u
if (characterClass == null) {
return;
}

// first, unlearn the abilities in the character class ability list
foreach (BaseAbility oldAbility in characterClass.AbilityList) {
UnlearnAbility(oldAbility, updateActionBars);
}

}

public void UnLearnSpecializationAbilities(ClassSpecialization classSpecialization) {
Expand Down Expand Up @@ -970,7 +987,7 @@ public bool HasAbility(BaseAbility baseAbility) {
//Debug.Log(gameObject.name + ".CharacterAbilitymanager.HasAbility(" + abilityName + ")");
//string keyName = SystemResourceManager.prepareStringForMatch(baseAbility);
//Debug.Log(gameObject.name + ".CharacterAbilitymanager.HasAbility(" + abilityName + "): keyname: " + keyName);
if (MyAbilityList.ContainsKey(SystemResourceManager.prepareStringForMatch(baseAbility.DisplayName))) {
if (AbilityList.ContainsKey(SystemResourceManager.prepareStringForMatch(baseAbility.DisplayName))) {
//Debug.Log(gameObject.name + ".CharacterAbilitymanager.HasAbility( " + abilityName + "): keyname: " + keyName + " TRUE!");
return true;
}
Expand Down Expand Up @@ -1473,7 +1490,7 @@ public virtual bool PerformLearnedCheck(IAbility ability) {

string keyName = SystemResourceManager.prepareStringForMatch(ability.DisplayName);

if (!ability.MyUseableWithoutLearning && !abilityList.ContainsKey(keyName)) {
if (!ability.MyUseableWithoutLearning && !AbilityList.ContainsKey(keyName)) {
return false;
}
return true;
Expand Down
2 changes: 1 addition & 1 deletion GameManager/SaveManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,7 @@ public void SaveEquippedBagData(AnyRPGSaveData anyRPGSaveData) {

public void SaveAbilityData(AnyRPGSaveData anyRPGSaveData) {
//Debug.Log("Savemanager.SaveAbilityData()");
foreach (BaseAbility baseAbility in PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.MyAbilityList.Values) {
foreach (BaseAbility baseAbility in PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.RawAbilityList.Values) {
AbilitySaveData saveData = new AbilitySaveData();
saveData.MyName = baseAbility.DisplayName;
anyRPGSaveData.abilitySaveData.Add(saveData);
Expand Down
4 changes: 2 additions & 2 deletions GameManager/UIManagers/ActionBarManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -258,9 +258,9 @@ public void PopulateAbilityBars() {
return;
}
// TODO: set maximum size of loop to less of abilitylist count or button count
int abilityListCount = PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.MyAbilityList.Count;
int abilityListCount = PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.AbilityList.Count;
//Debug.Log("Updating ability bar with " + abilityListCount.ToString() + " abilities");
foreach (BaseAbility newAbility in PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.MyAbilityList.Values) {
foreach (BaseAbility newAbility in PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.AbilityList.Values) {
AddNewAbility(newAbility);
}
abilityBarsPopulated = true;
Expand Down
36 changes: 36 additions & 0 deletions Interactables/ClassChangeInteractable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,28 @@ public override void CleanupEventSubscriptions() {
//Debug.Log(gameObject.name + ".ClassChangeInteractable.CleanupEventSubscriptions()");
base.CleanupEventSubscriptions();
CleanupWindowEventSubscriptions();
if (SystemEventManager.MyInstance != null) {
SystemEventManager.MyInstance.OnClassChange -= HandleClassChange;
}
}

public override void CreateEventSubscriptions() {
//Debug.Log("GatheringNode.CreateEventSubscriptions()");
if (eventSubscriptionsInitialized) {
return;
}
base.CreateEventSubscriptions();

// because the skill is a special type of prerequisite, we need to be notified when it changes
if (SystemEventManager.MyInstance == null) {
Debug.LogError("SystemEventManager Not Found. Is the GameManager prefab in the scene?");
return;
}
SystemEventManager.MyInstance.OnClassChange += HandleClassChange;
}

public void HandleClassChange(CharacterClass oldCharacterClass, CharacterClass newCharacterClass) {
HandlePrerequisiteUpdates();
}

public override void HandleConfirmAction() {
Expand Down Expand Up @@ -135,6 +157,20 @@ public override void SetupScriptableObjects() {

}

// character class is a special type of prerequisite
public override bool MyPrerequisitesMet {
get {
bool returnValue = base.MyPrerequisitesMet;
if (returnValue == false) {
return false;
}
if (PlayerManager.MyInstance.MyCharacter.CharacterClass == characterClass) {
return false;
}
return returnValue;
}
}

}

}
4 changes: 2 additions & 2 deletions Items/RecipeItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public override bool Use() {
return false;
}
// learn recipe if the character has the right skill
if (PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.MyAbilityList.ContainsValue(recipe.CraftAbility)) {
if (PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.AbilityList.ContainsValue(recipe.CraftAbility)) {
PlayerManager.MyInstance.MyCharacter.PlayerRecipeManager.LearnRecipe(recipe);
MessageFeedManager.MyInstance.WriteMessage("You learned the recipe " + recipe.DisplayName);
Remove();
Expand All @@ -46,7 +46,7 @@ public override string GetSummary() {
alreadyKnownString = "<color=red>already known</color>\n";
}
string abilityKnownString = string.Empty;
if (PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.MyAbilityList.ContainsValue(recipe.CraftAbility)) {
if (PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.AbilityList.ContainsValue(recipe.CraftAbility)) {
abilityKnownString = "<color=white>requires: " + recipe.CraftAbility.DisplayName + "</color>\n";
} else {
abilityKnownString = "<color=red>requires: " + recipe.CraftAbility.DisplayName + "</color>\n";
Expand Down
2 changes: 1 addition & 1 deletion UI/CloseableWindows/AbilityBookUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void CreatePages() {
//Debug.Log("AbilityBookUI.CreatePages()");
ClearPages();
List<IAbility> page = new List<IAbility>();
foreach (IAbility newAbility in PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.MyAbilityList.Values) {
foreach (IAbility newAbility in PlayerManager.MyInstance.MyCharacter.CharacterAbilityManager.AbilityList.Values) {
if (newAbility.RequirementsAreMet()) {
page.Add(newAbility);
if (page.Count == pageSize) {
Expand Down

0 comments on commit 0024733

Please sign in to comment.