Universal HyperCasual Framework - Pizza Version Documentation

GETTING STARTED & SETUP: STEP BY STEP INSTRUCTIONS

1. INSTALL AND ENABLE THE PLUGIN

2. DEFINE YOUR IN GAME ITEMS Create Data Assets to represent your tycoon items (e.g., wheat, pizza, logs). Right click in the Content Browser Miscellaneous Data Asset, and select "HCFItemDefinition" (UHCFItemDefinition) as the parent class. Give it a descriptive name like "DA Wheat". Inside, configure the static meshes, offsets for carry stacks, display names, and economic sell values.

3. PREPARE THE PLAYER CHARACTER Open your Player Character Blueprint. Add the "HCF Inventory Component" (UHCFInventoryComponent) to enable item and money tracking. To enable physical carrying visuals, add the "HCF Carry Hand IK" component (UHCFCarryIKComponent). Ensure your character's Animation Blueprint reads the hand target transforms and alpha values from the UHCFCarryIKComponent to adjust the hands dynamically using a Control Rig or a Two Bone IK node in the AnimGraph.

4. BUILD A HARVESTABLE FARM (OPTIONAL) Place "HCF Crop Grow Actor" (AHCFCropGrowActor) blueprints in your level to act as crops. Configure their "Crop Mesh", growth durations, and harvest item. To make it harvestable, place an "HCF Farm Cutter Zone" (AHCFFarmCutterZone) overlapping the crop actors. When the player enters this zone, their inventory's rotating cutter mesh is automatically enabled, allowing them to cut crops on overlap.

5. SET UP PRODUCTION STATIONS Place "HCF Production Station" (AHCFProductionStation) actors in your level. Assign the "Produced Item Definition" (e.g., DA Pizza). When unlocked, the station produces items over time and displays them in a stack. Players or helpers standing in the collection box will automatically gather these items into their stacks.

6. SETUP SERVICE COUNTERS (CASHIER/SELL POINTS) Place "HCF Service Counter" (AHCFServiceCounter) actors. Assign the "Accepted Item Definition" it will consume. Customers wait here in line, buy items, and leave money. Overlapping player inventories automatically retrieve the accumulated money from the counter.

7. AUTOMATE WITH SPAWNERS AND CUSTOMERS Place an "HCF Customer Spawner" (AHCFCustomerSpawner). Link it to a "Target Service Counter". Set the "Customer Class" to a blueprint child of "HCFBaseCustomerCharacter" (AHCFBaseCustomerCharacter). The spawner will automatically spawn customers who navigate to the counter's queue, receive service, pay, and either despawn or look for dining tables.

8. CREATE A DINING ROOM Place "HCF Dining Table" (AHCFDiningTable) actors. Link them to the Customer Spawner or check "Search All Tables If Dining Table List Empty". Configure seats, seat offsets, and trash chance. When served customers are routed to eat, they sit at seats, consume food, and optionally leave trash. Place "HCF Dining Trash Bin Actor" (AHCFDiningTrashBinActor) where players/helpers can dump collected trash to clear their inventory.

9. MANAGE PROGRESSION WITH UNLOCK ZONES Place "HCF Unlock Zone" (AHCFUnlockZone) actors in your level. Assign the "Cost Amount" and target actors in the "Unlock Targets" (e.g., stations, counters) and "Destroy Targets On Unlock" (e.g., visual blockades). Unlock zones can consume money or specific items to complete.

10. SETUP UPGRADE ROOMS Place "HCF Upgrade Zone" (AHCFUpgradeZone) actors. Assign an upgrade widget class derived from "HCFUpgradeWidget" (UHCFUpgradeWidget) to open a UI when the player enters. Link helper spawn points or item assets to create upgrade paths for helper capacity, movement speed, player stats, or item sell values.

11. CONFIGURE TUTORIALS AND SAVE SYSTEMS Place "HCF Guide Path Actor" (AHCFGuidePathActor) to render dotted paths leading players to current objectives. For persistence, use the "HCF Save Blueprint Library" (UHCFSaveBlueprintLibrary) functions. Add the "HCF Save Id Component" (UHCFSaveIdComponent) to actors that need to persist state (such as unlock zones, counters, and stations) and assign unique Save IDs.

================================================================================ CLASSES & ACTORS: AVAILABLE BLUEPRINT NODES (FUNCTIONS & DELEGATES) ================================================================================

1. UHCFItemDefinition (Data Asset) FName GetResolvedItemId() const Returns the stable item ID. If ItemId is set to None, returns the Asset name. UStaticMesh GetWorldMesh() const Returns the Static Mesh used when this item is in the world. UStaticMesh GetPaymentMesh() const Returns the Static Mesh used during unlock zone flying payments. Falls back to the world mesh if no override is set.

2. UHCFInventoryComponent (Actor Component) Delegates (BlueprintAssignable): OnInventoryChanged(int32 Money, int32 CarriedItems, int32 MaxCarriedItems) OnMoneyChanged(int32 Money, int32 DeltaMoney) OnCarriedItemsChanged(UHCFItemDefinition ItemDef, int32 Count, int32 Delta, int32 MaxCount) OnMaxCarriedItemsChanged(int32 MaxCount, int32 DeltaMaxCount) OnCarriedItemTypeChanged(UHCFItemDefinition NewItem, UHCFItemDefinition PrevItem) OnItemAccepted(UHCFItemDefinition ItemDef, int32 Accepted, int32 Count, int32 MaxCount) OnItemPickedUp(UHCFItemDefinition ItemDef, int32 PickedUp, int32 Count, int32 MaxCount) OnItemRejected(UHCFItemDefinition ItemDef, int32 Requested, int32 Rejected, int32 Space) OnInventoryFullChanged(bool bIsFull, int32 Count, int32 MaxCount) OnCutterEnabledChanged(bool bCutterEnabled) OnCarryVisualsRefreshed(int32 VisibleCarriedItems)

Nodes (BlueprintCallable / Pure): int32 AddMoney(int32 Amount) Adds money. Returns the new total. bool SpendMoney(int32 Amount) Deducts money. Returns true if successful. bool HasMoney(int32 Amount) const Returns true if money is greater than or equal to Amount. int32 AddCarriedItems(int32 Amount) Adds items of the current carried type. Returns the amount successfully added. int32 AddCarriedItemsOfType(int32 Amount, UHCFItemDefinition ItemDefinition) Adds items of a specific type. If empty or matching, proceeds. Returns amount added. void GiveItemToInventoryFromWorld(UHCFItemDefinition ItemDef, int32 Amount, FVector StartLocation, FRotator StartRotation, bool bAnimateToInventory, float FlyDuration, float FlyArcHeight, float TimeBetweenItems, int32& AcceptedAmount, int32& RejectedAmount) Launches item visuals flying from a world location into the inventory. int32 GetAvailableCarrySpace() const Returns remaining item capacity. int32 GetAvailableCarrySpaceForItem(UHCFItemDefinition ItemDefinition) const Returns space left for this specific item type. int32 RemoveCarriedItems(int32 Amount) Removes items from the stack. Returns number removed. int32 RemoveCarriedItemsOfType(int32 Amount, UHCFItemDefinition RequiredItemDefinition) Removes items of a specific type. Returns number removed. bool HasCarriedItems(int32 Amount) const Returns true if inventory carries at least Amount of items. bool HasCarriedItemsOfType(int32 Amount, UHCFItemDefinition RequiredItemDef) const Returns true if carrying at least Amount of the specified item type. void SetMaxCarriedItems(int32 NewMaxCarriedItems) Sets a new capacity limit and broadcasts updates. void ClearCarriedItems() Empties all carried items and destroys visuals. void SetMoney(int32 NewMoney) Sets money to a specific value. USceneComponent GetCarryStackAnchor() const Returns the scene component anchor where visual items are attached. FVector GetCarryStackWorldLocationForIndex(int32 ItemIndex) Returns the world location for a specific index in the visual stack. UStaticMesh GetCurrentCarriedPaymentMesh() const Returns the payment mesh for the item currently being carried. FVector GetCurrentCarriedPaymentScale() const Returns the payment scale for the item currently being carried. FRotator GetCurrentCarriedPaymentRotation() const Returns the payment rotation for the item currently being carried. UHCFItemDefinition GetCurrentCarriedItemDefinition() const Returns the item asset currently carried. void SetCutterMeshEnabled(bool bNewEnabled) Enables or disables the rotating tool mesh. bool IsCutterMeshEnabled() const Returns true if the cutter mesh is currently active. UStaticMeshComponent GetCutterMeshComponent() const Returns the static mesh component for the cutter. bool IsCutterComponent(const UPrimitiveComponent Component) const Returns true if the primitive component matches the cutter mesh component. void PlayTakeItemSound() const Plays the inventory's take item audio. void PlayDropItemSound() const Plays the inventory's drop item audio. void PlayCutterEnabledSound() Starts the cutter loop/play audio. void StopCutterEnabledSound() Stops the loop audio for the cutter.

