138 lines
2.1 KiB
C#
138 lines
2.1 KiB
C#
using Godot;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Godot.Collections;
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class LODNode:MeshInstance3D
|
|
{
|
|
[Export]
|
|
public LODArrangement arrangement;
|
|
|
|
LODLevel _currentLevel;
|
|
|
|
public override void _Process( double delta )
|
|
{
|
|
if ( arrangement == null )
|
|
{
|
|
return;
|
|
}
|
|
|
|
_hasCameraDirection = false;
|
|
_hasDistance = false;
|
|
_hasPitch = false;
|
|
_hasYaw = false;
|
|
|
|
var level = arrangement.GetLevel( this );
|
|
|
|
if ( level == _currentLevel )
|
|
{
|
|
return;
|
|
}
|
|
|
|
Mesh = level.mesh;
|
|
MaterialOverride = level.material;
|
|
}
|
|
|
|
|
|
public Camera3D camera
|
|
{
|
|
get
|
|
{
|
|
var _camera = GetViewport().GetCamera3D();
|
|
|
|
#if TOOLS
|
|
|
|
if ( Engine.IsEditorHint() )
|
|
{
|
|
_camera = EditorInterface.Singleton.GetEditorViewport3D().GetCamera3D();
|
|
}
|
|
|
|
#endif
|
|
|
|
return _camera;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bool _hasCameraDirection = false;
|
|
Vector3 _cameraDirection;
|
|
|
|
public Vector3 cameraDirection
|
|
{
|
|
get
|
|
{
|
|
if ( _hasCameraDirection )
|
|
{
|
|
return _cameraDirection;
|
|
}
|
|
|
|
_cameraDirection = ( GlobalPosition - camera.GlobalPosition );
|
|
|
|
return _cameraDirection;
|
|
}
|
|
}
|
|
|
|
bool _hasDistance = false;
|
|
float _distance = 0;
|
|
|
|
public float distance
|
|
{
|
|
get
|
|
{
|
|
if ( _hasDistance )
|
|
{
|
|
return _distance;
|
|
}
|
|
|
|
_distance = cameraDirection.Length();
|
|
|
|
return _distance;
|
|
}
|
|
}
|
|
|
|
bool _hasPitch = false;
|
|
float _pitch = 0;
|
|
|
|
public float pitch
|
|
{
|
|
get
|
|
{
|
|
if ( _hasPitch )
|
|
{
|
|
return _pitch;
|
|
}
|
|
|
|
_pitch = Math3D.GlobalPitch( cameraDirection );
|
|
|
|
return _pitch;
|
|
}
|
|
}
|
|
|
|
bool _hasYaw = false;
|
|
float _yaw = 0;
|
|
|
|
public float yaw
|
|
{
|
|
get
|
|
{
|
|
if ( _hasYaw )
|
|
{
|
|
return _yaw;
|
|
}
|
|
|
|
_yaw = Math3D.GlobalYaw( cameraDirection );
|
|
|
|
return _yaw;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
} |