Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
TppCamera.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
6
7 public override bool UsesMovementControls => false;
8
9 public override bool IsEntityControlEnabled => true;
10
11 public TppCamera(GameWidget gameWidget) : base(gameWidget) { }
12
13 public override void Activate(Camera previousCamera) {
14 m_position = previousCamera.ViewPosition;
15 SetupPerspectiveCamera(m_position, previousCamera.ViewDirection, previousCamera.ViewUp);
16 }
17
18 public override void Update(float dt) {
19 if (GameWidget.Target == null) {
20 return;
21 }
22 Matrix matrix = Matrix.CreateFromQuaternion(GameWidget.Target.ComponentCreatureModel.EyeRotation);
23 matrix.Translation = GameWidget.Target.ComponentBody.Position + 0.9f * GameWidget.Target.ComponentBody.BoxSize.Y * Vector3.UnitY;
24 Vector3 v = -2.25f * matrix.Forward + 1.75f * matrix.Up;
25 Vector3 vector = matrix.Translation + v;
26 if (Vector3.Distance(vector, m_position) < 10f) {
27 Vector3 v2 = vector - m_position;
28 float s = 3f * dt;
29 m_position += s * v2;
30 }
31 else {
32 m_position = vector;
33 }
34 Vector3 vector2 = m_position - matrix.Translation;
35 float? num = null;
36 Vector3 vector3 = Vector3.Normalize(Vector3.Cross(vector2, Vector3.UnitY));
37 Vector3 v3 = Vector3.Normalize(Vector3.Cross(vector2, vector3));
38 SubsystemTerrain subsystemTerrain = GameWidget.SubsystemGameWidgets.SubsystemTerrain;
39 for (int i = 0; i <= 0; i++) {
40 for (int j = 0; j <= 0; j++) {
41 Vector3 v4 = 0.5f * (vector3 * i + v3 * j);
42 Vector3 vector4 = matrix.Translation + v4;
43 Vector3 end = vector4 + vector2 + Vector3.Normalize(vector2) * 0.5f;
44 TerrainRaycastResult? terrainRaycastResult = subsystemTerrain.Raycast(
45 vector4,
46 end,
47 false,
48 true,
49 delegate(int value, float _) {
51 for (int k = 0; k < 6; k++) {
52 if (!block.IsFaceTransparent(subsystemTerrain, k, value)) {
53 return true;
54 }
55 }
56 return false;
57 }
58 );
59 if (terrainRaycastResult.HasValue) {
60 num = num.HasValue ? MathUtils.Min(num.Value, terrainRaycastResult.Value.Distance) : terrainRaycastResult.Value.Distance;
61 }
62 }
63 }
64 Vector3 vector5 = !num.HasValue
65 ? matrix.Translation + vector2
66 : matrix.Translation + Vector3.Normalize(vector2) * MathUtils.Max(num.Value - 0.5f, 0.2f);
67 SetupPerspectiveCamera(vector5, matrix.Translation - vector5, Vector3.UnitY);
68 }
69 }
70}
static int Min(int x1, int x2)
static int Max(int x1, int x2)
BasePerspectiveCamera(GameWidget gameWidget)
void SetupPerspectiveCamera(Vector3 position, Vector3 direction, Vector3 up)
virtual bool IsFaceTransparent(SubsystemTerrain subsystemTerrain, int face, int value)
Vector3 ViewPosition
GameWidget GameWidget
Vector3 ViewUp
Vector3 ViewDirection
virtual ? TerrainRaycastResult Raycast(Vector3 start, Vector3 end, bool useInteractionBoxes, bool skipAirBlocks, Func< int, float, bool > action)
static int ExtractContents(int value)
override bool UsesMovementControls
TppCamera(GameWidget gameWidget)
override bool IsEntityControlEnabled
override void Update(float dt)
override void Activate(Camera previousCamera)
static Matrix CreateFromQuaternion(Quaternion quaternion)
Vector3 Translation
static Vector3 Cross(Vector3 v1, Vector3 v2)
static Vector3 Normalize(Vector3 v)
static float Distance(Vector3 v1, Vector3 v2)
static readonly Vector3 UnitY