117 lines
2.4 KiB
C#
117 lines
2.4 KiB
C#
|
|
using System.Diagnostics;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System;
|
|
using Godot;
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[Icon("res://addons/rokojori_action_library/Icons/VirtualCamera3DSlot.svg") ]
|
|
[GlobalClass]
|
|
public partial class VirtualCamera3DSlot:RJAction
|
|
{
|
|
[Export]
|
|
public RJVirtualCamera3D camera;
|
|
|
|
[Export]
|
|
public float priority;
|
|
|
|
CameraEffectRunner cameraEffectRunner = null;
|
|
float _effectTimePosition = 0;
|
|
float _smoothedPriority;
|
|
public float smoothedPriority => _smoothedPriority;
|
|
|
|
|
|
Smoother smoother = new Smoother();
|
|
|
|
public void Update( double delta, VirtualCamera3DManager manager )
|
|
{
|
|
if ( cameraEffectRunner != null )
|
|
{
|
|
if ( cameraEffectRunner.isFinished )
|
|
{
|
|
cameraEffectRunner = null;
|
|
}
|
|
else
|
|
{
|
|
cameraEffectRunner.Update();
|
|
}
|
|
}
|
|
|
|
_smoothedPriority = smoother.SmoothWithCoefficient( _smoothedPriority, priority,
|
|
manager.safeSmoothing,
|
|
(float) delta, manager.smoothStepDelta );
|
|
|
|
}
|
|
|
|
public void SetCameraEffect( CameraEffect effect )
|
|
{
|
|
cameraEffectRunner = new CameraEffectRunner( effect );
|
|
}
|
|
|
|
public Vector3 GetCameraPosition()
|
|
{
|
|
if ( camera == null )
|
|
{
|
|
return Vector3.Zero;
|
|
}
|
|
|
|
if ( cameraEffectRunner == null )
|
|
{
|
|
return camera.GetCameraPosition();
|
|
}
|
|
|
|
var offset = camera.GetGlobalOffset( cameraEffectRunner.position );
|
|
|
|
return camera.GetCameraPosition() + offset;
|
|
}
|
|
|
|
public Quaternion GetCameraRotation()
|
|
{
|
|
if ( camera == null )
|
|
{
|
|
return Quaternion.Identity;
|
|
}
|
|
|
|
if ( cameraEffectRunner == null )
|
|
{
|
|
return camera.GetCameraRotation();
|
|
}
|
|
|
|
return camera.GetCameraRotation() * cameraEffectRunner.rotation;
|
|
}
|
|
|
|
public float GetCameraFOV()
|
|
{
|
|
if ( camera == null )
|
|
{
|
|
return 65;
|
|
}
|
|
|
|
if ( cameraEffectRunner == null )
|
|
{
|
|
return camera.GetCameraFOV();
|
|
}
|
|
|
|
return camera.GetCameraFOV() + cameraEffectRunner.fov;
|
|
}
|
|
|
|
public override void _OnTrigger()
|
|
{
|
|
var vm = GetParent<VirtualCamera3DManager>();
|
|
|
|
if ( vm == null )
|
|
{
|
|
return;
|
|
}
|
|
|
|
vm.SetActiveSlot( this );
|
|
}
|
|
|
|
|
|
}
|
|
}
|