refactor file structure

main
Nikolay Petrov 2026-01-20 21:54:27 +05:00
parent fb4a03e717
commit 8dea0b05bd
269 changed files with 1361 additions and 1120 deletions

1
.gitignore vendored
View File

@ -13,6 +13,7 @@
!/Config/** !/Config/**
!/Plugins/** !/Plugins/**
!/Documentation/** !/Documentation/**
!/TypeScript/**
!/.eslintignore !/.eslintignore
!/.eslintrc.js !/.eslintrc.js
!/.prettierignore !/.prettierignore

View File

@ -2,7 +2,7 @@
[/Script/EngineSettings.GameMapsSettings] [/Script/EngineSettings.GameMapsSettings]
GameDefaultMap=/Engine/Maps/Templates/OpenWorld GameDefaultMap=/Engine/Maps/Templates/OpenWorld
GlobalDefaultGameMode=/Game/Blueprints/BP_TengriGameMode.BP_TengriGameMode_C GlobalDefaultGameMode=/Game/_Core/Framework/BP_TengriGameMode.BP_TengriGameMode_C
[/Script/Engine.RendererSettings] [/Script/Engine.RendererSettings]
r.AllowStaticLighting=False r.AllowStaticLighting=False

View File

@ -1,5 +0,0 @@
// Content/BasicShapes/CustomDefaultSkeletalMesh.ts
import { SkeletalMesh } from '/Content/UE/SkeletalMesh.ts';
export class CustomDefaultSkeletalMesh extends SkeletalMesh {}

Binary file not shown.

View File

@ -1,234 +0,0 @@
// Content/Blueprints/BP_MainCharacter.ts
import { AC_DebugHUD } from '/Content/Debug/Components/AC_DebugHUD.ts';
import { AC_InputDevice } from '/Content/Input/Components/AC_InputDevice.ts';
import { IMC_Default } from '/Content/Input/IMC_Default.ts';
import { AC_ToastSystem } from '/Content/Toasts/Components/AC_ToastSystem.ts';
import { Cast } from '/Content/UE/Cast.ts';
import type { Controller } from '/Content/UE/Controller.ts';
import { EnhancedInputLocalPlayerSubsystem } from '/Content/UE/EnhancedInputLocalPlayerSubsystem.ts';
import type { Float } from '/Content/UE/Float.ts';
import { MathLibrary } from '/Content/UE/MathLibrary.ts';
import type { PlayerController } from '/Content/UE/PlayerController.ts';
import { SystemLibrary } from '/Content/UE/SystemLibrary.ts';
import { Vector } from '/Content/UE/Vector.ts';
import { TengriCharacter } from '/Source/TengriPlatformer/Character/TengriCharacter.ts';
import { IA_Interact } from '/Content/Input/Actions/IA_Inreract.ts';
import { IA_Throw } from '/Content/Input/Actions/IA_Throw.ts';
import { IA_Aim } from '/Content/Input/Actions/IA_Aim.ts';
import { IMC_ItemHeld } from '/Content/Input/IMC_ItemHeld.ts';
import { CreateWidget } from '/Content/UE/CteateWidget.ts';
import { WBP_HUD } from '/Content/UI/WBP_HUD.ts';
import { CustomDefaultSkeletalMesh } from '/Content/BasicShapes/CustomDefaultSkeletalMesh.ts';
import { ETengriCameraBehavior } from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts';
import { DA_CameraAiming } from '/Content/Camera/DA_CameraAiming.ts';
/**
* Main Character Blueprint
* Core player character with deterministic movement system
* Integrates debug HUD and toast notification systems
*/
export class BP_MainCharacter extends TengriCharacter {
// ════════════════════════════════════════════════════════════════════════════════════════
// GRAPHS
// ════════════════════════════════════════════════════════════════════════════════════════
// ────────────────────────────────────────────────────────────────────────────────────────
// EventGraph
// ────────────────────────────────────────────────────────────────────────────────────────
/**
* Handle controller change events - sets up Enhanced Input mapping context
*/
EventReceiveControllerChanged(NewController: Controller): void {
const controller = Cast<PlayerController>(NewController);
const system = new EnhancedInputLocalPlayerSubsystem();
if (controller) {
system.AddMappingContext(IMC_Default);
}
}
/** Navigate to previous debug page */
EnhancedInputActionPrevDebugMode(): void {
if (this.ShowDebugInfo) {
this.DebugHUDComponent.PreviousPage();
}
}
/** Navigate to next debug page */
EnhancedInputActionINextDebugMode(): void {
if (this.ShowDebugInfo) {
this.DebugHUDComponent.NextPage();
}
}
/** Toggle debug HUD visibility */
EnhancedInputActionToggleHUD(): void {
if (this.ShowDebugInfo) {
this.DebugHUDComponent.ToggleDebugHUD();
}
}
/** Toggle visual debug rendering */
EnhancedInputActionToggleVisualDebug(): void {
if (this.ShowDebugInfo) {
this.DebugHUDComponent.ToggleVisualDebug();
}
}
/**
* Process look input for camera rotation
* @param actionValueX - Horizontal look input value
* @param actionValueY - Vertical look input value
*/
EnhancedInputActionLookTriggered(
actionValueX: Float,
actionValueY: Float
): void {
if (
this.CameraManager.CurrentConfig.BehaviorType ===
ETengriCameraBehavior.FreeLook
) {
this.AddControllerYawInput(actionValueX);
this.AddControllerPitchInput(actionValueY);
}
}
/**
* Process movement input for ground-based movement
* @param ActionValueX - Horizontal movement input value (-1 to 1)
* @param ActionValueY - Vertical movement input value (-1 to 1)
*/
EnhancedInputActionMoveTriggered(
ActionValueX: Float,
ActionValueY: Float
): void {
const CalculateResultMovementInputVector = (
rightVector: Vector,
forwardVector: Vector,
actionValueX: Float,
actionValueY: Float
): Vector => {
const vec1 = new Vector(
rightVector.X * actionValueX,
rightVector.Y * actionValueX,
0
);
const vec2 = new Vector(
forwardVector.X * actionValueY,
forwardVector.Y * actionValueY,
0
);
return new Vector(vec1.X + vec2.X, vec1.Y + vec2.Y, 0);
};
this.MovementComponent.SetInputVector(
CalculateResultMovementInputVector(
MathLibrary.GetRightVector(
this.GetControlRotation().roll,
0,
this.GetControlRotation().yaw
),
MathLibrary.GetForwardVector(0, 0, this.GetControlRotation().yaw),
ActionValueX,
ActionValueY
)
);
}
/**
* Reset movement input when move action is completed
*/
EnhancedInputActionMoveCompleted(): void {
this.MovementComponent.SetInputVector(new Vector(0, 0, 0));
}
EnhancedInputActionJumpTriggered(): void {
this.MovementComponent.SetJumpInput(true);
}
EnhancedInputActionJumpCompleted(): void {
this.MovementComponent.SetJumpInput(false);
}
/**
* Initialize all systems when character spawns
* Order: Toast Debug Movement (movement last as it may generate debug output)
*/
EventBeginPlay(): void {
if (this.ShowDebugInfo) {
this.ToastSystemComponent.InitializeToastSystem();
}
this.InputDeviceComponent.InitializeDeviceDetection(
this.ToastSystemComponent,
this.DebugHUDComponent
);
if (this.ShowDebugInfo) {
this.DebugHUDComponent.InitializeDebugHUD(
this.ToastSystemComponent,
this.InputDeviceComponent
);
}
CreateWidget(WBP_HUD).AddToViewport();
}
/**
* Update all systems each frame
* Called by Unreal Engine game loop
*/
EventTick(): void {
if (this.ShowDebugInfo) {
this.DebugHUDComponent.UpdateHUD(SystemLibrary.GetGameTimeInSeconds());
this.ToastSystemComponent.UpdateToastSystem();
}
if (this.ShowDebugInfo) {
this.InputDeviceComponent.UpdateDebugPage();
}
}
// ════════════════════════════════════════════════════════════════════════════════════════
// VARIABLES
// ════════════════════════════════════════════════════════════════════════════════════════
/**
* Input device detection component - manages input device state and detection
* @category Components
*/
InputDeviceComponent = new AC_InputDevice();
/**
* Toast notification system - displays temporary status messages
* @category Components
*/
ToastSystemComponent = new AC_ToastSystem();
/**
* Debug HUD system - displays movement parameters and performance metrics
* @category Components
*/
DebugHUDComponent = new AC_DebugHUD();
/**
* Master debug toggle - controls all debug systems (HUD, toasts, visual debug)
* @category Debug
* @instanceEditable true
*/
private ShowDebugInfo: boolean = true;
constructor() {
super(new DA_CameraAiming());
this.InteractAction = IA_Interact;
this.ThrowAction = IA_Throw;
this.AimAction = IA_Aim;
this.ItemHeldMappingContext = IMC_ItemHeld;
this.Mesh = new CustomDefaultSkeletalMesh();
}
}

