Upgrade

Key Features

  • Manages Progression: Tracks current active progressions (supports Turn-Base updates)

  • UI Handling: Reusable component for managing UI and state of the control action.

  • Visuals: Support showing progress bar over an entity/unit or action button itself.

  • Upgrade Entity: Allows upgrading of a single entity.

  • Progression Research: Allows upgrading multiple entities for player through research.


Structure

  • Upgrade Module - Easy access to starting or cancelling upgrade on specific entity.

    • InPlace - Default replacement strategy which updates entity/unit data and its components. If visuals are different, they are changed internally based on setup.

    • Replacement - Alternative replacement strategy which destroys and creates new entities instead. Experimental — tasks are currently not restarted.

  • Upgrade Capability: Defines capability of an entity to upgrade, supports 1-N options allowing entities to branch out with their upgrades (e.g. villager → militia → villager or swordsman).

  • Upgrading Entity: Component for managing current upgrading options of an entity and its upgrade progress.

  • Upgrade Visuals: Provides component for simple setup in Editor for switching between visuals based on completed upgrade (UpgradeEntityVisuals).

  • Upgrade Entity Action: Write something here? UpgradeEntityVisuals

  • Upgrade Events: Global events for tracking upgrading processes: start, cancelled, completed, entity replaced and entity upgraded.


Usage Examples

Upgrade Entity - with progress

When you would like to start upgrading entity to a specific option. This snippet is taken from the Upgrade Entity Action used by Upgrade Entity. UI Handler.

public void UpgradeEntity(IEntity entity, EntityUpgradeOption option)
{
    // Check if entity has upgrading entity defined
    if (entity.Upgrading == null) return;
    // Get modules from entity owner
    if (!entity.Owner.TryGetModule(out UpgradeModule upgradeModule)) return;
    if (!entity.Owner.TryGetModule(out ResourceModule resourceModule)) return;
    
    // Consume resources; if it fails, not enough resources.
    if (!resourceModule.RemoveResources(option.Cost)) return;
    
    // Upgrading process can start through module, 
    // to let module manage the updates.
    upgradeModule.StartUpgradeEntity(entity.Upgrading, option);
}

Upgrade Entity - Instantly

Or upgrade entity instantly instead.

public void UpgradeEntity(IEntity entity, AEntitySO newData)
{
    if (!entity.Owner.TryGetModule(out UpgradeModule module)) return;

    // Apply instant upgrade. 
    // Resources should be consumed manually before the upgrade.
    module.UpgradeEntityInstantly(entity, newData);
}

Upgrade multiple entities - Instantly

Upgrade entities globally for the player. If no such entities exist, nothing happens.

AEntitySO fromEntity = // Use desired starting entity/unit.
AEntitySO toEntity = // Use desired final entity/unit.

upgradeModule.TryGlobalUpgrade(fromEntity, toEntity);

Last updated