3. UHCFCarryIKComponent (Actor Component) Delegates: OnCarryIKStateChanged(bool bCarryPoseActive, float TargetIKAlpha)

Nodes (BlueprintCallable / Pure): void SetCarryIKEnabled(bool bNewEnabled) Master toggle for carrying hand IK functionality. void SetManualCarryPoseActive(bool bNewActive) Toggles carry pose manually if auto activation is disabled. void SetInventoryComponent(UHCFInventoryComponent NewInventoryComponent) Manually binds a specific inventory component. void RefreshCarryIKTargets() Updates position/rotation arrows for the hand effectors immediately. bool IsCarryPoseActive() const Returns true if the carry pose is currently active and blending. bool IsCarryingItems() const Returns true if the linked inventory has items. float GetCarryIKAlpha() const Returns the current blended IK alpha value (0.0 to 1.0). float GetTwoBoneIKAlpha() const Returns target TwoBoneIK alpha (0.0 if mode is Pose Animation Only). FName GetLeftHandBoneName() const Returns the skeletal name for the left hand. FName GetRightHandBoneName() const Returns the skeletal name for the right hand. UArrowComponent GetLeftHandCarryTargetComponent() const Returns the Left Hand Target Arrow component. UArrowComponent GetRightHandCarryTargetComponent() const Returns the Right Hand Target Arrow component. FTransform GetLeftHandCarryTargetWorldTransform() const Returns Left Hand Target world transform. FTransform GetRightHandCarryTargetWorldTransform() const Returns Right Hand Target world transform. FVector GetLeftHandCarryTargetWorldLocation() const Returns Left Hand Target world position. FVector GetRightHandCarryTargetWorldLocation() const Returns Right Hand Target world position. FVector GetLeftHandCarryTargetComponentSpaceLocation(USkeletalMeshComponent SkelMeshComp) const Returns Left Hand target converted to Component Space of the skeletal mesh. FVector GetRightHandCarryTargetComponentSpaceLocation(USkeletalMeshComponent SkelMeshComp) const Returns Right Hand target converted to Component Space of the skeletal mesh. EHCFCarryPoseMode GetCarryPoseMode() const Returns carry mode (IK Only, Animation Only, or IK + Animation). bool ShouldUseTwoBoneIK() const Returns true if current settings/state require TwoBoneIK. bool ShouldUseCarryPoseAnimation() const Returns true if current settings/state require custom Pose Animation. UAnimSequenceBase GetCarryPoseAnimation() const Returns the assigned custom pose animation asset. float GetCarryPoseAlpha() const Returns target animation blend strength. FName GetLeftCarryPoseRootBoneName() const Returns skeletal branch root for left arm blending. FName GetRightCarryPoseRootBoneName() const Returns skeletal branch root for right arm blending. int32 GetCarryPoseBlendDepth() const Returns Layered Blend Per Bone depth.

4. AHCFBaseCustomerCharacter (Character) Delegates: OnReachedQueueSlot(AHCFBaseCustomerCharacter Customer) OnReachedPostServiceTarget(AHCFBaseCustomerCharacter Customer)

Nodes (BlueprintCallable / Pure): void MoveToQueueSlot(AHCFServiceCounter ServiceCounter, int32 QueueIndex, float QueueSpacing) Commands the customer to walk into a specific slot in a cashier queue. void SetQueueTarget(FVector NewTargetLocation, FRotator NewWaitingRotation) Updates wait positions for custom queue calculations. void StopQueueMovement() Aborts pathing and locks position. void MoveToExitAndDestroy(FVector ExitLocation, FRotator ExitRotation) Routes the customer to the exit point and destroys them. void MoveToPostServiceTarget(FVector TargetLocation, FRotator TargetRotation, bool bDestroyOnReached, bool bBroadcastOnReached) Routes customer to custom targets (like dining tables) after service. void ReceiveServiceItemVisual(UStaticMesh Mesh, FVector Scale, FRotator Rot, FVector StartLoc, float FlyDuration, float FlyArcHeight, bool bStackOnCustomer) Animates a sold item flying from the counter onto the customer's head/hand. void DestroyAfterServiceItemsComplete() Triggers self destruction after all active item animations finish landing. bool IsMovingToQueue() const Returns true if pathing toward a cashier queue slot. int32 GetQueueIndex() const Returns the assigned index in the line. int32 GetStackedServiceItemCount() const Returns the number of items currently stacked on this customer. int32 GetActiveServiceItemVisualCount() const Returns number of flying items that have not yet landed on the customer. UStaticMeshComponent PopTopStackedServiceItemVisual() Removes and returns the top visual item mesh component from the stack. void SetCustomerOverheadMessage(FText Message, EHCFOverheadMessageMood Mood) Manually overrides dialog text and mood. void ClearCustomerOverheadMessage() Hides overhead dialogue. FText GetCurrentOverheadMessage() const Returns the current dialog text. EHCFOverheadMessageMood GetCurrentOverheadMessageMood() const Returns current mood (Neutral, Good, Impatient, Angry). void ShowNoDiningTableOverheadMessage() Triggers spawner wait dialogue when no dining tables exist. void ShowNoFreeTableOverheadMessage() Triggers spawner wait dialogue when tables are full. void ShowTableBlockedByTrashOverheadMessage() Triggers spawner wait dialogue when tables are blocked by trash.

5. AHCFCustomerSpawner (Actor) Nodes (BlueprintCallable / Pure): AHCFBaseCustomerCharacter SpawnCustomer() Spawns a customer at the spawn arrow and starts queue routing. void RefreshCustomerQueue() Orders all queued line customers to advance. void ClearSpawnedCustomers() Despawns and deletes all currently active customers managed by this spawner. int32 GetQueuedCustomerCount() const Returns count of customers waiting in the linked service counter line. void SetSpawnerUnlocked(bool bNewUnlocked) Unlocks spawning activity. bool IsUnlocked() const Returns true if active/unlocked.

6. AHCFUnlockZone (Actor) Delegates: OnUnlockProgressChanged(int32 PaidAmount, float Progress01) OnUnlocked()

Nodes (BlueprintCallable / Pure): float GetProgress01() const Returns current paid ratio (0.0 to 1.0). int32 GetPaidAmount() const Returns amount of currency already spent here. bool IsUnlocked() const Returns true if cost has been fully paid. bool IsZoneAvailable() const Returns true if this zone can currently be seen and paid. void SetUnlocked(bool bNewUnlocked) Manually forces unlocked state (triggers target unlocks). void SetZoneAvailable(bool bNewAvailable) Manually toggles visibility and overlap checks. void SetPaidAmountForSave(int32 NewPaidAmount) Quietly restores payment progress from a save slot without flying visuals. void SetUnlockedForSave(bool bNewUnlocked) Quietly restores completed state from a save slot.

7. AHCFDiningTable (Actor) Nodes (BlueprintCallable / Pure): void SetDiningTableUnlocked(bool bNewUnlocked) Unlocks or locks the table for customer use. bool IsUnlocked() const Returns true if table is active. int32 GetSeatCount() const Returns total configured seats on this table. int32 GetAvailableSeatCount() const Returns number of seats not reserved and not blocked by trash. bool TryReserveSeat(AHCFBaseCustomerCharacter Cust, int32& OutIndex, FVector& OutLoc, FRotator& OutRot) Checks availability and claims a seat. Returns seat transform info. void ReleaseSeat(int32 SeatIndex) Clears reservations on a seat index. void ReleaseSeatForCustomer(AHCFBaseCustomerCharacter Customer) Finds and clears reservations for a specific customer. void FinishMealAndReleaseSeat(int32 SeatIndex) Finishes dining flow, spawns trash if configured, and releases reservation. void ClearSeatTrash(int32 SeatIndex) Destroys trash actor assigned to a seat. bool HasClearableTrash() const Returns true if any seat currently contains trash. int32 GetActiveTrashCount() const Returns total number of trash piles on the table. bool HasReachedMaxActiveTrash() const Returns true if table wide trash capacity limit is reached. bool TryGetFirstTrashWorkLocation(FVector& OutLoc) const Returns world location of the first available trash pile for helpers. bool ClearFirstTrash() Instantly deletes the first trash actor. bool CanCollectFirstTrashIntoInventory(UHCFInventoryComponent Inventory) const Returns true if the inventory has space to receive the trash item. bool CollectFirstTrashIntoInventory(UHCFInventoryComponent Inventory) Gathers first trash item into inventory. int32 GetCollectableTrashCountForInventory(UHCFInventoryComponent Inv) const Returns count of trash piles matching the inventory capacity. int32 CollectTrashIntoInventory(UHCFInventoryComponent Inv, int32 MaxItems) Gathers multiple trash piles into inventory. Returns amount collected. float GetEatDurationSeconds() const Returns how long customers sit eating at this table. void NotifyCustomerArrivedAtSeat(AHCFBaseCustomerCharacter Cust, int32 Index) const Plays seat arrival animations. bool StartEatingNextItem(AHCFBaseCustomerCharacter Customer, int32 SeatIndex) Pops food from customer stack and launches it onto the table. void FinishCurrentDiningItem(AHCFBaseCustomerCharacter Customer, int32 SeatIndex) Destroys the visual item model currently on the table for this seat. FVector GetSeatWorldLocation(int32 SeatIndex) const Returns seat location. FRotator GetSeatWorldRotation(int32 SeatIndex) const Returns seat rotation. FVector GetSeatItemStackWorldLocation(int32 SeatIndex) const Returns table food stack location for a seat. FRotator GetSeatItemStackWorldRotation(int32 SeatIndex) const Returns table food stack rotation for a seat.

