Building
Key Features
Manages Player Builders: Provides a number of available builders, and interface for finding and/or starting building process.
Collection Module Integration: With configuration you can specify if builders should attempt to collect resources after working or when no more work is available for building and their last building task was a resource depot. If builders are also collectors, they can be sent to nearby resource node with a new task.
Building Animation: Abstract implementation for building animation behaviour and simple raise building implementation.
Auto-Build: Allows buildings to build automatically, without using builders.
Event-Driven Updates: Triggers events for UI or gameplay reactions when entity starts, updates or completes building process.
Structure
Building Module - Easy access to available builders and finding nearby buildable entities.
Builder Capability - Defines builders capabilities like build interval, build power, enable auto-pickup and pickup.
Builder - Management of the builder's state and interactions.
Buildable Capability - Defines if entity builds automatically and if it updates health during building process.
EntityBuilding - Implements
IBuildableand manages the state of entity's building process.Build Events - Global events for tracking building processes: start, update, cancel, building complete, builder finished work.
Usage Examples
Control Builders
When you wish to send builders to build a nearby buildable entity.
[SerializeField] APlayer player;
// Example method for sending builder to build a nearby entity (if any found).
public void SendBuilderToWork(IBuilder builder)
{
if (!player.TryGetModule(out BuildingModule module))
{
Debug.Log("Player has no building module.");
return;
}
// Filter full is relevant only when you limit concurrent
// interactions on a given entity.
if (module.FindClosestBuildableEntity(builder, filterFull: true, out var buildable))
{
Debug.Log("No buildable entity found.");
return;
}
builder.GoBuildEntity(buildable);
}Retrieves module from the player if present
Module finds the closest buildable entity available
Optionally filters out full buildable entities. You can limit max active interactions on a building so only 1 or 2 builders can be assigned to it, or disable limitation completely.
Builder is ordered to go build, which internally starts the
BuildTargetTaskif the target is valid.
When you wish to send a builder to the specific target.
IEntity targetEntity = // Get entity reference.
IBuilder builder = // Get builder reference.
// Check if entity can be built.
if (targetEntity.Buildable == null) return;
// Optionally you can check if entity is already built at this time.
if (targetEntity.Buildable.IsBuilt) return;
// Send builder to work
builder.GoBuildEntity(targetEntity.Buildable);Display Available Builders
To show available builders to player on UI, you can use module's interface.
// Get all idle builders, with no active tasks.
var availableBuilders = module.GetAvailableBuilders();
// Get all builders, idle or not.
var allBuilders = module.Builders;Finish Building Immediately
If there is a need to complete building process instantly.
IBuildable buildable = entity.Buildable;
buildable.FinishBuilding();Last updated