BIN
Content/Blueprints/BP_MainCharacter.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Content/Blueprints/BP_Rock.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,8 +0,0 @@
// Blueprints/BP_TengriGameMode.ts
import { BP_MainCharacter } from '/Content/Blueprints/BP_MainCharacter.ts';
import { GameModeBase } from '/Content/UE/GameModeBase.ts';
export class BP_TengriGameMode extends GameModeBase {
DefaultPawnClass = BP_MainCharacter;
}

Binary file not shown.

BIN
Content/Camera/BP_CameraZone.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Content/Camera/DA_CameraAiming.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Content/Camera/DA_CameraDefault.uasset (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,13 +0,0 @@
// Content/Debug/Structs/S_DebugPage.ts
import type { Float } from '/Content/UE/Float.ts';
import type { Text } from '/Content/UE/Text.ts';
export interface S_DebugPage {
PageID: string;
Title: Text;
Content: Text;
RefreshRate: Float;
IsVisible: boolean;
LastUpdateTime: Float;
}

BIN
Content/Debug/Structs/S_DebugPage.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Content/Debug/UI/WBP_DebugHUD.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,8 +1,8 @@
// Content/Camera/BP_CameraZone.ts // Content/Domains/Camera/BP_CameraZone.ts
import { Actor } from '/Content/UE/Actor.ts'; import { Actor } from '/TypeScript/Engine/Actor.ts';
import type { TengriCharacter } from '/Source/TengriPlatformer/Character/TengriCharacter.ts'; import type { TengriCameraConfig } from '/Source/TengriPlatformer/Domains/Camera/Config/TengriCameraConfig.ts';
import type { TengriCameraConfig } from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts'; import type { TengriCharacter } from '/Source/TengriPlatformer/Domains/Character/TengriCharacter.ts';
export class BP_CameraZone extends Actor { export class BP_CameraZone extends Actor {
constructor(ZoneConfig: TengriCameraConfig) { constructor(ZoneConfig: TengriCameraConfig) {

BIN
Content/Domains/Camera/BP_CameraZone.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,9 +1,11 @@
// Content/Domains/Camera/Configs/DA_CameraAiming.ts
import { import {
ETengriCameraBehavior, ETengriCameraBehavior,
TengriCameraConfig, TengriCameraConfig,
} from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts'; } from '/Source/TengriPlatformer/Domains/Camera/Config/TengriCameraConfig.ts';
import { Vector } from '/Content/UE/Vector.ts'; import { Vector } from '/TypeScript/Engine/Vector.ts';
import { Rotator } from '/Content/UE/Rotator.ts'; import { Rotator } from '/TypeScript/Engine/Rotator.ts';
export class DA_CameraAiming extends TengriCameraConfig { export class DA_CameraAiming extends TengriCameraConfig {
override BehaviorType = ETengriCameraBehavior.FreeLook; override BehaviorType = ETengriCameraBehavior.FreeLook;

BIN
Content/Domains/Camera/Configs/DA_CameraAiming.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,9 +1,11 @@
// Content/Domains/Camera/Configs/DA_CameraDefault.ts
import { import {
ETengriCameraBehavior, ETengriCameraBehavior,
TengriCameraConfig, TengriCameraConfig,
} from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts'; } from '/Source/TengriPlatformer/Domains/Camera/Config/TengriCameraConfig.ts';
import { Vector } from '/Content/UE/Vector.ts'; import { Vector } from '/TypeScript/Engine/Vector.ts';
import { Rotator } from '/Content/UE/Rotator.ts'; import { Rotator } from '/TypeScript/Engine/Rotator.ts';
export class DA_CameraDefault extends TengriCameraConfig { export class DA_CameraDefault extends TengriCameraConfig {
override BehaviorType = ETengriCameraBehavior.FreeLook; override BehaviorType = ETengriCameraBehavior.FreeLook;

BIN
Content/Domains/Camera/Configs/DA_CameraDefault.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,11 +1,13 @@
// Content/Domains/Camera/Configs/DA_CameraSideScroller.ts
import { import {
ETengriCameraBehavior, ETengriCameraBehavior,
TengriCameraConfig, TengriCameraConfig,
} from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts'; } from '/Source/TengriPlatformer/Domains/Camera/Config/TengriCameraConfig.ts';
import { Vector } from '/Content/UE/Vector.ts'; import { Vector } from '/TypeScript/Engine/Vector.ts';
import { Rotator } from '/Content/UE/Rotator.ts'; import { Rotator } from '/TypeScript/Engine/Rotator.ts';
export class DA_CameraScroller extends TengriCameraConfig { export class DA_CameraSideScroller extends TengriCameraConfig {
override BehaviorType = ETengriCameraBehavior.FreeLook; override BehaviorType = ETengriCameraBehavior.FreeLook;
override FixedRotation = new Rotator(0, 0, 0); override FixedRotation = new Rotator(0, 0, 0);

BIN
Content/Domains/Camera/Configs/DA_CameraSideScroller.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,5 @@
// Content/Domains/Character/Assets/CustomDefaultSkeletalMesh.ts
import { SkeletalMesh } from '/TypeScript/Engine/SkeletalMesh.ts';
export class CustomDefaultSkeletalMesh extends SkeletalMesh {}

Binary file not shown.

View File

@ -0,0 +1,142 @@
// Content/Domains/Character/BP_MainCharacter.ts
import { IMC_CharacterDefault } from '/Content/Domains/Character/Input/IMC_CharacterDefault.ts';
import { Cast } from '/TypeScript/Engine/Cast.ts';
import type { Controller } from '/TypeScript/Engine/Controller.ts';
import { EnhancedInputLocalPlayerSubsystem } from '/TypeScript/Engine/EnhancedInputLocalPlayerSubsystem.ts';
import type { Float } from '/TypeScript/Engine/Float.ts';
import { MathLibrary } from '/TypeScript/Engine/MathLibrary.ts';
import type { PlayerController } from '/TypeScript/Engine/PlayerController.ts';
import { Vector } from '/TypeScript/Engine/Vector.ts';
import { TengriCharacter } from '/Source/TengriPlatformer/Domains/Character/TengriCharacter.ts';
import { IA_Interact } from '/Content/Domains/Character/Input/Actions/IA_Interact.ts';
import { IA_Throw } from '/Content/Domains/Character/Input/Actions/IA_Throw.ts';
import { IA_Aim } from '/Content/Domains/Character/Input/Actions/IA_Aim.ts';
import { IMC_CharacterItemHeld } from '/Content/Domains/Character/Input/IMC_CharacterItemHeld.ts';
import { CreateWidget } from '/TypeScript/Engine/CteateWidget.ts';
import { WBP_Crosshair } from '/Content/Domains/Character/UI/WBP_Crosshair.ts';
import { CustomDefaultSkeletalMesh } from '/Content/Domains/Character/Assets/CustomDefaultSkeletalMesh.ts';
import { ETengriCameraBehavior } from '/Source/TengriPlatformer/Domains/Camera/Config/TengriCameraConfig.ts';
import { DA_CameraAiming } from '/Content/Domains/Camera/Configs/DA_CameraAiming.ts';
/**
* Main Character Blueprint
* Core player character with deterministic movement system
* Integrates debug HUD and toast notification systems
*/
export class BP_MainCharacter extends TengriCharacter {
// ════════════════════════════════════════════════════════════════════════════════════════
// GRAPHS
// ════════════════════════════════════════════════════════════════════════════════════════
// ────────────────────────────────────────────────────────────────────────────────────────
// EventGraph
// ────────────────────────────────────────────────────────────────────────────────────────
/**
* Handle controller change events - sets up Enhanced Input mapping context
*/
EventReceiveControllerChanged(NewController: Controller): void {
const controller = Cast<PlayerController>(NewController);
const system = new EnhancedInputLocalPlayerSubsystem();
if (controller) {
system.AddMappingContext(IMC_CharacterDefault);
}
}
/**
* Process look input for camera rotation
* @param actionValueX - Horizontal look input value
* @param actionValueY - Vertical look input value
*/
EnhancedInputActionLookTriggered(
actionValueX: Float,
actionValueY: Float
): void {
if (
this.CameraManager.CurrentConfig.BehaviorType ===
ETengriCameraBehavior.FreeLook
) {
this.AddControllerYawInput(actionValueX);
this.AddControllerPitchInput(actionValueY);
}
}
/**
* Process movement input for ground-based movement
* @param ActionValueX - Horizontal movement input value (-1 to 1)
* @param ActionValueY - Vertical movement input value (-1 to 1)
*/
EnhancedInputActionMoveTriggered(
ActionValueX: Float,
ActionValueY: Float
): void {
const CalculateResultMovementInputVector = (
rightVector: Vector,
forwardVector: Vector,
actionValueX: Float,
actionValueY: Float
): Vector => {
const vec1 = new Vector(
rightVector.X * actionValueX,
rightVector.Y * actionValueX,
0
);
const vec2 = new Vector(
forwardVector.X * actionValueY,
forwardVector.Y * actionValueY,
0
);
return new Vector(vec1.X + vec2.X, vec1.Y + vec2.Y, 0);
};
this.MovementComponent.SetInputVector(
CalculateResultMovementInputVector(
MathLibrary.GetRightVector(
this.GetControlRotation().roll,
0,
this.GetControlRotation().yaw
),
MathLibrary.GetForwardVector(0, 0, this.GetControlRotation().yaw),
ActionValueX,
ActionValueY
)
);
}
/**
* Reset movement input when move action is completed
*/
EnhancedInputActionMoveCompleted(): void {
this.MovementComponent.SetInputVector(new Vector(0, 0, 0));
}
EnhancedInputActionJumpTriggered(): void {
this.MovementComponent.SetJumpInput(true);
}
EnhancedInputActionJumpCompleted(): void {
this.MovementComponent.SetJumpInput(false);
}
/**
* Initialize all systems when character spawns
* Order: Toast Debug Movement (movement last as it may generate debug output)
*/
EventBeginPlay(): void {
CreateWidget(WBP_Crosshair).AddToViewport();
}
constructor() {
super(new DA_CameraAiming());
this.InteractAction = IA_Interact;
this.ThrowAction = IA_Throw;
this.AimAction = IA_Aim;
this.ItemHeldMappingContext = IMC_CharacterItemHeld;
this.Mesh = new CustomDefaultSkeletalMesh();
}
}

BIN
Content/Domains/Character/BP_MainCharacter.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,6 +1,6 @@
// Content/Movement/Core/DA_TengriMovementConfig.ts // Content/Domains/Character/Configs/DA_TengriMovementConfig.ts
import { TengriMovementConfig } from '/Source/TengriPlatformer/Movement/Core/TengriMovementConfig.ts'; import { TengriMovementConfig } from '/Source/TengriPlatformer/Domains/Movement/Config/TengriMovementConfig.ts';
export class DA_TengriMovementConfig extends TengriMovementConfig { export class DA_TengriMovementConfig extends TengriMovementConfig {
override MaxSpeed = 800.0; override MaxSpeed = 800.0;

Binary file not shown.

View File

@ -0,0 +1,6 @@
// Content/Domains/Character/Input/Actions/IA_Aim.ts
import { InputAction } from '/TypeScript/Engine/InputAction.ts';
import { Name } from '/TypeScript/Engine/Name.ts';
export const IA_Aim = new InputAction(null, new Name('IA_Aim'));

BIN
Content/Domains/Character/Input/Actions/IA_Aim.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
// Content/Domains/Character/Input/Actions/IA_Interact.ts
import { InputAction } from '/TypeScript/Engine/InputAction.ts';
import { Name } from '/TypeScript/Engine/Name.ts';
export const IA_Interact = new InputAction(null, new Name('IA_Interact'));

BIN
Content/Domains/Character/Input/Actions/IA_Interact.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
// Content/Domains/Character/Input/Actions/IA_Jump.ts
import { InputAction } from '/TypeScript/Engine/InputAction.ts';
import { Name } from '/TypeScript/Engine/Name.ts';
export const IA_Jump = new InputAction(null, new Name('IA_Jump'));

BIN
Content/Domains/Character/Input/Actions/IA_Jump.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
// Content/Domains/Character/Input/Actions/IA_Look.ts
import { InputAction } from '/TypeScript/Engine/InputAction.ts';
import { Name } from '/TypeScript/Engine/Name.ts';
export const IA_Look = new InputAction(null, new Name('IA_Look'));

BIN
Content/Domains/Character/Input/Actions/IA_Look.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
// Content/Domains/Character/Input/Actions/IA_Move.ts
import { InputAction } from '/TypeScript/Engine/InputAction.ts';
import { Name } from '/TypeScript/Engine/Name.ts';
export const IA_Move = new InputAction(null, new Name('IA_Move'));

BIN
Content/Domains/Character/Input/Actions/IA_Move.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
// Content/Domains/Character/Input/Actions/IA_Aim
import { InputAction } from '/TypeScript/Engine/InputAction.ts';
import { Name } from '/TypeScript/Engine/Name.ts';
export const IA_Throw = new InputAction(null, new Name('IA_Aim'));

BIN
Content/Domains/Character/Input/Actions/IA_Throw.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,15 @@
// Content/Domains/Character/Input/IMC_CharacterDefault.ts
import { IA_Look } from '/Content/Domains/Character/Input/Actions/IA_Look.ts';
import { IA_Move } from '/Content/Domains/Character/Input/Actions/IA_Move.ts';
import { InputMappingContext } from '/TypeScript/Engine/InputMappingContext.ts';
import { Key } from '/TypeScript/Engine/Key.ts';
import { IA_Jump } from '/Content/Domains/Character/Input/Actions/IA_Jump.ts';
import { IA_Interact } from '/Content/Domains/Character/Input/Actions/IA_Interact.ts';
export const IMC_CharacterDefault = new InputMappingContext();
IMC_CharacterDefault.mapKey(IA_Look, new Key('IA_Look'));
IMC_CharacterDefault.mapKey(IA_Move, new Key('IA_Move'));
IMC_CharacterDefault.mapKey(IA_Jump, new Key('IA_Jump'));
IMC_CharacterDefault.mapKey(IA_Interact, new Key('IA_Interact'));

BIN
Content/Domains/Character/Input/IMC_CharacterDefault.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,11 @@
// Content/Domains/Character/Input/IMC_CharacterItemHeld.ts
import { InputMappingContext } from '/TypeScript/Engine/InputMappingContext.ts';
import { Key } from '/TypeScript/Engine/Key.ts';
import { IA_Aim } from '/Content/Domains/Character/Input/Actions/IA_Aim.ts';
import { IA_Throw } from '/Content/Domains/Character/Input/Actions/IA_Throw.ts';
export const IMC_CharacterItemHeld = new InputMappingContext();
IMC_CharacterItemHeld.mapKey(IA_Aim, new Key('IA_Aim'));
IMC_CharacterItemHeld.mapKey(IA_Throw, new Key('IA_Throw'));

BIN
Content/Domains/Character/Input/IMC_CharacterItemHeld.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,5 @@
// Content/Domains/Character/UI/WBP_Crosshair.ts
import { UserWidget } from '/TypeScript/Engine/UserWidget.ts';
export class WBP_Crosshair extends UserWidget {}

BIN
Content/Domains/Character/UI/WBP_Crosshair.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,16 +1,16 @@
// Content/Toasts/Components/AC_ToastSystem.ts // Content/Domains/UI/Systems/Toasts/AC_ToastSystem.ts
import type { S_ToastMessage } from '/Content/Toasts/Structs/S_ToastMessage.ts'; import type { S_ToastMessage } from '/Content/Domains/UI/Systems/Toasts/Types/S_ToastMessage.ts';
import type { WBP_Toast } from '/Content/Toasts/UI/WBP_Toast.ts'; import type { WBP_Toast } from '/Content/Domains/UI/Systems/Toasts/WBP_Toast.ts';
import { WBP_ToastContainer } from '/Content/Toasts/UI/WBP_ToastContainer.ts'; import { WBP_ToastContainer } from '/Content/Domains/UI/Systems/Toasts/WBP_ToastContainer.ts';
import { ActorComponent } from '/Content/UE/ActorComponent.ts'; import { ActorComponent } from '/TypeScript/Engine/ActorComponent.ts';
import { CreateWidget } from '/Content/UE/CteateWidget.ts'; import { CreateWidget } from '/TypeScript/Engine/CteateWidget.ts';
import type { Float } from '/Content/UE/Float.ts'; import type { Float } from '/TypeScript/Engine/Float.ts';
import type { Integer } from '/Content/UE/Integer.ts'; import type { Integer } from '/TypeScript/Engine/Integer.ts';
import { SystemLibrary } from '/Content/UE/SystemLibrary.ts'; import { SystemLibrary } from '/TypeScript/Engine/SystemLibrary.ts';
import type { Text } from '/Content/UE/Text.ts'; import type { Text } from '/TypeScript/Engine/Text.ts';
import { UEArray } from '/Content/UE/UEArray.ts'; import { UEArray } from '/TypeScript/Engine/UEArray.ts';
import { E_MessageType } from '/Content/UI/Enums/E_MessageType.ts'; import { E_MessageType } from '/Content/_Core/UI/Enums/E_MessageType.ts';
/** /**
* Toast Notification System Component * Toast Notification System Component
@ -18,6 +18,18 @@ import { E_MessageType } from '/Content/UI/Enums/E_MessageType.ts';
* Provides visual feedback for debug operations and system events * Provides visual feedback for debug operations and system events
*/ */
export class AC_ToastSystem extends ActorComponent { export class AC_ToastSystem extends ActorComponent {
// ════════════════════════════════════════════════════════════════════════════════════════
// GRAPHS
// ════════════════════════════════════════════════════════════════════════════════════════
// ────────────────────────────────────────────────────────────────────────────────────────
// EventGraph
// ────────────────────────────────────────────────────────────────────────────────────────
EventTick(): void {
this.RemoveExpiredToasts();
}
// ════════════════════════════════════════════════════════════════════════════════════════ // ════════════════════════════════════════════════════════════════════════════════════════
// FUNCTIONS // FUNCTIONS
// ════════════════════════════════════════════════════════════════════════════════════════ // ════════════════════════════════════════════════════════════════════════════════════════
@ -78,6 +90,10 @@ export class AC_ToastSystem extends ActorComponent {
this.ActiveToasts.RemoveIndex(i); this.ActiveToasts.RemoveIndex(i);
this.ToastWidgets.RemoveIndex(i); this.ToastWidgets.RemoveIndex(i);
if (this.ActiveToasts.length === 0) {
this.SetComponentTickEnabled(false);
}
} else { } else {
i++; i++;
} }
@ -150,6 +166,7 @@ export class AC_ToastSystem extends ActorComponent {
this.ActiveToasts.Add(newToast); this.ActiveToasts.Add(newToast);
this.ToastWidgets.Add(toastWidget); this.ToastWidgets.Add(toastWidget);
this.LogToConsole(Type, Message); this.LogToConsole(Type, Message);
this.SetComponentTickEnabled(true);
return newToast.ID; return newToast.ID;
} else { } else {
return -1; return -1;
@ -161,35 +178,6 @@ export class AC_ToastSystem extends ActorComponent {
return -1; return -1;
} }
/**
* Main update loop for toast system
* Removes expired toasts automatically
* @category System Main Loop
*/
public UpdateToastSystem(): void {
if (this.ShouldProcessToasts()) {
this.RemoveExpiredToasts();
}
}
/**
* Get system state and configuration for testing purposes
* Provides read-only access to private configuration and active widgets
* @returns Object containing toast widgets array and system configuration
* @category Testing
*/
public GetTestData(): {
ToastWidgets: UEArray<WBP_Toast>;
MaxVisibleToasts: Integer;
IsEnabled: boolean;
} {
return {
ToastWidgets: this.ToastWidgets,
MaxVisibleToasts: this.MaxVisibleToasts,
IsEnabled: this.IsEnabled,
};
}
/** /**
* Initialize toast system with container widget * Initialize toast system with container widget
* @example * @example

BIN
Content/Domains/UI/Systems/Toasts/AC_ToastSystem.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
// Content/Domains/UI/Systems/Toasts/Types/S_ToastMessage.ts
import type { Float } from '/TypeScript/Engine/Float.ts';
import type { Integer } from '/TypeScript/Engine/Integer.ts';
import type { Text } from '/TypeScript/Engine/Text.ts';
import type { E_MessageType } from '/Content/_Core/UI/Enums/E_MessageType.ts';
export interface S_ToastMessage {
ID: Integer;
Message: Text;
Type: E_MessageType;
Duration: Float;
CreatedTime: Float;
}

Binary file not shown.

View File

@ -1,13 +1,13 @@
// Content/Toasts/UI/WBP_Toast.ts // Content/Domains/UI/Systems/Toasts/WBP_Toast.ts
import { Border } from '/Content/UE/Border.ts'; import { Border } from '/TypeScript/Engine/Border.ts';
import { MathLibrary } from '/Content/UE/MathLibrary.ts'; import { MathLibrary } from '/TypeScript/Engine/MathLibrary.ts';
import { SystemLibrary } from '/Content/UE/SystemLibrary.ts'; import { SystemLibrary } from '/TypeScript/Engine/SystemLibrary.ts';
import type { Text } from '/Content/UE/Text.ts'; import type { Text } from '/TypeScript/Engine/Text.ts';
import { TextBlock } from '/Content/UE/TextBlock.ts'; import { TextBlock } from '/TypeScript/Engine/TextBlock.ts';
import { UserWidget } from '/Content/UE/UserWidget.ts'; import { UserWidget } from '/TypeScript/Engine/UserWidget.ts';
import { E_MessageType } from '/Content/UI/Enums/E_MessageType.ts'; import { E_MessageType } from '/Content/_Core/UI/Enums/E_MessageType.ts';
import { BFL_Colors } from '/Content/UI/Libraries/BFL_Colors.ts'; import { BFL_Colors } from '/Content/_Core/Scripting/Libraries/BFL_Colors.ts';
/** /**
* Individual Toast Notification Widget * Individual Toast Notification Widget

BIN
Content/Domains/UI/Systems/Toasts/WBP_Toast.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,14 +1,14 @@
// Content/Toasts/UI/WBP_ToastContainer.ts // Content/Domains/UI/Systems/Toasts/WBP_ToastContainer.ts
import { WBP_Toast } from '/Content/Toasts/UI/WBP_Toast.ts'; import { WBP_Toast } from '/Content/Domains/UI/Systems/Toasts/WBP_Toast.ts';
import { CreateWidget } from '/Content/UE/CteateWidget.ts'; import { CreateWidget } from '/TypeScript/Engine/CteateWidget.ts';
import { ESlateVisibility } from '/Content/UE/ESlateVisibility.ts'; import { ESlateVisibility } from '/TypeScript/Engine/ESlateVisibility.ts';
import { SystemLibrary } from '/Content/UE/SystemLibrary.ts'; import { SystemLibrary } from '/TypeScript/Engine/SystemLibrary.ts';
import type { Text } from '/Content/UE/Text.ts'; import type { Text } from '/TypeScript/Engine/Text.ts';
import { UEArray } from '/Content/UE/UEArray.ts'; import { UEArray } from '/TypeScript/Engine/UEArray.ts';
import { UserWidget } from '/Content/UE/UserWidget.ts'; import { UserWidget } from '/TypeScript/Engine/UserWidget.ts';
import { VerticalBox } from '/Content/UE/VerticalBox.ts'; import { VerticalBox } from '/TypeScript/Engine/VerticalBox.ts';
import type { E_MessageType } from '/Content/UI/Enums/E_MessageType.ts'; import type { E_MessageType } from '/Content/_Core/UI/Enums/E_MessageType.ts';
/** /**
* Toast Container Widget * Toast Container Widget

BIN
Content/Domains/UI/Systems/Toasts/WBP_ToastContainer.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,6 +0,0 @@
// Content/Input/Actions/IA_Aim
import { InputAction } from '/Content/UE/InputAction.ts';
import { Name } from '/Content/UE/Name.ts';
export const IA_Aim = new InputAction(null, new Name('IA_Aim'));

BIN
Content/Input/Actions/IA_Aim.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,6 +0,0 @@
// Content/Input/Actions/IA_Interact
import { InputAction } from '/Content/UE/InputAction.ts';
import { Name } from '/Content/UE/Name.ts';
export const IA_Interact = new InputAction(null, new Name('IA_Interact'));

BIN
Content/Input/Actions/IA_Interact.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,6 +0,0 @@
// Content/Input/Actions/IA_Jump
import { InputAction } from '/Content/UE/InputAction.ts';
import { Name } from '/Content/UE/Name.ts';
export const IA_Jump = new InputAction(null, new Name('IA_Jump'));

BIN
Content/Input/Actions/IA_Jump.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,6 +0,0 @@
// Content/Input/Actions/IA_LeftTrigger.ts
import { InputAction } from '/Content/UE/InputAction.ts';
import { Name } from '/Content/UE/Name.ts';
export const IA_LeftTrigger = new InputAction(null, new Name('IA_LeftTrigger'));

Binary file not shown.

View File

@ -1,6 +0,0 @@
// Content/Input/Actions/IA_Look.ts
import { InputAction } from '/Content/UE/InputAction.ts';
import { Name } from '/Content/UE/Name.ts';
export const IA_Look = new InputAction(null, new Name('IA_Look'));

BIN
Content/Input/Actions/IA_Look.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,6 +0,0 @@
// Content/Input/Actions/IA_Move.ts
import { InputAction } from '/Content/UE/InputAction.ts';
import { Name } from '/Content/UE/Name.ts';
export const IA_Move = new InputAction(null, new Name('IA_Move'));

BIN
Content/Input/Actions/IA_Move.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,5 +0,0 @@
// Content/Input/Actions/IA_NextDebugMode.ts
import { InputAction } from '/Content/UE/InputAction.ts';
export const IA_NextDebugMode = new InputAction(null, 'IA_NextDebugMode');

Binary file not shown.

View File

@ -1,5 +0,0 @@
// Content/Input/Actions/IA_PrevDebugMode.ts
import { InputAction } from '/Content/UE/InputAction.ts';
export const IA_PrevDebugMode = new InputAction(null, 'IA_PrevDebugMode');

Binary file not shown.

View File

@ -1,5 +0,0 @@
// Content/Input/Actions/IA_RightTrigger.ts
import { InputAction } from '/Content/UE/InputAction.ts';
export const IA_RightTrigger = new InputAction(null, 'IA_RightTrigger');

Binary file not shown.

View File

@ -1,5 +0,0 @@
// Content/Input/Actions/IA_Aim
import { InputAction } from '/Content/UE/InputAction.ts';
import { Name } from '/Content/UE/Name.ts';
export const IA_Throw = new InputAction(null, new Name('IA_Aim'));

BIN
Content/Input/Actions/IA_Throw.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,5 +0,0 @@
// Content/Input/Actions/IA_ToggleHUD.ts
import { InputAction } from '/Content/UE/InputAction.ts';
export const IA_ToggleHUD = new InputAction(null, 'IA_ToggleHUD');

BIN
Content/Input/Actions/IA_ToggleHUD.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,8 +0,0 @@
// Content/Input/Actions/IA_ToggleVisualDebug.ts
import { InputAction } from '/Content/UE/InputAction.ts';
export const IA_ToggleVisualDebug = new InputAction(
null,
'IA_ToggleVisualDebug'
);

Binary file not shown.

Binary file not shown.

View File

@ -1,27 +0,0 @@
// Content/Input/IMC_Default.ts
import { IA_LeftTrigger } from '/Content/Input/Actions/IA_LeftTrigger.ts';
import { IA_Look } from '/Content/Input/Actions/IA_Look.ts';
import { IA_Move } from '/Content/Input/Actions/IA_Move.ts';
import { IA_NextDebugMode } from '/Content/Input/Actions/IA_NextDebugMode.ts';
import { IA_PrevDebugMode } from '/Content/Input/Actions/IA_PrevDebugMode.ts';
import { IA_RightTrigger } from '/Content/Input/Actions/IA_RightTrigger.ts';
import { IA_ToggleHUD } from '/Content/Input/Actions/IA_ToggleHUD.ts';
import { IA_ToggleVisualDebug } from '/Content/Input/Actions/IA_ToggleVisualDebug.ts';
import { InputMappingContext } from '/Content/UE/InputMappingContext.ts';
import { Key } from '/Content/UE/Key.ts';
import { IA_Jump } from '/Content/Input/Actions/IA_Jump.ts';
import { IA_Interact } from '/Content/Input/Actions/IA_Inreract.ts';
export const IMC_Default = new InputMappingContext();
IMC_Default.mapKey(IA_LeftTrigger, new Key('IA_LeftTrigger'));
IMC_Default.mapKey(IA_RightTrigger, new Key('IA_RightTrigger'));
IMC_Default.mapKey(IA_NextDebugMode, new Key('IA_NextDebugMode'));
IMC_Default.mapKey(IA_PrevDebugMode, new Key('IA_PrevDebugMode'));
IMC_Default.mapKey(IA_ToggleHUD, new Key('IA_ToggleHUD'));
IMC_Default.mapKey(IA_ToggleVisualDebug, new Key('IA_ToggleVisualDebug'));
IMC_Default.mapKey(IA_Look, new Key('IA_Look'));
IMC_Default.mapKey(IA_Move, new Key('IA_Move'));
IMC_Default.mapKey(IA_Jump, new Key('IA_Jump'));
IMC_Default.mapKey(IA_Interact, new Key('IA_Interact'));

BIN
Content/Input/IMC_Default.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,11 +0,0 @@
// Content/Input/IMC_ItemHeld.ts
import { InputMappingContext } from '/Content/UE/InputMappingContext.ts';
import { Key } from '/Content/UE/Key.ts';
import { IA_Aim } from '/Content/Input/Actions/IA_Aim.ts';
import { IA_Throw } from '/Content/Input/Actions/IA_Throw.ts';
export const IMC_ItemHeld = new InputMappingContext();
IMC_ItemHeld.mapKey(IA_Aim, new Key('IA_Aim'));
IMC_ItemHeld.mapKey(IA_Throw, new Key('IA_Throw'));

BIN
Content/Input/IMC_ItemHeld.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -1,7 +0,0 @@
// Content/Levels/TestLevel.ts
import { BP_MainCharacter } from '/Content/Blueprints/BP_MainCharacter.ts';
import { BP_Rock } from '/Content/Blueprints/BP_Rock.ts';
new BP_MainCharacter();
new BP_Rock();

BIN
Content/Levels/TestLevel.umap (Stored with Git LFS)

Binary file not shown.

5
Content/Maps/Gym.ts Normal file
View File

@ -0,0 +1,5 @@
// Content/Maps/Gym.ts
import { BP_Rock } from '/Content/World/Props/BP_Rock.ts';
new BP_Rock();

BIN
Content/Maps/Gym.umap (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,14 +0,0 @@
// Content/Toasts/Structs/S_ToastMessage.ts
import type { Float } from '/Content/UE/Float.ts';
import type { Integer } from '/Content/UE/Integer.ts';
import type { Text } from '/Content/UE/Text.ts';
import type { E_MessageType } from '/Content/UI/Enums/E_MessageType.ts';
export interface S_ToastMessage {
ID: Integer;
Message: Text;
Type: E_MessageType;
Duration: Float;
CreatedTime: Float;
}

Binary file not shown.

BIN
Content/Toasts/UI/WBP_Toast.uasset (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

View File

@ -1,15 +0,0 @@
// Content/UE/ActorComponent.ts
import { Actor } from '/Content/UE/Actor.ts';
import { Name } from '/Content/UE/Name.ts';
import { UEObject } from '/Content/UE/UEObject.ts';
export class ActorComponent extends UEObject {
constructor(outer: UEObject | null = null, name: Name | string = Name.NONE) {
super(outer, name);
}
public GetOwner(): Actor {
return new Actor();
}
}

View File

@ -1,3 +0,0 @@
// Content/UE/BitmaskInteger.ts
export type BitmaskInteger = number;

View File

@ -1,16 +0,0 @@
// Content/UE/Border.ts
import { ContentWidget } from '/Content/UE/ContentWidget.ts';
import type { LinearColor } from '/Content/UE/LinearColor.ts';
import { Name } from '/Content/UE/Name.ts';
import { UEObject } from '/Content/UE/UEObject.ts';
export class Border extends ContentWidget {
constructor(outer: UEObject | null = null, name: Name | string = Name.NONE) {
super(outer, name);
}
public SetBrushColor(color: LinearColor): void {
console.log(color);
}
}

View File

@ -1,3 +0,0 @@
// Content/UE/Byte.ts
export type Byte = number;

Some files were not shown because too many files have changed in this diff Show More