8. AHCFDiningTrashActor (Actor) Nodes (BlueprintCallable / Pure): void InitializeTrash(AHCFDiningTable OwnerTable, int32 SeatIndex, UHCFItemDefinition TrashItemDef, int32 Amount, FVector RelLoc, FRotator RelRot, FVector RelScale, FVector BoxExtent, bool bAnimate, float Duration, float Height, float Delay) Initializes trash settings when spawned by a dining table. void ClearTrash() Destroys this actor and clears the table seat block. FVector GetTrashClearWorldLocation() const Returns world center position of the overlap cleanup box. bool CanPickupIntoInventory(UHCFInventoryComponent Inventory) const Returns true if inventory has capacity for this trash type. bool TryPickupIntoInventory(UHCFInventoryComponent Inventory) Cleans trash into overlapping inventory.

9. AHCFDiningTrashBinActor (Actor) Delegates: OnStoredTrashChanged(int32 StoredTrash)

Nodes (BlueprintCallable / Pure): bool IsUnlocked() const Returns true if bin is active. void SetTrashBinUnlocked(bool bNewUnlocked) Toggles unlocked state. int32 GetStoredTrash() const Returns total count of trash items dumped. void SetStoredTrashForSave(int32 NewStoredTrash) Quietly restores dumped trash count from a save slot. bool CanAcceptInventory(UHCFInventoryComponent Inventory) const Returns true if overlapping inventory holds the accepted trash item. int32 DepositFromInventory(UHCFInventoryComponent Inventory) Pulls trash items from the inventory and deletes them. Returns amount. FVector GetDropBoxWorldLocation() const Returns drop box world position. UHCFItemDefinition GetAcceptedTrashItemDefinition() const Returns item asset configured for trash.

10. AHCFServiceCounter (Actor) Delegates: OnStoredItemsChanged(int32 StoredItems) OnStoredMoneyChanged(int32 StoredMoney)

Nodes (BlueprintCallable / Pure): int32 GetStoredItems() const Returns current stock count. int32 GetStoredMoney() const Returns current accumulated money count. bool IsUnlocked() const Returns true if active. void SetCounterUnlocked(bool bNewUnlocked) Toggles cashier counter active state. void SetStoredItemsForSave(int32 NewStoredItems) Restores stored stock from save slot. void SetStoredMoneyForSave(int32 NewStoredMoney) Restores accumulated cash from save slot. int32 DepositFromInventory(UHCFInventoryComponent Inventory) Deposits items from player inventory. Returns amount accepted. int32 DepositFromHelperInventory(UHCFInventoryComponent Inventory) Deposits items from helper inventory. Returns amount accepted. bool SellOneStoredItem(UHCFInventoryComponent MoneyReceiver) Sells one item and adds money to receiver. Returns true if stock was available. bool ServeOneStoredItemToCustomer(AHCFBaseCustomerCharacter Customer) Launches one item from counter stack to customer. Returns true if successful. bool HasServingWorkerOverlap() const Returns true if a player/helper stands at the cashier spot. FVector GetCustomerQueueLocation(int32 QueueIndex, float QueueSpacing) const Returns wait position for a specific index in the customer line. FRotator GetCustomerQueueRotation() const Returns wait direction for customers. void RefreshServiceCounterWidgetNow() Forces UI component text and icon refreshes.

11. AHCFProductionStation (Actor) Delegates: OnStoredItemsChanged(int32 StoredItems, EHCFMachineState MachineState) OnItemsCollected(UHCFInventoryComponent Inventory, int32 CollectedItems)

Nodes (BlueprintCallable / Pure): int32 GetStoredItems() const Returns current stock on the machine. bool IsUnlocked() const Returns true if unlocked. void SetStationUnlocked(bool bNewUnlocked) Toggles station machine active state. void SetStoredItemsForSave(int32 NewStoredItems) Restores stock count from save slot. int32 CollectIntoInventory(UHCFInventoryComponent Inventory) Harvests stock into overlapping inventory. Returns count.

12. AHCFCropGrowActor (Actor) Nodes (BlueprintCallable / Pure): void StartGrowing() Resets scale and starts growth interpolation. void ForceGrowComplete() Instantly snaps crop scale to max size. bool IsFullyGrown() const Returns true if crop has finished growing. bool IsCut() const Returns true if crop has been cut and is simulating physics. void SetCropUnlocked(bool bNewUnlocked) Toggles active state. bool IsUnlocked() const Returns true if crop is active. bool CanHarvestForInventory(UHCFInventoryComponent Inv, UHCFItemDef ReqItem) const Returns true if crop is grown, matches ReqItem, and Inv has space. int32 CollectIntoInventory(UHCFInventoryComponent Inventory) Instantly gathers crop into inventory (used by helpers). Returns amount. FVector GetHelperWorkLocation() const Returns world location helpers route to before harvesting.

13. AHCFFarmCutterZone (Actor) Nodes (BlueprintCallable / Pure): void SetFarmAreaUnlocked(bool bNewUnlocked) Toggles active state. bool IsUnlocked() const Returns true if active.

14. AHCFHelperCharacter (Character) Nodes (BlueprintCallable / Pure): void SetHelperUnlocked(bool bNewUnlocked) Toggles helper AI active state. bool IsUnlocked() const Returns true if active. EHCFHelperWorkState GetHelperWorkState() const Returns current behavior state (Idle, MovingToStation, Waiting, delivering). UHCFInventoryComponent GetHelperInventory() const Returns helper's local inventory component.

15. AHCFHelperSpawnPoint (Actor) Events (BlueprintImplementable): BP OnSpawnPointStateChanged(EHCFHelperSpawnPointState NewState) BP OnHelperSpawned(AHCFHelperCharacter Helper) BP OnHelperDespawned(AHCFHelperCharacter Helper)

Nodes (BlueprintCallable / Pure): void SetSpawnPointUnlocked(bool bNewUnlocked) Unlocks spawn point. Can auto spawn a worker. bool IsSpawnPointUnlocked() const Returns true if spawn point is unlocked. bool CanSpawnHelper() const Returns true if unlocked and limit is not exceeded. bool CanSpawnMoreHelpers() const Returns true if spawned counts are below limit. AHCFHelperCharacter SpawnHelper() Creates and configures the helper character. Returns the actor ref. void DespawnHelper() Destroys the first spawned helper character. bool IsHelperSpawned() const Returns true if at least one worker is alive. AHCFHelperCharacter GetSpawnedHelper() const Returns reference to the first spawned worker. TArray<AHCFHelperCharacter GetSpawnedHelpers() const Returns list of all active helpers created by this point. int32 GetSpawnedHelperCount() const Returns active worker count. void DespawnAllHelpers() Destroys every worker created by this point.

16. AHCFUpgradeZone (Actor) Events: BP OnUpgradeWidgetOpened(UHCFUpgradeWidget Widget, AActor PlayerActor) BP OnUpgradeWidgetClosed() BP OnUpgradeZoneAvailabilityChanged(bool bIsAvailable)

Nodes (BlueprintCallable / Pure): UHCFUpgradeWidget OpenUpgradeWidget(AActor PlayerActor) Spawns the upgrade user interface. Returns the widget pointer. void CloseUpgradeWidget() Destroys UI and restores player input modes. bool IsUpgradeWidgetOpen() const Returns true if UI is visible. UHCFUpgradeWidget GetActiveUpgradeWidget() const Returns active widget pointer. void SetUpgradeZoneAvailable(bool bNewAvailable) Toggles trigger overlap availability. bool IsUpgradeZoneAvailable() const Returns availability. TArray<AHCFHelperSpawnPoint GetHelperSpawnPoints() const Returns list of helper spawn points linked to this room. TArray<AHCFHelperCharacter GetUpgradeHelpers() const Returns list of helpers linked directly to this room. TArray<UHCFItemDefinition GetUpgradeItemDefinitions() const Returns list of items linked to this room.

