Compare commits

...

8 Commits

Author SHA1 Message Date
Nikolay Petrov fb4a03e717 config: disable motion blur for crisp visuals 2026-01-07 01:04:15 +05:00
Nikolay Petrov 98a7722a91 feat(camera): add camera zone volume for dynamic config switching
- Add BP_CameraZone actor for trigger-based camera transitions
  * Constructor accepts TengriCameraConfig parameter
  * OnBeginOverlap: Apply zone's camera config to character
  * OnEndOverlap: Restore character's default camera config
- Designed for level design workflow
  * Place zones in world with BoxCollision volumes
  * Assign different configs per zone (e.g. combat, puzzle, cinematic)
  * Automatic smooth transitions via CameraManager interpolation

Example use cases:
- Combat arena: Switch to over-the-shoulder view on entry
- Puzzle room: Switch to side-scroller/fixed angle view
- Cinematic area: Apply custom camera settings for dramatic effect

Enables seamless camera behavior changes without code modifications.
2026-01-07 01:03:03 +05:00
Nikolay Petrov ea132ed92b rework TengriMovementConfig 2026-01-07 00:52:30 +05:00
Nikolay Petrov d89e3fb3b3 feat(character): integrate camera system with aiming mode
Character (C++):
- Add camera components to character (SpringArm, Camera, CameraManager)
  * Initialize camera manager in BeginPlay with component references
  * SpringArm attached to capsule with 60cm vertical offset
  * Camera attached to SpringArm socket
- Add AimingCameraConfig for over-the-shoulder aiming view
  * Switch to aiming config when RMB/L2 pressed
  * Return to default config when aim button released
- Improve OnThrowInput code clarity
  * Simplify controller validation flow
  * Clean up trajectory calculation comments
- Add forward declarations for camera classes
- Update class documentation to mention camera integration

Blueprint:
- Remove legacy camera component (AC_Camera)
  * Camera rotation now handled by C++ TengriCameraComponent
  * SpringArm interpolation managed by camera config system
- Update look input to use native controller input
  * AddControllerYawInput/PitchInput for FreeLook mode
  * Skip input in side-scroller mode (camera is fixed)
- Remove camera-related variables (moved to C++ config)
- Simplify EventTick (camera logic now in C++ component)
- Pass DA_CameraAiming config to character constructor

Camera now seamlessly transitions between default and aiming modes,
working in tandem with strafe movement for precise targeting.
2026-01-07 00:38:43 +05:00
Nikolay Petrov 74996e5e4b feat(camera): add dynamic camera system with multiple behavior modes
- Add TengriCameraConfig data asset for camera parameter configuration
  * Support FreeLook (3D) and SideScroller (2.5D) behavior modes
  * Configurable dead zone system for 2.5D gameplay
  * Smooth transition parameters between configs
  * Camera lag settings for cinematic feel
- Add TengriCameraComponent for runtime camera management
  * Post-physics tick to prevent visual jitter with interpolation
  * Dead zone logic: camera only moves when player exits bounds
  * Smooth config transitions using interpolation
  * Debug visualization for dead zone boundaries
- Use interpolated render position from movement component
- Support dynamic config switching via Blueprint (e.g. camera volumes)

Camera system designed for seamless transitions between 3D exploration
and 2.5D platforming sections with configurable dead zones.
2026-01-07 00:33:52 +05:00
Nikolay Petrov 14d3696805 feat(movement): improve air control and ground snapping behavior
- Add directional air control modifier to prevent instant braking mid-air
  * Reduce control effectiveness by 50% when reversing direction (Dot < 0)
  * Allows side-to-side adjustments while maintaining forward momentum
- Remove input requirement for velocity projection on ground snap
  * Project velocity onto slope even without player input
  * Preserves momentum when landing on slopes
- Add KINDA_SMALL_NUMBER checks to prevent division by zero
- Add GetRenderLocation() Blueprint accessor for VFX positioning
- Clean up comments: translate Russian text to English

