public void BuildFromStateData(StateDataSO data) { // Get data reference myStateData = data; // Set scale originalScale = GetComponent <RectTransform>().localScale.x; // Build views nameText.text = data.stateName; descriptionText.text = data.stateDescription; stateImage.sprite = data.stateSprite; // set rarity gem / afflication gem if (data.affliction) { afflictionParent.SetActive(true); } else if (data.rarity == StateDataSO.Rarity.Common) { commonParent.SetActive(true); } else if (data.rarity == StateDataSO.Rarity.Rare) { rareParent.SetActive(true); } else if (data.rarity == StateDataSO.Rarity.Boss) { bossParent.SetActive(true); } else if (data.eventReward) { eventParent.SetActive(true); } }
public Action CreateAfflictionCardRemovedEffect(StateDataSO stateData) { Action action = new Action(); StartCoroutine(CreateAfflictionCardRemovedEffect(stateData, action)); return(action); }
public Action CreateStateCardRewardEffect(StateDataSO stateData) { Action action = new Action(); StartCoroutine(CreateStateCardRewardEffectCoroutine(stateData, action)); return(action); }
private void RemoveStateEffectsOnRemoval(StateDataSO state) { Debug.Log("StateManager.RemoveStateEffectsOnRemoval() called, removing effect of state: " + state.stateName); // Afflictions if (state.stateName == "Curse Of The Blood God") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyFading(-2); } } else if (state.stateName == "Exhausted") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStamina(5); character.ModifyMobility(1); } } else if (state.stateName == "Shame") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStrength(1); character.ModifyWisdom(1); character.ModifyDexterity(1); } } }
public StateDataSO GetRandomRareState(bool onlyGetViable = true) { Debug.Log("StateLibrary.GetRandomRareState() called..."); StateDataSO stateReturned = null; List <StateDataSO> rareStates = new List <StateDataSO>(); foreach (StateDataSO state in allStates) { if (state.rarity == StateDataSO.Rarity.Rare) { if (onlyGetViable) { if (!StateManager.Instance.DoesPlayerAlreadyHaveState(state.stateName)) { rareStates.Add(state); } } else { rareStates.Add(state); } } } stateReturned = rareStates[Random.Range(0, rareStates.Count)]; Debug.Log("StateLibrary.GetRandomRareState() returning " + stateReturned.stateName); return(stateReturned); }
// Misc Logic #region public void GainState(StateDataSO stateGained, bool showStateCardOverlayEffect = false) { Debug.Log("StateManager.GainState() called, gaining state: " + stateGained.stateName); // Modify Player Score ScoreManager.Instance.statesCollected++; // Create reward overlay effect if (showStateCardOverlayEffect) { CardRewardScreenManager.Instance.CreateStateCardRewardEffect(stateGained); } // Create State object out of prefab and parent it to the grid view panel GameObject newState = Instantiate(PrefabHolder.Instance.statePrefab, statePanel.transform); // Get the script component and run the setip State stateScript = newState.GetComponent <State>(); stateScript.InitializeSetup(stateGained); // Gain state effects on pick up (where relevant) ApplyStateEffectOnPickup(stateGained); // Add state to active state lists activeStates.Add(stateScript); }
// Apply States to characters logic #region public Action ApplyStateEffectOnPickup(StateDataSO data) { Action action = new Action(); StartCoroutine(ApplyStateEffectOnPickupCoroutine(data, action)); return(action); }
// Set up + Initialization #region public void InitializeSetup(State stateReference) { myState = stateReference; myStateData = stateReference.myStateData; nameText.text = stateReference.Name; descriptionText.text = stateReference.description; myImageComponent.sprite = stateReference.sprite; StateManager.Instance.afflicationPanelObjects.Add(this); }
private IEnumerator CreateAfflictionCardRemovedEffect(StateDataSO stateData, Action action) { // Create Card object GameObject newStateCardGO = Instantiate(stateCardEffectPrefab, cardParent); StateCardRewardOverlay newStateCard = newStateCardGO.GetComponent <StateCardRewardOverlay>(); // Set up card properties BuildStateCardRewardOverlayFromData(stateData, newStateCard); // Scale down card SetParentScale(newStateCard.stateCardScaleParent, new Vector3(0.005f, 0.005f, 0.005f)); // Insert Delay, break up multiple simoltaenous reveals yield return(new WaitForSeconds(CalculateCardRevealDelay())); // Get next available slot position CardRewardScreenSlot mySlot = GetNextAvailableSlotPosition(); // dont proceed unless a slot is available if (mySlot == null) { action.actionResolved = true; yield break; } // Move to starting slot position newStateCard.masterLocationParent.position = mySlot.parentTransform.position; // Start scaling card back to normal size Action scaleEffect = ScaleUpCard(newStateCard.stateCardScaleParent, 1); yield return(new WaitUntil(() => scaleEffect.actionResolved == true)); // Brief pause, so player can read the card yield return(new WaitForSeconds(0.5f)); // Free up slot mySlot.occupied = false; // Start Card Fade out FadeOutStateCard(newStateCard); // Start card burn VFX newStateCard.fireDestroyParticleEffectParent.SetActive(true); // Destroy Destroy(newStateCard, 2); // Resolve action.actionResolved = true; }
// Initialization + Setup #region public void InitializeSetup(StateDataSO stateData) { myStateData = stateData; sprite = stateData.stateSprite; myImageComponent.sprite = sprite; Name = stateData.stateName; description = stateData.stateDescription; expirationCondition = stateData.expirationCondition; affliction = stateData.affliction; duration = stateData.duration; currentDuration = duration; // Set up text components // Only enable duration text if the state has a timer if (currentDuration > 0 && stateData.expirationCondition == StateDataSO.ExpirationCondition.Timer) { durationText.text = currentDuration.ToString(); durationText.gameObject.SetActive(true); } descriptionText.text = description; nameText.text = Name; // set rarity gem / afflication gem if (stateData.affliction) { afflictionParent.SetActive(true); } else if (stateData.rarity == StateDataSO.Rarity.Common) { commonParent.SetActive(true); } else if (stateData.rarity == StateDataSO.Rarity.Rare) { rareParent.SetActive(true); } else if (stateData.rarity == StateDataSO.Rarity.Boss) { bossParent.SetActive(true); } else if (stateData.eventReward) { eventParent.SetActive(true); } }
public StateDataSO GetRandomAffliction() { Debug.Log("StateLibrary.GetRandomAfflication() called..."); StateDataSO stateReturned = null; List <StateDataSO> viableStates = new List <StateDataSO>(); foreach (StateDataSO data in allStates) { if (data.affliction) { viableStates.Add(data); } } stateReturned = viableStates[Random.Range(0, viableStates.Count)]; Debug.Log("StateLibrary.GetRandomState() returning: " + stateReturned.stateName); return(stateReturned); }
// Get States + Data Logic #region public StateDataSO GetStateByName(string name) { Debug.Log("StateLibrary.GetStateByName() called, searching for " + name + "..."); StateDataSO stateReturned = null; foreach (StateDataSO state in allStates) { if (state.stateName == name) { stateReturned = state; break; } } if (stateReturned == null) { Debug.Log("StateLibrary.GetStateByName() could not find a state with the name '" + name + "', return null..."); } return(stateReturned); }
public StateDataSO GetRandomStateReward() { Debug.Log("StateLibrary.GetRandomState() called..."); StateDataSO stateReturned = null; List <StateDataSO> viableStates = new List <StateDataSO>(); foreach (StateDataSO data in allStates) { if (!data.affliction && !StateManager.Instance.DoesPlayerAlreadyHaveState(data.stateName) && !data.eventReward) { viableStates.Add(data); } } stateReturned = viableStates[Random.Range(0, viableStates.Count)]; Debug.Log("StateLibrary.GetRandomState() returning: " + stateReturned.stateName); return(stateReturned); }
public void BuildStateCardRewardOverlayFromData(StateDataSO data, StateCardRewardOverlay card) { card.stateCard.BuildFromStateData(data); }
private IEnumerator CreateStateCardRewardEffectCoroutine(StateDataSO stateData, Action action) { // Create Card object GameObject newStateCardGO = Instantiate(stateCardEffectPrefab, cardParent); StateCardRewardOverlay newStateCard = newStateCardGO.GetComponent <StateCardRewardOverlay>(); // Set up card properties BuildStateCardRewardOverlayFromData(stateData, newStateCard); // Scale down card SetParentScale(newStateCard.stateCardScaleParent, new Vector3(0.005f, 0.005f, 0.005f)); // Insert Delay, break up multiple simoltaenous reveals yield return(new WaitForSeconds(CalculateCardRevealDelay())); // Get next available slot position CardRewardScreenSlot mySlot = GetNextAvailableSlotPosition(); // dont proceed unless a slot is available if (mySlot == null) { action.actionResolved = true; yield break; } // Move to starting slot position newStateCard.masterLocationParent.position = mySlot.parentTransform.position; // Start scaling card back to normal size Action scaleEffect = ScaleUpCard(newStateCard.stateCardScaleParent, 1); yield return(new WaitUntil(() => scaleEffect.actionResolved == true)); // Brief pause, so player can read the card yield return(new WaitForSeconds(1)); // Free up slot mySlot.occupied = false; // Start scaling card back down ScaleDownCard(newStateCard.stateCardScaleParent, 0.01f); // Start card rotation towards destination RotateCardZAxis(newStateCard.stateCardScaleParent, 45); // Enable Sparkle Effect newStateCard.sparkleParticleEffectParent.SetActive(true); // Move character panel button position Action moveEffect = MoveCardToDestination(newStateCard.masterLocationParent, statePanelEndPosition.position); yield return(new WaitUntil(() => moveEffect.actionResolved == true)); // Create mini explosion on char roster button GameObject newPE = Instantiate(lootExplosionEffectPrefab, cardParent); newPE.transform.position = statePanelEndPosition.position; // Destroy item card Destroy(newStateCardGO); // Resolve action.actionResolved = true; yield return(null); action.actionResolved = true; }
private IEnumerator ApplyStateEffectOnPickupCoroutine(StateDataSO data, Action action) { if (data.stateName == "Vengeful") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStrength(2); } } else if (data.stateName == "Educated") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyWisdom(2); } } else if (data.stateName == "Tough") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyDexterity(2); } } else if (data.stateName == "Well Rounded") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStrength(1); character.ModifyWisdom(1); character.ModifyDexterity(1); } } else if (data.stateName == "Heroism") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStrength(1); character.ModifyWisdom(1); character.ModifyDexterity(1); } } else if (data.stateName == "Polished Armour") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyUnwavering(1); } } else if (data.stateName == "Pumped Up") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStamina(5); character.ModifyMaxEnergy(5); } } else if (data.stateName == "Vampirism") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyLifeSteal(1); } } // Camp site related else if (data.stateName == "Resourceful") { CampSiteManager.Instance.maxActionPoints++; } else if (data.stateName == "Treasure Hunters") { CampSiteManager.Instance.EnableDigActionView(); } else if (data.stateName == "Studious") { CampSiteManager.Instance.EnableReadActionView(); } // Afflictions else if (data.stateName == "Curse Of The Blood God") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyFading(2); } } else if (data.stateName == "Exhausted") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStamina(-5); character.ModifyMobility(-1); } } else if (data.stateName == "Shame") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStrength(-1); character.ModifyWisdom(-1); character.ModifyDexterity(-1); } } // boss states else if (data.stateName == "Combat Mastery") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStamina(10); character.ModifyMaxEnergy(10); } } else if (data.stateName == "Trauma Savant") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStamina(10); character.ModifyMaxEnergy(10); } } else if (data.stateName == "Oath Of Honour") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStamina(10); character.ModifyMaxEnergy(10); } } else if (data.stateName == "Awesomeness") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStamina(5); character.ModifyMaxEnergy(5); } } else if (data.stateName == "Orcish Tendencies") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyStrength(5); } } else if (data.stateName == "Thick Skinned") { foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects) { character.ModifyMaxHealth(50); } } else if (data.stateName == "Lottery Winners") { InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomEpicItem(), true); InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomEpicItem(), true); InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomEpicItem(), true); } action.actionResolved = true; yield return(null); }