17. UHCFUpgradeWidget (Widget UI) Events: BP OnUpgradeZoneOpened(AActor PlayerActor, AHCFUpgradeZone Zone) BP OnHelperPurchaseResult(AHCFHelperSpawnPoint SpawnPoint, AHCFHelperCharacter SpawnedHelper, EHCFUpgradePurchaseResult Result)

Nodes (BlueprintCallable / Pure): void InitializeUpgradeWidget(AActor PlayerActor, AHCFUpgradeZone Zone) Binds widget context. AHCFUpgradeZone GetUpgradeZone() const Returns linked zone actor. TArray<AHCFHelperSpawnPoint GetUpgradeZoneHelperSpawnPoints() const Returns spawn points. AHCFHelperSpawnPoint GetUpgradeZoneHelperSpawnPointByTag(FName SpawnPointTag) const Finds spawn point by actor tag. AHCFHelperSpawnPoint GetFirstUpgradeZoneHelperSpawnPoint() const Returns first spawn point. AHCFHelperSpawnPoint GetUpgradeZoneHelperSpawnPointAtIndex(int32 Index) const Returns spawn point by index. AHCFHelperSpawnPoint GetUpgradeZoneHelperSpawnPointBySpawnedHelperTag(FName SpawnedHelperActorTag) const Finds spawn point by target helper tag. TArray<AHCFHelperCharacter GetUpgradeZoneHelpers() const Returns directly linked helpers. TArray<AHCFHelperCharacter GetUpgradeZoneSpawnedHelpers() const Returns helpers created by linked spawn points. TArray<AHCFHelperCharacter GetUpgradeZoneAllHelpers() const Returns combined list of direct and spawned helpers. AHCFHelperCharacter GetUpgradeZoneHelperByTag(FName HelperTag) const Finds direct helper by tag. TArray<UHCFItemDefinition GetUpgradeZoneItemDefinitions() const Returns linked items. bool TryBuyHelperFromSpawnPoint(AHCFHelperSpawnPoint SpawnPoint, int32 Cost, AHCFHelperCharacter & SpawnedHelper) Buys helper. Returns true on success. bool TryBuyHelperFromSpawnPointWithResult(AHCFHelperSpawnPoint SpawnPoint, int32 Cost, AHCFHelperCharacter & SpawnedHelper, EHCFUpgradePurchaseResult& Result) Buys helper and outputs detailed results. bool TryUpgradeSpawnedHelperMaxCarriedItems(AHCFHelperSpawnPoint SpawnPoint, int32 Cost, int32 DeltaMaxCarriedItems) Upgrades capacity of worker spawned by spawn point. bool TryUpgradeHelpersMaxCarriedItems(TArray<AHCFHelperCharacter Helpers, int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) Upgrades capacity of multiple helpers. bool TryUpgradeAllSpawnedHelpersMaxCarriedItems(AHCFHelperSpawnPoint SpawnPoint, int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) Upgrades capacity of all active workers created by a spawn point. bool TryUpgradeUpgradeZoneHelpersMaxCarriedItems(int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) Upgrades capacity of all helpers linked to this zone. bool TryUpgradeHelpersByTagMaxCarriedItems(FName HelperTag, bool bOnlyUnlocked, int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) Upgrades capacity of global workers matching a tag.

18. UHCFInGameMenuWidget (Widget UI) Events: BP OnPlayerInfoUpdated(AActor PlayerActor, int32 Money, UTexture2D MoneyIcon, int32 CarriedItems, int32 MaxCarriedItems, float Speed, float MaxSpeed)

Nodes (BlueprintCallable / Pure): void SetObservedPlayer(AActor NewObservedPlayer) Binds player character to UI updates. void RefreshPlayerInfo() Manually triggers info broadcast. AActor GetObservedPlayer() const Returns observed character actor. UHCFInventoryComponent GetObservedPlayerInventory() const Returns player's inventory component. int32 GetObservedPlayerMoney() const Returns player's current money. UTexture2D GetObservedPlayerMoneyIconTexture() const Returns current money icon texture asset. bool HasObservedPlayerMoney(int32 Amount) const Returns true if player can afford Amount. bool SpendObservedPlayerMoney(int32 Amount) Deducts player money. Returns true if successful. int32 AddObservedPlayerMoney(int32 Amount) Adds money to player. Returns new total. bool SetObservedPlayerMaxWalkSpeed(float NewMaxWalkSpeed) Sets character max walk speed. bool AddObservedPlayerMaxWalkSpeed(float DeltaMaxWalkSpeed) Increments character max walk speed. float GetObservedPlayerMaxWalkSpeed() const Returns player walk speed. bool SetObservedPlayerMaxCarriedItems(int32 NewMaxCarriedItems) Sets player inventory capacity. bool AddObservedPlayerMaxCarriedItems(int32 DeltaMaxCarriedItems) Increments player inventory capacity. int32 GetObservedPlayerMaxCarriedItems() const Returns player capacity. bool TryUpgradeObservedPlayerMaxWalkSpeed(int32 Cost, float DeltaMaxWalkSpeed) Spends money and increases player speed. bool TryUpgradeObservedPlayerMaxCarriedItems(int32 Cost, int32 DeltaMaxCarriedItems) Spends money and increases player capacity. bool SetHelperMaxCarriedItems(AHCFHelperCharacter Helper, int32 NewMaxCarriedItems) Sets worker capacity. bool AddHelperMaxCarriedItems(AHCFHelperCharacter Helper, int32 DeltaMaxCarriedItems) Increments worker capacity. int32 GetHelperMaxCarriedItems(AHCFHelperCharacter Helper) const Returns worker capacity. TArray<AHCFHelperCharacter GetAllHelpers(bool bOnlyUnlocked = false) const Returns all helpers in the level. AHCFHelperCharacter GetFirstHelper(bool bOnlyUnlocked = false) const Returns first helper in the level. AHCFHelperCharacter GetHelperByActorTag(FName HelperTag, bool bOnlyUnlocked = false) const Finds helper by tag. bool TryUpgradeHelperMaxCarriedItems(AHCFHelperCharacter Helper, int32 Cost, int32 DeltaMaxCarriedItems) Spends money and upgrades helper capacity. bool SetItemDefinitionSellValue(UHCFItemDefinition ItemDef, int32 NewSellValue) Updates item sell value. bool AddItemDefinitionSellValue(UHCFItemDefinition ItemDef, int32 DeltaSellValue) Increments item sell value. int32 GetItemDefinitionSellValue(UHCFItemDefinition ItemDef) const Returns item sell value. bool TryUpgradeItemDefinitionSellValue(UHCFItemDefinition ItemDef, int32 Cost, int32 DeltaSellValue) Spends money and increases item sell value.

19. AHCFGuidePathActor (Actor) Nodes (BlueprintCallable / Pure): void ActivateGuide() Shows guide path. void DeactivateGuide() Hides guide path. void SetGuideEnabled(bool bNewEnabled) Enables or disables the guide path logic. bool IsGuideActive() const Returns true if path is visible. bool IsGuideEnabled() const Returns true if logic is enabled. FVector GetGuideTargetLocation() const Returns target destination. int32 GetCollectedItemsFromTarget() const Returns progress count for harvest tasks. int32 GetActiveGuideStepIndex() const Returns current index of active tutorial step. bool IsUsingGuideSteps() const Returns true if multiple steps are configured. void ResetGuideSequence() Restarts step sequence from index 0. void SetGuideSaveState(bool bNewGuideEnabled, bool bNewGuideActive, int32 NewActiveGuideStepIndex, int32 NewCollectedItemsFromTarget) Restores path state from save game slot.

20. UHCFSaveBlueprintLibrary (Kismet Library) Nodes (BlueprintCallable / Pure): static bool SaveHCFGame(UObject WorldContext, const FString& SlotName, int32 UserIndex, bool bIncludeTransforms) Captures, compiles, and writes the save game file. static bool LoadHCFGame(UObject WorldContext, const FString& SlotName, int32 UserIndex, bool bRestoreTransforms) Reads, applies, and updates actors from the save game file. static UHCFSaveGame CaptureHCFSaveGame(UObject WorldContext, bool bIncludeTransforms) Captures game variables and returns a SaveGame object. static bool ApplyHCFSaveGame(UObject WorldContext, UHCFSaveGame SaveGame, bool bRestoreTransforms) Restores variables in matching actors from a SaveGame object. static bool WriteHCFSaveGame(UHCFSaveGame SaveGame, const FString& SlotName, int32 UserIndex) Writes SaveGame object to disk. static UHCFSaveGame ReadHCFSaveGame(const FString& SlotName, int32 UserIndex) Reads SaveGame object from disk. static bool DoesHCFSaveExist(const FString& SlotName, int32 UserIndex) Returns true if save slot exists on disk. static bool DeleteHCFSave(const FString& SlotName, int32 UserIndex) Deletes save slot from disk.

================================================================================ ACTOR / COMPONENT SETTINGS & PROPERTIES (DETAILS) ================================================================================