This makes air movement feel more realistic (less like flying) while
improving slope handling consistency.
2026-01-06 21:42:31 +05:00
Nikolay Petrov abe8f565b6 refactor(collision): improve wall slide behavior for jumping vs grounded movement
- Remove bShowDebug parameter from PerformSweep and ResolveMovement
- Fix wall slide calculation to distinguish jumping from grounded movement
  * Allow upward wall slide during jumps (RemainingDelta.Z > 0)
  * Force horizontal movement only when grounded (RemainingDelta.Z <= 0)
- Add RemainingDelta scaling by Hit.Time for accurate collision response
- Clean up comments: remove Russian text, reduce verbosity
2026-01-06 21:33:10 +05:00
Nikolay Petrov 720ad7888c add starter content 2026-01-06 11:08:20 +05:00
299 changed files with 1717 additions and 575 deletions

View File

@ -26,6 +26,7 @@ r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
r.DefaultFeature.MotionBlur=False
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
@ -96,3 +97,4 @@ ManualIPAddress=
[CoreRedirects]
+ClassRedirects=(OldName="/Script/TengriPlatformer.UTengriCollisionResolver",NewName="/Script/TengriPlatformer.TengriCollisionResolver")

View File

@ -1,6 +1,5 @@
// Content/Blueprints/BP_MainCharacter.ts
import { AC_Camera } from '/Content/Camera/AC_Camera.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';
@ -11,11 +10,8 @@ import { EnhancedInputLocalPlayerSubsystem } from '/Content/UE/EnhancedInputLoca
import type { Float } from '/Content/UE/Float.ts';
import { MathLibrary } from '/Content/UE/MathLibrary.ts';
import type { PlayerController } from '/Content/UE/PlayerController.ts';
import { Rotator } from '/Content/UE/Rotator.ts';
import { SystemLibrary } from '/Content/UE/SystemLibrary.ts';
import { Vector } from '/Content/UE/Vector.ts';
import { TengriMovementComponent } from '/Source/TengriPlatformer/Movement/TengriMovementComponent.ts';
import { DA_TengriMovementConfig } from '/Content/Movement/DA_TengriMovementConfig.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';
@ -23,9 +19,9 @@ 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 { SpringArmComponent } from '/Content/UE/SpringArmComponent.ts';
import { LinearColor } from '/Content/UE/LinearColor.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
@ -90,17 +86,13 @@ export class BP_MainCharacter extends TengriCharacter {
actionValueX: Float,
actionValueY: Float
): void {
this.CameraComponent.ProcessLookInput(
new Vector(actionValueX, actionValueY, 0),
this.DeltaTime
);
if (
this.CameraManager.CurrentConfig.BehaviorType ===
ETengriCameraBehavior.FreeLook
) {
this.AddControllerYawInput(actionValueX);
this.AddControllerPitchInput(actionValueY);
}
/**
* Reset look input when look action is completed
*/
EnhancedInputActionLookCompleted(): void {
this.CameraComponent.ProcessLookInput(new Vector(0, 0, 0), this.DeltaTime);
}
/**
@ -132,7 +124,7 @@ export class BP_MainCharacter extends TengriCharacter {
return new Vector(vec1.X + vec2.X, vec1.Y + vec2.Y, 0);
};
this.TengriMovement.SetInputVector(
this.MovementComponent.SetInputVector(
CalculateResultMovementInputVector(
MathLibrary.GetRightVector(
this.GetControlRotation().roll,
@ -150,7 +142,7 @@ export class BP_MainCharacter extends TengriCharacter {
* Reset movement input when move action is completed
*/
EnhancedInputActionMoveCompleted(): void {
this.TengriMovement.SetInputVector(new Vector(0, 0, 0));
this.MovementComponent.SetInputVector(new Vector(0, 0, 0));
}
EnhancedInputActionJumpTriggered(): void {
@ -161,24 +153,6 @@ export class BP_MainCharacter extends TengriCharacter {
this.MovementComponent.SetJumpInput(false);
}
MovementComponentOnLanded(IsHeavy: boolean): void {
if (IsHeavy) {
SystemLibrary.PrintString(
'Boom! (Heavy)',
true,
true,
new LinearColor(1, 0, 0, 1)
);
} else {
SystemLibrary.PrintString(
'Tap (Light)',
true,
true,
new LinearColor(0, 1, 0, 1)
);
}
}
/**
* Initialize all systems when character spawns
* Order: Toast Debug Movement (movement last as it may generate debug output)
@ -200,11 +174,6 @@ export class BP_MainCharacter extends TengriCharacter {
);
}
this.CameraComponent.InitializeCameraSystem(
this.InputDeviceComponent,
this.DebugHUDComponent
);
CreateWidget(WBP_HUD).AddToViewport();
}
@ -212,60 +181,21 @@ export class BP_MainCharacter extends TengriCharacter {
* Update all systems each frame
* Called by Unreal Engine game loop
*/
EventTick(DeltaTime: Float): void {
this.DeltaTime = DeltaTime;
EventTick(): void {
if (this.ShowDebugInfo) {
this.DebugHUDComponent.UpdateHUD(SystemLibrary.GetGameTimeInSeconds());
this.ToastSystemComponent.UpdateToastSystem();
}
this.CameraComponent.UpdateCameraRotation(DeltaTime);
this.GetController().SetControlRotation(
new Rotator(
0,
this.CameraComponent.GetCameraRotation().Pitch,
this.CameraComponent.GetCameraRotation().Yaw
)
);
if (this.ShowDebugInfo) {
this.InputDeviceComponent.UpdateDebugPage();
this.CameraComponent.UpdateDebugPage();
}
this.SpringArm.TargetArmLength = MathLibrary.FInterpTo(
this.SpringArm.TargetArmLength,
this.bIsAiming ? this.AimArmLength : this.DefaultArmLength,
DeltaTime,
10.0
);
this.SpringArm.TargetOffset = MathLibrary.VInterpTo(
this.SpringArm.TargetOffset,
this.bIsAiming ? this.AimSocketOffset : this.DefaultSocketOffset,
DeltaTime,
10.0
);
}
// ════════════════════════════════════════════════════════════════════════════════════════
// VARIABLES
// ════════════════════════════════════════════════════════════════════════════════════════
/**
* Camera system component - handles camera rotation and sensitivity
* @category Components
*/
SpringArm = new SpringArmComponent();
/**
* Camera system component - handles camera rotation and sensitivity
* @category Components
*/
CameraComponent = new AC_Camera();
/**
* Input device detection component - manages input device state and detection
* @category Components
@ -278,10 +208,6 @@ export class BP_MainCharacter extends TengriCharacter {
*/
ToastSystemComponent = new AC_ToastSystem();
TengriMovement = new TengriMovementComponent({
MovementConfig: DA_TengriMovementConfig,
});
/**
* Debug HUD system - displays movement parameters and performance metrics
* @category Components
@ -295,37 +221,8 @@ export class BP_MainCharacter extends TengriCharacter {
*/
private ShowDebugInfo: boolean = true;
/**
* @category Camera
* @instanceEditable true
*/
private readonly DefaultArmLength: Float = 400.0;
/**
* @category Camera
* @instanceEditable true
*/
private readonly AimArmLength: Float = 250.0;
/**
* @category Camera
* @instanceEditable true
*/
private readonly DefaultSocketOffset: Vector = new Vector(0.0, 0.0, 0.0);
/**
* @category Camera
* @instanceEditable true
*/
private readonly AimSocketOffset: Vector = new Vector(0.0, 100.0, 60.0);
/**
* Cached delta time from last tick - used for time-based calculations
*/
private DeltaTime: Float = 0.0;
constructor() {
super();
super(new DA_CameraAiming());
this.InteractAction = IA_Interact;
this.ThrowAction = IA_Throw;

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

Binary file not shown.

View File

@ -1,323 +0,0 @@
// Content/Camera/Components/AC_Camera.ts
import type { AC_DebugHUD } from '/Content/Debug/Components/AC_DebugHUD.ts';
import type { AC_InputDevice } from '/Content/Input/Components/AC_InputDevice.ts';
import { ActorComponent } from '/Content/UE/ActorComponent.ts';
import type { Float } from '/Content/UE/Float.ts';
import { MathLibrary } from '/Content/UE/MathLibrary.ts';
import { SystemLibrary } from '/Content/UE/SystemLibrary.ts';
import { Vector } from '/Content/UE/Vector.ts';
/**
* Camera System Component
* Deterministic camera control with smooth rotation and device-aware sensitivity
* Provides precise control over camera behavior for consistent experience
*/
export class AC_Camera extends ActorComponent {
// ════════════════════════════════════════════════════════════════════════════════════════
// FUNCTIONS
// ════════════════════════════════════════════════════════════════════════════════════════
/**
* Process look input and update camera rotation
* @param InputDelta - Input delta (X = Yaw, Y = Pitch)
* @param DeltaTime - Time since last frame
* @category Input Processing
*/
public ProcessLookInput(InputDelta: Vector, DeltaTime: Float): void {
if (this.IsInitialized) {
const invertMultiplier = this.InvertYAxis ? -1.0 : 1.0;
let sensitivity: Float = 0;
if (SystemLibrary.IsValid(this.InputDeviceComponent)) {
sensitivity = this.InputDeviceComponent.IsGamepad()
? this.GamepadSensitivity
: this.MouseSensitivity;
} else {
sensitivity = this.MouseSensitivity;
}
const CalculateTargetPitch = (
targetPitch: Float,
inputDeltaY: Float,
deltaTime: Float
): Float =>
targetPitch - inputDeltaY * sensitivity * invertMultiplier * deltaTime;
const CalculateTargetYaw = (
targetYaw: Float,
inputDeltaX: Float,
deltaTime: Float
): Float => targetYaw + inputDeltaX * sensitivity * deltaTime;
this.TargetPitch = MathLibrary.ClampFloat(
CalculateTargetPitch(this.TargetPitch, InputDelta.Y, DeltaTime),
this.PitchMin,
this.PitchMax
);
this.TargetYaw = CalculateTargetYaw(
this.TargetYaw,
InputDelta.X,
DeltaTime
);
this.InputMagnitude = MathLibrary.VectorLength(InputDelta);
}
}
/**
* Update camera rotation with smooth interpolation
* @param DeltaTime - Time since last frame
* @category Camera Updates
*/
public UpdateCameraRotation(DeltaTime: Float): void {
if (this.IsInitialized) {
if (this.SmoothingSpeed > 0) {
// Smooth interpolation to target rotation
this.CurrentPitch = MathLibrary.FInterpTo(
this.CurrentPitch,
this.TargetPitch,
DeltaTime,
this.SmoothingSpeed
);
this.CurrentYaw = MathLibrary.FInterpTo(
this.CurrentYaw,
this.TargetYaw,
DeltaTime,
this.SmoothingSpeed
);
} else {
// Instant rotation (no smoothing)
this.CurrentPitch = this.TargetPitch;
this.CurrentYaw = this.TargetYaw;
}
}
}
/**
* Get current camera rotation for applying to SpringArm
* @returns Current camera rotation values
* @category Public Interface
* @pure true
*/
public GetCameraRotation(): { Pitch: Float; Yaw: Float } {
return {
Pitch: this.CurrentPitch,
Yaw: this.CurrentYaw,
};
}
/**
* Check if camera is currently rotating
* @returns True if there's active rotation input
* @category State Queries
* @pure true
*/
public IsCameraRotating(): boolean {
return this.InputMagnitude > 0.01;
}
/**
* Initialize camera system with default settings
* @category System Setup
*/
public InitializeCameraSystem(
InputDeviceRef: AC_InputDevice,
DebugComponentRef: AC_DebugHUD
): void {
this.InputDeviceComponent = InputDeviceRef;
this.DebugHUDComponent = DebugComponentRef;
this.IsInitialized = true;
if (SystemLibrary.IsValid(this.DebugHUDComponent)) {
this.DebugHUDComponent.AddDebugPage(
this.DebugPageID,
'Camera System',
60
);
}
}
/**
* Update debug HUD with current camera info
* @category Debug
*/
public UpdateDebugPage(): void {
if (SystemLibrary.IsValid(this.DebugHUDComponent)) {
if (
this.DebugHUDComponent.ShouldUpdatePage(
this.DebugPageID,
SystemLibrary.GetGameTimeInSeconds()
)
) {
this.DebugHUDComponent.UpdatePageContent(
this.DebugPageID,
`Current Device: ${SystemLibrary.IsValid(this.InputDeviceComponent) ? this.InputDeviceComponent.GetCurrentInputDevice() : 'Input Device Component Not Found'}\n` +
`Sensitivity: ${SystemLibrary.IsValid(this.InputDeviceComponent) && this.InputDeviceComponent.IsGamepad() ? this.GamepadSensitivity : this.MouseSensitivity}\n` +
`Pitch: ${this.GetCameraRotation().Pitch}°\n` +
`Yaw: ${this.GetCameraRotation().Yaw}°\n` +
`Is Rotating: ${this.IsCameraRotating() ? 'Yes' : 'No'}\n` +
`Smoothing: ${this.SmoothingSpeed}\n` +
`Invert Y: ${this.InvertYAxis ? 'Yes' : 'No'}`
);
}
}
}
/**
* Get camera configuration and state data for testing purposes
* Provides read-only access to private variables for automated tests
* Only includes essential data needed for test validation
* @category Debug
* @returns Object containing camera settings (sensitivity, pitch limits) for test assertions
*/
public GetTestData(): {
MouseSensitivity: Float;
GamepadSensitivity: Float;
PitchMin: Float;
PitchMax: Float;
} {
return {
MouseSensitivity: this.MouseSensitivity,
GamepadSensitivity: this.GamepadSensitivity,
PitchMin: this.PitchMin,
PitchMax: this.PitchMax,
};
}
// ════════════════════════════════════════════════════════════════════════════════════════
// VARIABLES
// ════════════════════════════════════════════════════════════════════════════════════════
/**
* Mouse sensitivity multiplier for camera rotation
* Higher values result in faster camera movement with mouse input
* Typical range: 50.0 (slow) - 200.0 (fast)
* @category Camera Config
* @instanceEditable true
* @default 100.0
*/
private readonly MouseSensitivity: Float = 100.0;
/**
* Gamepad sensitivity multiplier for camera rotation
* Higher than mouse sensitivity to compensate for analog stick precision
* Typical range: 100.0 (slow) - 300.0 (fast)
* @category Camera Config
* @instanceEditable true
* @default 150.0
*/
private readonly GamepadSensitivity: Float = 150.0;
/**
* Invert vertical axis for camera rotation
* When true, pushing up on input rotates camera down and vice versa
* Common preference for flight-sim style controls
* @category Camera Config
* @instanceEditable true
* @default false
*/
private readonly InvertYAxis: boolean = false;
/**
* Minimum pitch angle in degrees (looking down)
* Prevents camera from rotating beyond this angle
* Set to -89° to avoid gimbal lock at -90°
* @category Camera Config
* @instanceEditable true
* @default -89.0
*/
private readonly PitchMin: Float = -89.0;
/**
* Maximum pitch angle in degrees (looking up)
* Prevents camera from rotating beyond this angle
* Set to +89° to avoid gimbal lock at +90°
* @category Camera Config
* @instanceEditable true
* @default 89.0
*/
private readonly PitchMax: Float = 89.0;
/**
* Speed of smooth interpolation to target rotation
* Higher values make camera more responsive but less smooth
* Set to 0 for instant rotation without interpolation
* Typical range: 10.0 (smooth) - 30.0 (responsive)
* @category Camera Config
* @instanceEditable true
* @default 20.0
*/
private readonly SmoothingSpeed: Float = 20.0;
/**
* Current pitch angle for rendering
* Smoothly interpolates towards TargetPitch based on SmoothingSpeed
* Updated every frame by UpdateCameraRotation()
* @category Camera State
*/
private CurrentPitch: Float = 0;
/**
* Current yaw angle for rendering
* Smoothly interpolates towards TargetYaw based on SmoothingSpeed
* Updated every frame by UpdateCameraRotation()
* @category Camera State
*/
private CurrentYaw: Float = 0;
/**
* Target pitch angle from player input
* Updated by ProcessLookInput() based on input delta
* Clamped to PitchMin/PitchMax range
* @category Camera State
*/
private TargetPitch: Float = 0;
/**
* Target yaw angle from player input
* Updated by ProcessLookInput() based on input delta
* No clamping - can rotate freely beyond 360°
* @category Camera State
*/
private TargetYaw: Float = 0;
/**
* Magnitude of current input vector
* Used by IsCameraRotating() to detect active camera input
* Cached to avoid recalculating VectorLength every frame
* @category Camera State
* @default 0.0
*/
private InputMagnitude: Float = 0;
/**
* System initialization state flag
* @category Camera State
*/
private IsInitialized: boolean = false;
/**
* Reference to input device component for device detection
* Set externally, used for sensitivity adjustments
* @category Components
*/
public InputDeviceComponent: AC_InputDevice | null = null;
/**
* Reference to debug HUD component for displaying camera info
* Optional, used for debugging purposes
* @category Components
*/
public DebugHUDComponent: AC_DebugHUD | null = null;
/**
* Debug page identifier for organizing debug output
* Used by debug HUD to categorize information
* @category Debug
*/
public readonly DebugPageID: string = 'CameraInfo';
}

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

Binary file not shown.

View File

@ -0,0 +1,25 @@
// Content/Camera/BP_CameraZone.ts
import { Actor } from '/Content/UE/Actor.ts';
import type { TengriCharacter } from '/Source/TengriPlatformer/Character/TengriCharacter.ts';
import type { TengriCameraConfig } from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts';
export class BP_CameraZone extends Actor {
constructor(ZoneConfig: TengriCameraConfig) {
super();
this.ZoneConfig = ZoneConfig;
}
EventActorBeginOverlap(OtherActor: Actor): void {
(OtherActor as TengriCharacter).CameraManager.SetCameraConfig(
this.ZoneConfig
);
}
EventActorEndOverlap(OtherActor: Actor): void {
(OtherActor as TengriCharacter).CameraManager.SetCameraConfig();
}
private readonly ZoneConfig: TengriCameraConfig;
}

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

Binary file not shown.

View File

@ -0,0 +1,23 @@
import {
ETengriCameraBehavior,
TengriCameraConfig,
} from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts';
import { Vector } from '/Content/UE/Vector.ts';
import { Rotator } from '/Content/UE/Rotator.ts';
export class DA_CameraAiming extends TengriCameraConfig {
override BehaviorType = ETengriCameraBehavior.FreeLook;
override FixedRotation = new Rotator(0, -15, -90);
override TargetArmLength = 250;
override SocketOffset = new Vector(0, 100, 60);
override TransitionSpeed = 2;
override bEnableLag = false;
override DeadZoneExtent = new Vector(200, 0, 150);
override DeadZoneOffset = new Vector(0, 0, 50);
override bDrawDebugBox = false;
}

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

Binary file not shown.

View File

@ -0,0 +1,23 @@
import {
ETengriCameraBehavior,
TengriCameraConfig,
} from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts';
import { Vector } from '/Content/UE/Vector.ts';
import { Rotator } from '/Content/UE/Rotator.ts';
export class DA_CameraDefault extends TengriCameraConfig {
override BehaviorType = ETengriCameraBehavior.FreeLook;
override FixedRotation = new Rotator(0, -15, -90);
override TargetArmLength = 400;
override SocketOffset = new Vector(0, 0, 0);
override TransitionSpeed = 2;
override bEnableLag = false;
override DeadZoneExtent = new Vector(200, 0, 150);
override DeadZoneOffset = new Vector(0, 0, 50);
override bDrawDebugBox = false;
}

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

Binary file not shown.

View File

@ -0,0 +1,24 @@
import {
ETengriCameraBehavior,
TengriCameraConfig,
} from '/Source/TengriPlatformer/Camera/Core/TengriCameraConfig.ts';
import { Vector } from '/Content/UE/Vector.ts';
import { Rotator } from '/Content/UE/Rotator.ts';
export class DA_CameraScroller extends TengriCameraConfig {
override BehaviorType = ETengriCameraBehavior.FreeLook;
override FixedRotation = new Rotator(0, 0, 0);
override TargetArmLength = 1200;
override SocketOffset = new Vector(0, 0, 100);
override TransitionSpeed = 1.5;
override bEnableLag = true;
override LagSpeed = 5;
override DeadZoneExtent = new Vector(100, 300, 100);
override DeadZoneOffset = new Vector(0, 0, 50);
override bDrawDebugBox = false;
}

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

Binary file not shown.

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

Binary file not shown.

View File

@ -5,20 +5,34 @@ import { TengriMovementConfig } from '/Source/TengriPlatformer/Movement/Core/Ten
export class DA_TengriMovementConfig extends TengriMovementConfig {
override MaxSpeed = 800.0;
override Acceleration = 2048.0;
override Friction = 8.0;
override Gravity = 980.0;
override Friction = 6.0;
override RotationSpeed = 360.0;
override MinSpeedForRotation = 10.0;
override SteepSlopeSlideFactor = 0.0;
override CapsuleRadius = 34.0;
override CapsuleHalfHeight = 88.0;
override MaxJumpHeight = 1000.0;
override MinJumpHeight = 40;
override TimeToJumpApex = 0.5;
override CoyoteTime = 0.15;
override JumpBufferTime = 0.15;
override AirControl = 0.15;
override AirFriction = 0.1;
override FallingGravityScale = 1.5;
override TerminalVelocity = 2000;
override HeavyLandVelocityThreshold = -1000;
override MaxSlideIterations = 3;
override MaxStepHeight = 45.0;
override GroundSnapDistance = 20.0;
override GroundSnapOffset = 0.15;
override PhysicsTickRate = 120;
override MaxAccumulatedTime = 0.1;
override bEnableInterpolation = true;
override WalkableAngleDeg = 50.0;
override SteepSlopeAngleDeg = 85.0;
override WallAngleDeg = 95.0;

Binary file not shown.

BIN
Content/StarterContent/Architecture/Floor_400x400.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/Pillar_50x500.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/SM_AssetPlatform.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/Wall_400x200.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/Wall_400x300.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/Wall_400x400.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/Wall_500x500.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/Wall_Door_400x300.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Architecture/Wall_Door_400x400.uasset (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Content/StarterContent/Audio/Collapse01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Collapse02.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Collapse_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Explosion01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Explosion02.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Explosion_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Fire01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Fire01_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Fire_Sparks01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Fire_Sparks01_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Light01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Light01_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Light02.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Light02_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Smoke01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Smoke01_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Starter_Background_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Starter_Birds01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Starter_Music01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Starter_Music_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Starter_Wind05.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Starter_Wind06.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Steam01.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Audio/Steam01_Cue.uasset (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Content/StarterContent/Blueprints/Assets/SM_Arrows.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Blueprints/Assets/Skybox.uasset (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
Content/StarterContent/Blueprints/BP_LightStudio.uasset (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

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

Binary file not shown.

BIN
Content/StarterContent/Maps/Minimal_Default_BuiltData.uasset (Stored with Git LFS) Normal file

Binary file not shown.

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

Binary file not shown.

BIN
Content/StarterContent/Maps/StarterMap_BuiltData.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_AssetPlatform.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Basic_Floor.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Basic_Wall.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Brick_Clay_Beveled.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Brick_Clay_New.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Brick_Clay_Old.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Brick_Cut_Stone.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Brick_Hewn_Stone.uasset (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
Content/StarterContent/Materials/M_CobbleStone_Pebble.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_CobbleStone_Rough.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_CobbleStone_Smooth.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_ColorGrid_LowSpec.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Concrete_Grime.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Concrete_Panels.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Concrete_Poured.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Concrete_Tiles.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Glass.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Ground_Grass.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Ground_Gravel.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Ground_Moss.uasset (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Metal_Chrome.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Metal_Copper.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/StarterContent/Materials/M_Metal_Gold.uasset (Stored with Git LFS) Normal file

Binary file not shown.

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