Step 1: the Salty project, two modules, tests and the gym

Salty.uproject (UE 5.8) from the Third Person template with class redirects, the SaltyCore and Salty modules,
the three build targets, USaltyAssetManager calling InitGlobalData, Config/Tags with the 23 root namespaces,
Scripts/run-tests.sh, build.sh and Authoring/create_gym.py, L_Gym, Git LFS attributes and the placeholder test.
Template variants kept as reference (D-41). The four Fab packs stay out of the repository for now (~10 GB).
The editor serves the engine MCP plugin on 127.0.0.1:8000 through DefaultEditorPerProjectUserSettings.ini.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Rainer Leit
2026-09-16 20:10:43 +03:00
co-authored by Claude Fable 5.1
parent 0e61a77346
commit 4f2c55cd2a
1434 changed files with 11358 additions and 27 deletions
@@ -0,0 +1,4 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "CombatActivatable.h"
@@ -0,0 +1,36 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "CombatActivatable.generated.h"
/**
* Interactable Interface
* Provides a context-agnostic way of activating, deactivating or toggling actors
*/
UINTERFACE(MinimalAPI, NotBlueprintable)
class UCombatActivatable : public UInterface
{
GENERATED_BODY()
};
class ICombatActivatable
{
GENERATED_BODY()
public:
/** Toggles the Interactable Actor */
UFUNCTION(BlueprintCallable, Category="Activatable")
virtual void ToggleInteraction(AActor* ActivationInstigator) = 0;
/** Activates the Interactable Actor */
UFUNCTION(BlueprintCallable, Category="Activatable")
virtual void ActivateInteraction(AActor* ActivationInstigator) = 0;
/** Deactivates the Interactable Actor */
UFUNCTION(BlueprintCallable, Category="Activatable")
virtual void DeactivateInteraction(AActor* ActivationInstigator) = 0;
};
@@ -0,0 +1,4 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "CombatAttacker.h"
@@ -0,0 +1,36 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "CombatAttacker.generated.h"
/**
* CombatAttacker Interface
* Provides common functionality to trigger attack animation events.
*/
UINTERFACE(MinimalAPI, NotBlueprintable)
class UCombatAttacker : public UInterface
{
GENERATED_BODY()
};
class ICombatAttacker
{
GENERATED_BODY()
public:
/** Performs an attack's collision check. Usually called from a montage's AnimNotify */
UFUNCTION(BlueprintCallable, Category="Attacker")
virtual void DoAttackTrace(FName DamageSourceBone) = 0;
/** Performs a combo attack's check to continue the string. Usually called from a montage's AnimNotify */
UFUNCTION(BlueprintCallable, Category="Attacker")
virtual void CheckCombo() = 0;
/** Performs a charged attack's check to loop the charge animation. Usually called from a montage's AnimNotify */
UFUNCTION(BlueprintCallable, Category="Attacker")
virtual void CheckChargedAttack() = 0;
};
@@ -0,0 +1,6 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "CombatDamageable.h"
// Add default functionality here for any ICombatDamageable functions that are not pure virtual.
@@ -0,0 +1,41 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "CombatDamageable.generated.h"
/**
* CombatDamageable interface
* Provides functionality to handle damage, healing, knockback and death
* Also provides functionality to warn characters of incoming sources of damage
*/
UINTERFACE(MinimalAPI, NotBlueprintable)
class UCombatDamageable : public UInterface
{
GENERATED_BODY()
};
class ICombatDamageable
{
GENERATED_BODY()
public:
/** Handles damage and knockback events */
UFUNCTION(BlueprintCallable, Category="Damageable")
virtual void ApplyDamage(float Damage, AActor* DamageCauser, const FVector& DamageLocation, const FVector& DamageImpulse) = 0;
/** Handles death events */
UFUNCTION(BlueprintCallable, Category="Damageable")
virtual void HandleDeath() = 0;
/** Handles healing events */
UFUNCTION(BlueprintCallable, Category="Damageable")
virtual void ApplyHealing(float Healing, AActor* Healer) = 0;
/** Notifies the actor of impending danger such as an incoming hit, allowing it to react. */
UFUNCTION(BlueprintCallable, Category="Damageable")
virtual void NotifyDanger(const FVector& DangerLocation, AActor* DangerSource) = 0;
};