1. UHCFItemDefinition (Data Asset Properties) ItemId (FName) Stable item identity. If set to None, asset name is used. DisplayName (FText) Friendly name shown in editor widgets or game UI. ItemMesh (UStaticMesh ) Mesh component used when the item exists in the world. ItemScale (FVector, Default: 1.0) Scaling applied to the world item mesh. ItemRotation (FRotator) Rotation applied to the world item mesh. CarryStackOffset (FVector, Default: Z=10.0) Height offset added for each stacked item in a character's inventory. CarryItemScale (FVector, Default: 1.0) Scale of the mesh when carried on characters. CarryItemRotation (FRotator) Rotation of the mesh when carried on characters. MaxVisibleCarriedItemsOverride (int32) Stack size override for character stacks. 0 means use inventory settings. PaymentMeshOverride (UStaticMesh ) Mesh used when flying into unlock zones. If empty, world mesh is used. PaymentScale / PaymentRotation (FVector / FRotator) Scale and rotation adjustments when item is used as flying payments. IconTexture (UTexture2D ) UI texture icon used in inventory, progress widgets, and store overlays. Description (FText) Organization details. SellValue (int32, Default: 1) Money generated when sold at service counters.

2. UHCFInventoryComponent (Properties) Money (int32, Default: 0) Starting money value. CarriedItems (int32, Default: 0) Starting item stack size. MaxCarriedItems (int32, Default: 10) Maximum capacity of items. bCanPickupServiceCounterMoney (bool, Default: true) If true, standing at cashiers collects cash. Disable for helpers. bCreateCarryStackAnchor (bool, Default: true) If true, creates an Arrow component at registration to attach stack meshes. CarryStackRelativeLocation (FVector, Default: Y= 45.0, Z=75.0) Positioning of the item stack anchor. CarryStackRelativeRotation (FRotator) Rotation of the item stack anchor. CarryItemStackOffset (FVector, Default: Z=10.0) Default height spacing between items in the stack. CarryItemScale (FVector, Default: 1.0) Default item scale in stack. CarryItemRotation (FRotator) Default item rotation in stack. MaxVisibleCarriedItems (int32, Default: 30) Cap on physical mesh components spawned to represent the stack. MoneyPaymentMesh (UStaticMesh ) Mesh used for flying money bills. MoneyPaymentScale / MoneyPaymentRotation (FVector / FRotator) Transform adjustments for flying money. MoneyIconTexture (UTexture2D ) Icon used by progress bars during money unlocks. bEnableCutterMesh (bool, Default: false) Toggles visibility and collision of the tool cutter. CutterMesh (UStaticMesh ) Static mesh used for the tool cutter. CutterRelativeLocation (FVector, Default: Z=45.0) Location offset of the cutter on the character. CutterRelativeRotation (FRotator) Rotation offset of the cutter on the character. CutterRelativeScale (FVector, Default: 1.0) Scale offset of the cutter on the character. CutterRotationSpeedDegreesPerSecond (float, Default: 720.0f) Yaw rotation speed of the active cutter. CutterCollisionEnabled (ECollisionEnabled, Default: QueryOnly) Collision type for cutter overlaps. CutterCollisionProfileName (FName, Default: OverlapAllDynamic) Collision Profile name for cutter overlaps. TakeItemSound / TakeItemSoundVolume (USoundBase / float) Audio asset played when receiving items from production. DropItemSound / DropItemSoundVolume (USoundBase / float) Audio asset played when paying items to zones. CutterEnabledSound / CutterEnabledSoundVolume (USoundBase / float) Audio asset played/looped when cutter turns on. bLoopCutterEnabledSoundWhileCutterIsEnabled (bool, Default: false) If true, loop sound plays attached and stops when disabled.

3. UHCFCarryIKComponent (Properties) bCarryIKEnabled (bool, Default: true) Enable/disable IK calculations. bAutoBindInventory (bool, Default: true) Auto scans owner actor to find a UHCFInventoryComponent. InventoryComponent (UHCFInventoryComponent ) Manually linked inventory component. bAutoActivateWhenCarrying (bool, Default: true) If true, IK activates automatically when carrying 0 items. bManualCarryPoseActive (bool, Default: false) Manual toggle when auto activation is off. BlendSpeed (float, Default: 10.0f) Speed at which IK alpha blends on/off. bFollowTopCarriedItem (bool, Default: true) If true, hands follow the height of the top item mesh in the stack. CarryReferenceComponent (USceneComponent ) Reference component for hand targets. Falls back to stack anchor. LeftHandBoneName / RightHandBoneName (FName, Default: hand l / hand r) Skeleton hand bones driven by the IK. LeftHandTargetOffset / RightHandTargetOffset (FVector) Relative target offset of hands from the stack center. LeftHandTargetRotationOffset / RightHandTargetRotationOffset (FRotator) Rotation offsets for hand positioning. CarryPoseMode (EHCFCarryPoseMode, Default: TwoBoneIKOnly) Sets output strategy: IK targets, Animation Blend, or both. CarryPoseAnimation (UAnimSequenceBase ) Pose animation used for wrist/palm/finger shapes. CarryPoseAlphaMultiplier (float, Default: 1.0f) Scaler for pose animation blend alpha. LeftCarryPoseRootBoneName / RightCarryPoseRootBoneName (FName, Default: clavicle l / clavicle r) Arm root bones used in Layered Blend Per Bone setups. CarryPoseBlendDepth (int32, Default: 4) Skeleton blend depth.

4. AHCFBaseCustomerCharacter (Properties) QueueMoveSpeed (float, Default: 260.0f) Customer movement speed while walking inside queue slots. QueueAcceptanceRadius (float, Default: 12.0f) Margin of arrival error at slot locations. bRotateTowardMovement (bool, Default: true) Toggles character yaw rotation toward movement velocity. bUseQueueRotationWhenWaiting (bool, Default: true) Snaps customer rotation to face the cashier when waiting. bUseNavigationWhenAvailable (bool, Default: true) Pathfinds using NavMesh when a path is found. Falls back to straight lines. bIgnorePawnCollision (bool, Default: true) Bypasses Pawn collision channel to prevent blockages in queues. CustomerItemStackRelativeLocation (FVector, Default: Y= 35.0, Z=80.0) Location of customer item carry anchor. CustomerItemStackRelativeRotation (FRotator) Rotation of customer item carry anchor. CustomerItemStackOffset (FVector, Default: Z=10.0) Visual height spacing for items stacked on the customer. bShowCustomerOverheadWidget (bool, Default: false) Toggles widget rendering above head. CustomerOverheadWidgetClass (TSubclassOf<UHCFBaseCustomerOverheadWidget ) Widget blueprint class to spawn. CustomerOverheadWidgetSpace (EWidgetSpace, Default: Screen) Sets 2D HUD or 3D world space rendering. CustomerOverheadWidgetDrawSize (FVector2D, Default: X=280.0, Y=110.0) Resolution of overhead widget canvas. CustomerOverheadWidgetRelativeLocation (FVector, Default: Z=150.0) Offset above customer head. CustomerOverheadWidgetRelativeScale (FVector, Default: 0.35) Widget scale. bEnableAutomaticOverheadMessages (bool, Default: true) Toggles automatic dialogue balloon rotations based on status. NeutralOverheadMessages (TArray<FText ) Dialogue pools used when customer is waiting normally. GoodOverheadMessages (TArray<FText ) Dialogue pools used after customer receives service. ImpatientOverheadMessages (TArray<FText ) Dialogue pools used when customer waits past Impatient timer. AngryOverheadMessages (TArray<FText ) Dialogue pools used when customer waits past Angry timer. NoDiningTableOverheadMessages (TArray<FText ) Dialogue pools used when spawner has no dining tables configured. NoFreeTableOverheadMessages (TArray<FText ) Dialogue pools used when dining tables are full. TableBlockedByTrashOverheadMessages (TArray<FText ) Dialogue pools used when seats are blocked by trash. ImpatientAfterSeconds (float, Default: 6.0f) Seconds at counter before switching to Impatient state. AngryAfterSeconds (float, Default: 12.0f) Seconds at counter before switching to Angry state. OverheadMessageChangeInterval (float, Default: 3.0f) Interval for cycling messages within same mood. bUseOverheadMessageTalkChance (bool, Default: true) Toggles random checks for dialogue messages. FrontQueueTalkChancePercent (float, Default: 85.0f) Talk probability for customer at front of queue. MiddleQueueTalkChancePercent (float, Default: 35.0f) Talk probability for middle line customers. BackQueueTalkChancePercent (float, Default: 12.0f) Talk probability for back line customers. BackQueueStartIndex (int32, Default: 3) Queue index where Back Queue Talk Chance begins. MovingTalkChancePercent (float, Default: 8.0f) Talk probability while customer is walking. ServedTalkChancePercent (float, Default: 90.0f) Talk probability after receiving cashier items.

