From 98a7722a915844794647873c3a3525ca24b7d0a6 Mon Sep 17 00:00:00 2001 From: Nikolay Petrov Date: Wed, 7 Jan 2026 01:02:16 +0500 Subject: [PATCH] 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. --- Content/Camera/BP_CameraZone.ts | 25 +++++++++++++++++++ Content/Camera/BP_CameraZone.uasset | 3 +++ Content/Levels/TestLevel.umap | 4 +-- .../Camera/TengriCameraComponent.ts | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 Content/Camera/BP_CameraZone.ts create mode 100644 Content/Camera/BP_CameraZone.uasset diff --git a/Content/Camera/BP_CameraZone.ts b/Content/Camera/BP_CameraZone.ts new file mode 100644 index 0000000..8a949a5 --- /dev/null +++ b/Content/Camera/BP_CameraZone.ts @@ -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; +} diff --git a/Content/Camera/BP_CameraZone.uasset b/Content/Camera/BP_CameraZone.uasset new file mode 100644 index 0000000..7fadb30 --- /dev/null +++ b/Content/Camera/BP_CameraZone.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51324109b47bc7bc7ad20b1ef1f040479bbc3ee63955dca23ae860c8ade26d83 +size 45854 diff --git a/Content/Levels/TestLevel.umap b/Content/Levels/TestLevel.umap index 2de23f8..901e25d 100644 --- a/Content/Levels/TestLevel.umap +++ b/Content/Levels/TestLevel.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56542633859c7aa5592d39c7af3bb0dc45f3de4c712401410b24d1f38c059927 -size 575376 +oid sha256:ebe25913daba040cfc20d79bc2e9dc6d2cefd913f648505270bc40c9c1659525 +size 111058 diff --git a/Source/TengriPlatformer/Camera/TengriCameraComponent.ts b/Source/TengriPlatformer/Camera/TengriCameraComponent.ts index 96eddfb..defad23 100644 --- a/Source/TengriPlatformer/Camera/TengriCameraComponent.ts +++ b/Source/TengriPlatformer/Camera/TengriCameraComponent.ts @@ -10,7 +10,7 @@ export class TengriCameraComponent extends ActorComponent { this.CurrentConfig = new TengriCameraConfig(); } - public SetCameraConfig(NewConfig: TengriCameraConfig): void { + public SetCameraConfig(NewConfig?: TengriCameraConfig): void { console.log(NewConfig); }