Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
DeathCamera.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
6
8
9 public float m_vrDeltaYaw;
10
11 public override bool UsesMovementControls => false;
12
13 public override bool IsEntityControlEnabled => false;
14
15 public DeathCamera(GameWidget gameWidget) : base(gameWidget) { }
16
17 public override void Activate(Camera previousCamera) {
18 m_position = previousCamera.ViewPosition;
19 Vector3 vector = GameWidget.Target?.ComponentBody.BoundingBox.Center() ?? m_position;
22 if (GameWidget.Target is ComponentPlayer
23 && m_bestPosition.HasValue) {
25 m_vrDeltaYaw = vector2.X;
26 }
27 }
28
29 public override void Update(float dt) {
30 Vector3 v = GameWidget.Target?.ComponentBody.BoundingBox.Center() ?? m_position;
31 if (m_bestPosition.HasValue) {
32 if (Vector3.Distance(m_bestPosition.Value, m_position) > 20f) {
34 }
35 m_position += 1.5f * dt * (m_bestPosition.Value - m_position);
36 }
38 }
39
40 public Vector3 FindBestCameraPosition(Vector3 targetPosition, float distance) {
41 Vector3? vector = null;
42 for (int i = 0; i < 36; i++) {
43 float x = 1f + (float)Math.PI * 2f * i / 36f;
44 Vector3 v2 = Vector3.Normalize(new Vector3(MathF.Sin(x), 0.5f, MathF.Cos(x)));
45 Vector3 vector2 = targetPosition + v2 * distance;
46 TerrainRaycastResult? terrainRaycastResult = GameWidget.SubsystemGameWidgets.SubsystemTerrain.Raycast(
47 targetPosition,
48 vector2,
49 false,
50 true,
52 );
53 Vector3 zero;
54 if (terrainRaycastResult.HasValue) {
55 CellFace cellFace = terrainRaycastResult.Value.CellFace;
56 zero = new Vector3(cellFace.X + 0.5f, cellFace.Y + 0.5f, cellFace.Z + 0.5f) - 1f * v2;
57 }
58 else {
59 zero = vector2;
60 }
61 if (!vector.HasValue
62 || Vector3.Distance(zero, targetPosition) > Vector3.Distance(vector.Value, targetPosition)) {
63 vector = zero;
64 }
65 }
66 if (vector.HasValue) {
67 return vector.Value;
68 }
69 return targetPosition;
70 }
71 }
72}
Engine.Vector3 Vector3
BasePerspectiveCamera(GameWidget gameWidget)
void SetupPerspectiveCamera(Vector3 position, Vector3 direction, Vector3 up)
virtual bool IsTransparent_(int value)
Vector3 ViewPosition
GameWidget GameWidget
override void Activate(Camera previousCamera)
override bool UsesMovementControls
override bool IsEntityControlEnabled
DeathCamera(GameWidget gameWidget)
Vector3 FindBestCameraPosition(Vector3 targetPosition, float distance)
override void Update(float dt)
static int ExtractContents(int value)
Vector3 ToYawPitchRoll()
static Matrix CreateWorld(Vector3 position, Vector3 forward, Vector3 up)
static Vector3 Normalize(Vector3 v)
static readonly Vector3 Zero
static float Distance(Vector3 v1, Vector3 v2)
static readonly Vector3 UnitY