5. AHCFCustomerSpawner (Properties) CustomerClass (TSubclassOf<AHCFBaseCustomerCharacter ) Class of customer spawned. TargetServiceCounter (AHCFServiceCounter ) Counter where spawned customers are routed. bUnlockedByDefault (bool, Default: true) Toggles starting active state. MaxQueuedCustomers (int32, Default: 6) Max capacity of the cashier queue line before spawning stops. InitialCustomers (int32, Default: 0) Starting customer count spawned on BeginPlay. bAutoSpawn (bool, Default: true) Periodically spawns new customers when queue slots open. SpawnIntervalSeconds (float, Default: 2.0f) Time between automatic spawns. QueueSpacing (float, Default: 95.0f) Distance between waiting slots in queue line. CustomerMoveSpeed (float, Default: 260.0f) Speed applied to customers. AfterGettingItemAction (EHCFPostServiceCustomerAction, Default: ReturnToSpawn) Decides routing after service (Despawn, Return to Spawn, Exit Point, Dining Table). DiningTables (TArray<AHCFDiningTable ) Dining tables linked for dining routing. bSearchAllTablesIfDiningTableListEmpty (bool, Default: true) If true, scans level for any unlocked table when DiningTables list is empty. DiningTableSearchRadius (float, Default: 0.0) Search distance constraint (0 means unlimited). DiningTableRetrySeconds (float, Default: 0.35s) Retry frequency when tables are full or blocked.

6. AHCFUnlockZone (Properties) UnlockWidgetClass (TSubclassOf<UHCFUnlockZoneWidget ) Widget blueprint class used. UnlockWidgetSpace (EWidgetSpace, Default: Screen) Widget 2D/3D space layout. UnlockWidgetDrawSize (FVector2D, Default: X=260, Y=120) Resolution of widget texture. UnlockWidgetRelativeLocation (FVector, Default: Z=1.0) Offset position of widget. UnlockWidgetRelativeRotation (FRotator, Default: Pitch=90.0) Spawns rotated flat on the ground. UnlockWidgetRelativeScale (FVector, Default: 1.0) Widget scale. bShowUnlockWidgetOnlyWhenOverlapping (bool, Default: false) Widget only renders when player stands inside box trigger. bEnableTargetPreviewMesh (bool, Default: false) Shows rotating ghost mesh representing target. bShowTargetPreviewOnlyWhenOverlapping (bool, Default: false) Ghost mesh only renders when player stands inside box trigger. TargetPreviewStaticMesh (UStaticMesh ) Static mesh used for target preview. TargetPreviewRelativeLocation / TargetPreviewRelativeRotation / TargetPreviewRelativeScale Transform adjustments for target preview mesh. bAutoRotateTargetPreview (bool, Default: true) Enables rotation of preview mesh. TargetPreviewRotationSpeed (FRotator, Default: Yaw=90.0) Spin speed of preview mesh. bPulseTargetPreviewOnPayment (bool, Default: true) Adds temporary scale expansion when money lands. TargetPreviewPaymentPulseSeconds (float, Default: 0.14s) Duration of payment pulse. TargetPreviewPaymentPulseScale (float, Default: 1.12) Maximum scale multiplier of payment pulse. bAnimatePayments (bool, Default: true) Toggles flying items from player inventory to the payment target. TargetMoneyPaymentVisuals (int32, Default: 40) Approximate total money bills launched during high cost unlocks. SingleMoneyVisualCostThreshold (int32, Default: 10) Unlocks costing below this launch exactly 1 bill per unit. MoneyMiddleProgressBoost (float, Default: 1.35) Multiplies bill values during middle payment phase. PaymentFlyDurationSeconds (float, Default: 0.28s) Flight time for payment bills/items. PaymentFlyArcHeight (float, Default: 70.0f) Spacing height offset of the flight curve. PaymentTargetRelativeLocation (FVector, Default: Z=35.0) Target destination relative location. DisplayName (FText) Screen name. CostAmount (int32, Default: 10) Total cost required to complete. Currency (EHCFPaymentCurrency, Default: Money) Payment method (Money or Item). RequiredItemDefinition (UHCFItemDefinition ) Required item asset when Currency is set to Item. UnitsPerPaymentPulse (int32, Default: 1) Amount consumed per tick. PaymentPulseSeconds (float, Default: 0.08s) Delay between ticks. bUnlockedByDefault (bool, Default: false) Available to player on level startup. bDestroyZoneOnUnlock (bool, Default: false) Destroys or disables the zone actor after completion. UnlockTargets (TArray<AActor ) Actors activated when unlock completes. DestroyTargetsOnUnlock (TArray<AActor ) Actors destroyed when unlock completes (e.g. blockers). TargetActionStepDelaySeconds (float, Default: 0.3s) Staggered timing interval between unlocking targets.

7. AHCFDiningTable (Properties) bUnlockedByDefault (bool, Default: true) Available on level startup. EatDurationSeconds (float, Default: 4.0f) Duration customer spends dining. EatDurationRandomnessSeconds (float, Default: 0.0f) Random variance added to dining time. SeatArrivalAnimation (UAnimSequenceBase ) Optional animation montage played on customer arrival. MaxActiveTrashItems (int32, Default: 0) Limit of trash on table. 0 means unlimited. ItemToTableFlyDurationSeconds (float, Default: 0.22s) Fly duration from customer stack to table. ItemToTableFlyArcHeight (float, Default: 35.0f) Flight curve height. bAnimateTrashPickupToInventory (bool, Default: true) Flying pickup animation for trash. TrashPickupFlyDurationSeconds (float, Default: 0.28s) Flight time for trash pickup. TrashPickupFlyArcHeight (float, Default: 65.0f) Height of trash flight. TimeBetweenTrashPickupItems (float, Default: 0.04s) Time spacing between trash pickups. TableStaticMesh (UStaticMesh ) Static mesh used for table. TableMeshRelativeLocation / TableMeshRelativeRotation / TableMeshRelativeScale Transform adjustments for table mesh. Seats (TArray<FHCFDiningTableSeat ) Struct list defining seat location, rotation, item stack locations, and trash settings. SeatRelativeLocation (FVector) SeatRelativeRotation (FRotator) ItemStackRelativeLocation (FVector, Default: Z=90.0) ItemStackRelativeRotation (FRotator) bLeaveTrashAfterMeal (bool) TrashChancePercent (float, Default: 100.0) TrashItemDefinition (UHCFItemDefinition ) TrashItemAmount (int32, Default: 1) TrashRelativeLocation (FVector, Default: Z=95.0) TrashRelativeRotation (FRotator) TrashRelativeScale (FVector, Default: 1.0) TrashClearBoxExtent (FVector, Default: 55, 55, 60) TableMeshCollisionEnabled / TableMeshCollisionProfileName (Collision settings) Collision modes applied to table.

8. AHCFDiningTrashActor (Properties) TrashItemDefinition (UHCFItemDefinition ) Configures item representation. TrashItemAmount (int32, Default: 1) Item count generated. bAnimateTrashPickupToInventory (bool, Default: true) Toggle flying pickup. TrashPickupFlyDurationSeconds / TrashPickupFlyArcHeight / TimeBetweenTrashPickupItems Flight curves. PickupRetrySeconds (float, Default: 0.12s) Refresh delay when player remains in trigger with full inventory. TrashRelativeLocation / TrashRelativeRotation / TrashRelativeScale Local transform adjustments. ClearBoxExtent (FVector, Default: 55, 55, 60) Box dimensions.

9. AHCFDiningTrashBinActor (Properties) bUnlockedByDefault (bool, Default: true) Active on start. AcceptedTrashItemDefinition (UHCFItemDefinition ) Trash item asset to accept. bKeepDisposedTrashVisible (bool, Default: false) Renders visual stacks of dumped trash in the bin. bAnimateTrashDropOff (bool, Default: true) Toggle flying drop off animation. DepositPulseSeconds (float, Default: 0.04s) Time spacing between launched trash items. DepositFlyDurationSeconds (float, Default: 0.22s) Flight duration. DepositFlyArcHeight (float, Default: 50.0f) Spacing height offset of flight curve. BinStaticMesh (UStaticMesh ) Static mesh used for trash bin. BinMeshRelativeLocation / BinMeshRelativeRotation / BinMeshRelativeScale Transform adjustments for bin. DropBoxRelativeLocation / DropBoxExtent (FVector) Overlap trigger setup. BinMeshCollisionEnabled / BinMeshCollisionProfileName (Collision settings) Collision modes applied to bin.

