示例#1
0
    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);
        }
    }
示例#2
0
    public Action CreateAfflictionCardRemovedEffect(StateDataSO stateData)
    {
        Action action = new Action();

        StartCoroutine(CreateAfflictionCardRemovedEffect(stateData, action));
        return(action);
    }
示例#3
0
    public Action CreateStateCardRewardEffect(StateDataSO stateData)
    {
        Action action = new Action();

        StartCoroutine(CreateStateCardRewardEffectCoroutine(stateData, action));
        return(action);
    }
示例#4
0
    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);
            }
        }
    }
示例#5
0
    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);
    }
示例#6
0
    // 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);
    }
示例#7
0
    // Apply States to characters logic
    #region
    public Action ApplyStateEffectOnPickup(StateDataSO data)
    {
        Action action = new Action();

        StartCoroutine(ApplyStateEffectOnPickupCoroutine(data, action));
        return(action);
    }
示例#8
0
    // 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);
    }
示例#9
0
    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;
    }
示例#10
0
    // 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);
        }
    }
示例#11
0
    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);
    }
示例#12
0
    // 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);
    }
示例#13
0
    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);
    }
示例#14
0
 public void BuildStateCardRewardOverlayFromData(StateDataSO data, StateCardRewardOverlay card)
 {
     card.stateCard.BuildFromStateData(data);
 }
示例#15
0
    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;
    }
示例#16
0
    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);
    }