10. AHCFServiceCounter (Properties) bUnlockedByDefault (bool, Default: true) Active on start. bAllowPlayerDropOff (bool, Default: true) Allows players to deposit items. MaxStoredItems (int32, Default: 1000) Stock storage capacity. MoneyRewardPerItem (int32, Default: 5) Money generated per item when bUseAcceptedItemSellValue is false. AcceptedItemDefinition (UHCFItemDefinition ) Accepted item type. bUseAcceptedItemSellValue (bool, Default: true) Uses the item asset's SellValue setting for customer pricing. MaxVisibleStoredItems (int32, Default: 30) Limit on visual items stacked on the counter. StoredItemStackOffset (FVector, Default: Z=10.0) Spacing offset. MaxVisibleStoredMoney (int32, Default: 30) Limit on cash piles shown. StoredMoneyStackOffset (FVector, Default: Z=8.0) Height offset for cash piles. FallbackMoneyMesh / FallbackMoneyScale / FallbackMoneyRotation Mesh and transforms for cash stacks. bAnimatePlayerDropOff (bool, Default: true) Flying items on player deposit. DepositPulseSeconds (float, Default: 0.04s) Spacing delay between item launches. DepositFlyDurationSeconds / DepositFlyArcHeight (Flight curves) Spacing adjustments. bAllowPlayerMoneyPickup (bool, Default: true) Allows players to collect cashier cash. bAnimateMoneyPickup (bool, Default: true) Flying money bills to player. MoneyPickupPulseSeconds (float, Default: 0.04s) Spacing delay between money launches. MoneyPickupFlyDurationSeconds / MoneyPickupFlyArcHeight (Flight curves) Spacing adjustments. MoneyAmountPerPickupVisual (int32, Default: 1) Face value of cash mesh when bScaleMoneyPickupVisualValue is false. bScaleMoneyPickupVisualValue (bool, Default: true) Scales bills to match large counts. TargetMoneyPickupVisuals (int32, Default: 40) Approximate bills launched for large cashier cash collection. SingleMoneyPickupVisualThreshold (int32, Default: 20) Cash amounts below this launch exactly 1 bill per unit. bStackSoldItemsOnCustomer (bool, Default: true) Sold items stack on customer head/hand. bRequireWorkerOverlapToServeCustomers (bool, Default: false) Customer sales pause unless a player/helper stands at cashier box. CustomerServeFlyDurationSeconds / CustomerServeFlyArcHeight (Flight curves) Spacing adjustments. CounterStaticMesh (UStaticMesh ) Static mesh used for counter. CounterMeshRelativeLocation / CounterMeshRelativeRotation / CounterMeshRelativeScale Transform adjustments for counter. CounterMeshCollisionEnabled / CounterMeshCollisionProfileName (Collision settings) Collision modes applied. bAnimateUnlockReveal (bool, Default: true) Popup scale animation on unlock. UnlockRevealDurationSeconds (float, Default: 0.35s) Popup duration. UnlockRevealOvershootScale (float, Default: 1.3) Peak scale multiplier. UnlockSound / UnlockSoundVolume (USoundBase / float) Audio asset played on unlock. bShowServiceCounterWidget / ServiceCounterWidgetClass / ServiceCounterWidgetSpace / ServiceCounterWidgetDrawSize / ServiceCounterWidgetRelativeLocation / ServiceCounterWidgetRelativeRotation / ServiceCounterWidgetRelativeScale / bHideServiceCounterWidgetWhenLocked Context widget properties.

11. AHCFProductionStation (Properties) bUnlockedByDefault (bool, Default: true) Active on start. ProductionIntervalSeconds (float, Default: 5.0f) Delay between item creation cycles. ItemsPerCycle (int32, Default: 1) Amount of items generated per cycle. MaxStoredItems (int32, Default: 20) Max storage stock before pause. bProduceImmediatelyOnUnlock (bool, Default: true) Creates first item instantly when station is unlocked. ProductionMachineMesh (UStaticMesh ) Mesh used for station. ProducedItemDefinition (UHCFItemDefinition ) Item type created. StoredItemStackOffset (FVector, Default: Z=12.0) Stack spacing. MaxVisibleStoredItems (int32, Default: 30) Visual model cap. bAnimateCollectionToInventory (bool, Default: true) Flying items on collection. CollectionFlyDurationSeconds / CollectionFlyArcHeight (Flight curves) Curves. CollectionItemLaunchIntervalSeconds (float, Default: 0.04s) Spacing delay between item collections. MaxCollectionAnimationsPerPickup (int32, Default: 25) Max animated meshes generated per gather. ItemsPerCollectionPulse (int32, Default: 1) Max items gathered per check pulse. CollectionPulseSeconds (float, Default: 0.1s) Wait time between check pulses. StationMeshRelativeLocation / StationMeshRelativeRotation / StationMeshRelativeScale Transform adjustments. StationMeshCollisionEnabled / StationMeshCollisionProfileName (Collision settings) Collision modes applied. CollectBoxRelativeLocation / CollectBoxExtent (FVector) Trigger box layout. bAnimateUnlockReveal / UnlockRevealDurationSeconds / UnlockRevealOvershootScale Popup reveal settings. UnlockSound / UnlockSoundVolume (USoundBase / float) Unlock audio.

12. AHCFCropGrowActor (Properties) CropMesh (UStaticMesh ) Visual mesh of crop. CropMeshRelativeLocation / CropMeshRelativeRotation Transform offsets. MaxGrowScale (FVector, Default: 1.0) Scale when fully grown. GrowDurationSeconds (float, Default: 5.0f) Seconds needed to grow. bStartGrowingOnBeginPlay (bool, Default: true) Starts growth cycle on launch. bUnlockedByDefault (bool, Default: true) Active on start. bRegrowAfterHarvest (bool, Default: true) Restarts growth cycle after harvest. RegrowDelaySeconds (float, Default: 1.0f) Idle delay before regrowth starts. HarvestItemDefinition (UHCFItemDefinition ) Item asset granted on harvest. HarvestItemAmount (int32, Default: 1) Amount of items granted. PhysicsBeforePickupSeconds (float, Default: 0.35s) Simulates physical gravity before flying to inventory. CutImpulse (FVector, Default: Z=180.0) Impulse applied when cut. bAnimateHarvestToInventory (bool, Default: true) Flying items on collection. HarvestFlyDurationSeconds / HarvestFlyArcHeight / TimeBetweenHarvestItems Flight curves. WaitingHarvestPickupRadius (float, Default: 400.0f) Radius checks to attract waiting cut items on floor. GrowingCollisionProfileName (FName, Default: OverlapAllDynamic) Collision settings during growth. CutPhysicsCollisionProfileName (FName, Default: PhysicsActor) Collision settings during physics drop. CutSound / CutSoundVolume (USoundBase / float) Sound played when cut.

13. AHCFFarmCutterZone (Properties) ZoneRelativeLocation / ZoneBoxExtent (FVector) Dimensions of cutting trigger space. bUnlockedByDefault (bool, Default: true) Active on start. bEnableCutterOnEnter (bool, Default: true) Automatically enables character cutter when overlapping. bDisableCutterOnExit (bool, Default: true) Automatically disables character cutter when exiting. bRestorePreviousCutterStateOnExit (bool, Default: false) Restores player's cutter state from before they entered. UnlockedSound / UnlockedSoundVolume (USoundBase / float) Audio played on unlock.

14. AHCFHelperCharacter (Properties) bUnlockedByDefault (bool, Default: true) AI runs on start. TargetServiceCounter (AHCFServiceCounter ) cashier destination. TargetTrashBin (AHCFDiningTrashBinActor ) Trash bin destination. WorkSources (TArray<AActor ) Allowed work source actors (stations, crops, tables). HelperMoveSpeed (float, Default: 360.0f) Movement speed. ArrivalRadius (float, Default: 35.0f) Distance checks to count as arrived. bRotateTowardMovement (bool, Default: true) Rotates toward move velocity direction. CollectionSettleSeconds (float, Default: 0.35s) Wait duration after picking up items. DeliveryPulseSeconds (float, Default: 0.04s) Deposit interval at counter. bShowCutterWhileHarvestingCrops (bool, Default: true) Activates cutter mesh when harvesting crops. CropHarvestCutterVisibleSeconds (float, Default: 0.45s) Duration cutter mesh stays visible after crop harvest. bIgnoreOtherHelpers (bool, Default: true) Disables collision between helpers to prevent line blockages. bShowHelperOverheadWidget / HelperOverheadWidgetClass / HelperOverheadWidgetSpace / HelperOverheadWidgetDrawSize / HelperOverheadWidgetRelativeLocation / HelperOverheadWidgetRelativeScale Context widget properties. UnlockSound / UnlockSoundVolume (USoundBase / float) Unlock audio.

15. AHCFHelperSpawnPoint (Properties) bStartSpawnPointUnlocked (bool, Default: false) Active on start. HelperClass (TSubclassOf<AHCFHelperCharacter ) Character class spawned. bSpawnHelperWhenUnlocked (bool, Default: true) Creates character instantly when spawn point unlocks. bSpawnOnlyOnce (bool, Default: true) Reuses first spawned character instead of duplicating. MaxSpawnedHelpers (int32, Default: 0) Limit of active workers (0 is unlimited). bProjectSpawnToGround (bool, Default: true) Projects character to floor on spawn. SpawnGroundTraceHeight / SpawnGroundTraceDepth / SpawnGroundOffset / SpawnGroundTraceChannel Trace configurations. TargetServiceCounter (AHCFServiceCounter ) cashier destination. TargetTrashBin (AHCFDiningTrashBinActor ) Trash bin destination. WorkSources (TArray<AActor ) Assigned work sources. bOverrideHelperMaxCarriedItems / InitialHelperMaxCarriedItems Overrides worker inventory capacity on spawn. bOverrideHelperMoveSpeed / InitialHelperMoveSpeed Overrides worker speed on spawn. SpawnedHelperActorTag (FName) Tags spawned characters so upgrade rooms can find them. SpawnSound / SpawnSoundVolume (USoundBase / float) Spawning audio.

16. AHCFUpgradeZone (Properties) UpgradeWidgetClass (TSubclassOf<UHCFUpgradeWidget ) Widget UI class to open. bStartUpgradeZoneAvailable (bool, Default: true) Active on start. bOpenOnPlayerOverlap (bool, Default: true) Automatically opens UI when player enters trigger. bCloseOnPlayerExit (bool, Default: true) Automatically closes UI when player leaves trigger. bShowMouseCursorWhileOpen (bool, Default: true) Shows cursor when UI is open. InputModeWhileOpen (EHCFUpgradeZoneInputMode, Default: GameAndUI) Sets input state (GameAndUI, UIOnly, or NoInputChange). HelperSpawnPoints (TArray<AHCFHelperSpawnPoint ) Linked helper spawner points. UpgradeHelpers (TArray<AHCFHelperCharacter ) Linked direct helpers. UpgradeItemDefinitions (TArray<UHCFItemDefinition ) Linked item definitions.

17. AHCFGuidePathActor (Properties) TargetActor (AActor ) Final objective actor. TargetOffset (FVector) Local transform target offset. bAutoFindPlayer (bool, Default: true) Automatically binds Player 0. PlayerActor (AActor ) Binds specific character actor. PlayerIndex (int32, Default: 0) Index used for auto bind. bStartGuideEnabled (bool, Default: true) Enabled on start. GuideSteps (TArray<FHCFGuidePathStep ) Step structures defining complex tutorial routes: StepName (FName) TargetActor (AActor ) TargetOffset (FVector) bStopWhenTargetUnlocks (bool) bStopWhenPlayerReachesTarget (bool) bStopAfterCollectedItemsFromTarget (bool) RequiredCollectedItemsFromTarget (int32) CompletionRadius (float) ArrowMesh (UStaticMesh ) Mesh used for ground arrows. ArrowMaterial (UMaterialInterface ) Material applied. ArrowScale (FVector, Default: 1.0) Scale of arrow meshes. ArrowSpacing (float, Default: 160.0f) Distance spacing between arrows in trail. StartDistanceFromPlayer / EndDistanceFromTarget (float) Margins for drawing. GroundZOffset (float, Default: 6.0f) Draw height offset. bProjectArrowsToGround (bool, Default: true) Traces arrow nodes down to terrain. GroundTraceHeight / GroundTraceDepth / GroundTraceChannel Trace configurations. MaxArrowCount (int32, Default: 24) Maximum arrows drawn. MaxGuideDistance (float, Default: 3000.0f) Maximum distance checked. bHideWhenPlayerIsClose (bool, Default: true) Hides trail when player is near target. bStopWhenTargetUnlocks / bStopWhenPlayerReachesTarget / bStopAfterCollectedItemsFromTarget / RequiredCollectedItemsFromTarget / CompletionRadius Fallback completion triggers when GuideSteps list is empty. bDestroyOnComplete (bool, Default: false) Self destructs actor on completion.

================================================================================ QUESTIONS & ANSWERS: HOW TO ================================================================================

Q: How do I set up a player to carry items and have their hands automatically hold the stack? A: 1. Add a UHCFInventoryComponent and a UHCFCarryIKComponent to your player character class. 2. The UHCFCarryIKComponent will automatically bind to the player inventory on BeginPlay. Ensure that bFollowTopCarriedItem is checked so that the hand targets slide upward as the stack grows. 3. Open your character's Animation Blueprint (AnimBP). In the AnimGraph, read the values from your character's UHCFCarryIKComponent: Call GetLeftHandCarryTargetComponentSpaceLocation and GetRightHandCarryTargetComponentSpaceLocation. Pass in your SkeletalMesh component. Call GetTwoBoneIKAlpha to get the current blended IK Alpha. 4. Route these locations as the effectors for two "Two Bone IK" nodes in your AnimGraph (one for left hand, one for right hand). Use the IK Alpha value to drive the Node Alpha of both Two Bone IK nodes. This will dynamically place the player's hands on the sides of the carry stack.

Q: How do I create a crop field where players can cut grass/crops and collect them? A: 1. Place several AHCFCropGrowActor actors in your level to act as crops. Configure their static mesh and set HarvestItemDefinition to the item asset they will yield. 2. Set bStartGrowingOnBeginPlay and bRegrowAfterHarvest to true. 3. Place an AHCFFarmCutterZone actor enclosing the crops. 4. When the player walks into the cutter zone, the zone automatically calls SetCutterMeshEnabled(true) on the player's UHCFInventoryComponent. This displays their visual cutter mesh tool and spins it. 5. While moving, overlapping crop actors will detect the player's cutter mesh. Fully grown crops will play a cut sound, apply CutImpulse to simulate physics dropping on the ground, and then fly into the player's inventory as collected items after a short delay.

Q: How do I set up a helper character to automatically gather items from a production station and deliver them to a cashier? A: 1. Place an AHCFHelperSpawnPoint actor in your level. Set HelperClass to your helper character blueprint. 2. In the spawn point's properties under "Helper Assignment", set TargetServiceCounter to the cashier where they should sell items. 3. Add your AHCFProductionStation actors to the spawn point's WorkSources array. 4. Set bStartSpawnPointUnlocked to true, or leave it false and target this spawn point from an AHCFUnlockZone to buy the helper later. 5. On spawn, the helper AI will automatically loop through this state machine: Check if the cashier needs stock and if the production stations have stored items. Walk to the best production station, wait for items to fly into their inventory, then walk to the cashier counter and deposit them.

Q: How do I handle dining mechanics (customers eating and leaving trash that blocks seats)? A: 1. Place an AHCFDiningTable actor in your level. Add entries to its Seats array. For each seat, check bLeaveTrashAfterMeal, specify TrashChancePercent, and assign TrashItemDefinition (e.g. DA Trash). 2. Configure your AHCFCustomerSpawner's AfterGettingItemAction to "Search For Table". 3. When customers buy food at the cashier, they route to an available seat at the table. 4. Upon arrival, their carried food flies onto the table. They sit, eat, and after EatDurationSeconds, they exit. 5. Depending on your trash chance, a trash actor (AHCFDiningTrashActor) will spawn on the seat, blocking it. 6. The player or a helper with "WorkSources" containing the dining table must walk to the trash to collect it. 7. Set TargetTrashBin on your helper or spawn point to an AHCFDiningTrashBinActor so helpers automatically carry trash to the bin instead of the cashier.

Q: How do I save and load the player's progress, unlocked zones, and inventory? A: 1. Add a UHCFSaveIdComponent to every AHCFUnlockZone, AHCFProductionStation, AHCFServiceCounter, AHCFGuidePathActor, and player/helper character in your level. Assign a unique name to the SaveId property of each. 2. To save the game, call SaveHCFGame from the UHCFSaveBlueprintLibrary. Specify a slot name (default is "HCF Save"). The system will scan the world, locate all HCF components, capture their state (money, unlocked status, progress, stock, etc.), and write them to disk. 3. To load the game, call LoadHCFGame. The system will load the file, match the stored properties back to the actors using their unique Save IDs, and update their states silently without replay animations.

Q: How do I configure an upgrade zone where players can purchase speed and capacity upgrades? A: 1. Place an AHCFUpgradeZone actor in the level. Set UpgradeWidgetClass to a UI widget blueprint derived from UHCFUpgradeWidget. 2. Link the helper spawn points or helpers you want to upgrade in the HelperSpawnPoints and UpgradeHelpers arrays. 3. Set bOpenOnPlayerOverlap to true. When the player walks into the upgrade room, the UI opens and the mouse cursor is enabled. 4. In your widget blueprint, bind buttons to call: TryUpgradeObservedPlayerMaxWalkSpeed to increase player speed. TryUpgradeObservedPlayerMaxCarriedItems to increase player carry capacity. TryUpgradeAllSpawnedHelpersMaxCarriedItems to increase the capacity of helpers spawned by a specific point. TryUpgradeItemDefinitionSellValue to increase the economy sell value of specific items. 5. The widget automatically spends the observed player's money and applies the stat increments.