Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
ComponentInput.cs
浏览该文件的文档.
1using Engine;
2using Engine.Input;
5
6namespace Game {
9
11
13
15
17
18 public double m_lastJumpTime;
19
21
22 public bool ToggleFlyInDoubleJump { get; set; } = true;
24
25 public bool IsControlledByTouch { get; set; } = Touch.IsTouched;
26
27 public bool IsControlledByVr {
28 get {
30 return (m_componentPlayer.GameWidget.Input.Devices & WidgetInputDevice.VrControllers) != 0;
31 }
32 return false;
33 }
34 }
35
36 public bool AllowHandleInput { get; set; } = true;
37
38 public IInventory SplitSourceInventory { get; set; }
39
40 public int SplitSourceSlotIndex { get; set; }
41
43
45
46 public virtual void SetSplitSourceInventoryAndSlot(IInventory inventory, int slotIndex) {
47 SplitSourceInventory = inventory;
48 SplitSourceSlotIndex = slotIndex;
49 }
50
51 public virtual Ray3? CalculateVrHandRay() => null;
52
53 public virtual void Update(float dt) {
54 m_playerInput = default;
59 if (m_playerInput.Jump) {
61 m_playerInput.ToggleCreativeFly = true;
62 m_lastJumpTime = 0.0;
63 }
64 else {
66 }
67 }
68 m_playerInput.CameraMove = m_playerInput.Move;
69 m_playerInput.CameraCrouchMove = m_playerInput.CrouchMove;
70 m_playerInput.CameraLook = m_playerInput.Look;
71 if (!Window.IsActive
72 || !m_componentPlayer.PlayerData.IsReadyForPlaying) {
73 m_playerInput = default;
74 }
75 else if (m_componentPlayer.ComponentHealth.Health <= 0f
76 || m_componentPlayer.ComponentSleep.SleepFactor > 0f
77 || !m_componentPlayer.GameWidget.ActiveCamera.IsEntityControlEnabled) {
79 CameraMove = m_playerInput.CameraMove,
80 CameraCrouchMove = m_playerInput.CameraCrouchMove,
81 CameraLook = m_playerInput.CameraLook,
82 TimeOfDay = m_playerInput.TimeOfDay,
83 Precipitation = m_playerInput.Precipitation,
84 Fog = m_playerInput.Fog,
85 TakeScreenshot = m_playerInput.TakeScreenshot,
86 KeyboardHelp = m_playerInput.KeyboardHelp
87 };
88 }
89 else if (m_componentPlayer.GameWidget.ActiveCamera.UsesMovementControls) {
90 m_playerInput.Move = Vector3.Zero;
91 m_playerInput.CrouchMove = Vector3.Zero;
92 m_playerInput.Look = Vector2.Zero;
93 m_playerInput.Jump = false;
94 m_playerInput.ToggleCrouch = false;
95 m_playerInput.ToggleCreativeFly = false;
96 }
97 if (m_playerInput.Move.LengthSquared() > 1f) {
98 m_playerInput.Move = Vector3.Normalize(m_playerInput.Move);
99 }
100 if (m_playerInput.CrouchMove.LengthSquared() > 1f) {
101 m_playerInput.CrouchMove = Vector3.Normalize(m_playerInput.CrouchMove);
102 }
103 if (SplitSourceInventory != null
104 && SplitSourceInventory.GetSlotCount(SplitSourceSlotIndex) == 0) {
106 }
107 }
108
109 public override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap) {
110 m_subsystemTime = Project.FindSubsystem<SubsystemTime>(true);
111 m_componentGui = Entity.FindComponent<ComponentGui>(true);
112 m_componentPlayer = Entity.FindComponent<ComponentPlayer>(true);
113 }
114
115 public virtual void UpdateInputFromMouseAndKeyboard(WidgetInput input) {
116 Vector3 viewPosition = m_componentPlayer.GameWidget.ActiveCamera.ViewPosition;
117 Vector3 viewDirection = m_componentPlayer.GameWidget.ActiveCamera.ViewDirection;
118 if (m_componentGui.ModalPanelWidget != null
120 if (!input.IsMouseCursorVisible) {
121 input.IsMouseCursorVisible = true;
122 ViewWidget viewWidget = m_componentPlayer.ViewWidget;
123 SetMousePositionInNextFrame = viewWidget.WidgetToScreen(viewWidget.ActualSize / 2f);
124 }
125 else if (SetMousePositionInNextFrame.HasValue
126 && input.MousePosition.HasValue) {
127 if (!input.IsPadCursorVisible) {
128 input.MousePosition = SetMousePositionInNextFrame.Value;
129 }
131 }
132 }
133 else {
134 input.IsMouseCursorVisible = false;
135 Vector2 zero = Vector2.Zero;
136 int num = 0;
137 if (Window.IsActive
138 && Time.FrameDuration > 0f) {
139 Point2 mouseMovement = input.MouseMovement;
140 int mouseWheelMovement = input.MouseWheelMovement;
141 float num2 = MathF.Pow(1.4f, 10f * (SettingsManager.LookSensitivity - 0.5f));
142 zero.X = 0.02f * num2 * mouseMovement.X / Time.FrameDuration / 60f;
143 zero.Y = -0.02f * num2 * mouseMovement.Y / Time.FrameDuration / 60f;
144 num = mouseWheelMovement / 120;
145 if (mouseMovement != Point2.Zero) {
146 IsControlledByTouch = false;
147 }
148 }
149 Vector3 vector = default;
150 vector += -Vector3.UnitX * (input.IsKeyOrMouseDown("MoveLeft") ? 1 : 0);
151 vector += Vector3.UnitX * (input.IsKeyOrMouseDown("MoveRight") ? 1 : 0);
152 vector += Vector3.UnitY * (input.IsKeyOrMouseDown("MoveUp") ? 1 : 0);
153 vector += -Vector3.UnitY * (input.IsKeyOrMouseDown("MoveDown") ? 1 : 0);
154 vector += -Vector3.UnitZ * (input.IsKeyOrMouseDown("MoveBack") ? 1 : 0);
155 vector += Vector3.UnitZ * (input.IsKeyOrMouseDown("MoveFront") ? 1 : 0);
156 m_playerInput.Look += new Vector2(Math.Clamp(zero.X, -15f, 15f), Math.Clamp(zero.Y, -15f, 15f));
157 m_playerInput.Move += vector;
158 m_playerInput.CrouchMove += vector;
159 m_playerInput.Jump |= input.IsKeyOrMouseDownOnce("Jump");
160 m_playerInput.ScrollInventory -= num;
161 m_playerInput.Dig = input.IsKeyOrMouseDown("Dig") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Dig;
162 m_playerInput.Hit = input.IsKeyOrMouseDownOnce("Hit") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Hit;
163 m_playerInput.Aim = input.IsKeyOrMouseDown("Aim") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Aim;
164 m_playerInput.Interact = input.IsKeyOrMouseDownOnce("Interact") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Interact;
165 m_playerInput.ToggleCrouch |= input.IsKeyOrMouseDownOnce("ToggleCrouch");
166 m_playerInput.ToggleMount |= input.IsKeyOrMouseDownOnce("ToggleMount");
167 m_playerInput.ToggleCreativeFly |= input.IsKeyOrMouseDownOnce("ToggleFly");
168 m_playerInput.PickBlockType = input.IsKeyOrMouseDownOnce("PickBlockType")
169 ? new Ray3(viewPosition, viewDirection)
170 : m_playerInput.PickBlockType;
171 }
173 m_playerInput.ToggleInventory |= input.IsKeyOrMouseDownOnce("ToggleInventory");
174 m_playerInput.ToggleClothing |= input.IsKeyOrMouseDownOnce("ToggleClothing");
175 m_playerInput.TakeScreenshot |= input.IsKeyOrMouseDownOnce("TakeScreenshot");
176 m_playerInput.SwitchCameraMode |= input.IsKeyOrMouseDownOnce("SwitchCameraMode");
177 m_playerInput.TimeOfDay |= input.IsKeyOrMouseDownOnce("TimeOfDay");
178 m_playerInput.Lighting |= input.IsKeyOrMouseDownOnce("Lightning");
179 m_playerInput.Precipitation |= input.IsKeyOrMouseDownOnce("Precipitation");
180 m_playerInput.Fog |= input.IsKeyOrMouseDownOnce("Fog");
181 m_playerInput.Drop |= input.IsKeyOrMouseDownOnce("Drop");
182 m_playerInput.EditItem |= input.IsKeyOrMouseDownOnce("EditItem");
183 m_playerInput.KeyboardHelp |= input.IsKeyOrMouseDownOnce("KeyboardHelp");
184 if (input.IsKeyDownOnce(Key.Number1)) {
185 m_playerInput.SelectInventorySlot = 0;
186 }
187 if (input.IsKeyDownOnce(Key.Number2)) {
188 m_playerInput.SelectInventorySlot = 1;
189 }
190 if (input.IsKeyDownOnce(Key.Number3)) {
191 m_playerInput.SelectInventorySlot = 2;
192 }
193 if (input.IsKeyDownOnce(Key.Number4)) {
194 m_playerInput.SelectInventorySlot = 3;
195 }
196 if (input.IsKeyDownOnce(Key.Number5)) {
197 m_playerInput.SelectInventorySlot = 4;
198 }
199 if (input.IsKeyDownOnce(Key.Number6)) {
200 m_playerInput.SelectInventorySlot = 5;
201 }
202 if (input.IsKeyDownOnce(Key.Number7)) {
203 m_playerInput.SelectInventorySlot = 6;
204 }
205 if (input.IsKeyDownOnce(Key.Number8)) {
206 m_playerInput.SelectInventorySlot = 7;
207 }
208 if (input.IsKeyDownOnce(Key.Number9)) {
209 m_playerInput.SelectInventorySlot = 8;
210 }
211 if (input.IsKeyDownOnce(Key.Number0)) {
212 m_playerInput.SelectInventorySlot = 9;
213 }
214 }
216 "UpdateInput",
217 loader => {
218 loader.UpdateInput(this, input);
219 return false;
220 }
221 );
222 }
223
224 public virtual void UpdateInputFromGamepad(WidgetInput input) {
225 Vector3 viewPosition = m_componentPlayer.GameWidget.ActiveCamera.ViewPosition;
226 Vector3 viewDirection = m_componentPlayer.GameWidget.ActiveCamera.ViewDirection;
227 if (m_componentGui.ModalPanelWidget != null
229 if (!input.IsPadCursorVisible) {
230 ViewWidget viewWidget = m_componentPlayer.ViewWidget;
231 Vector2 padCursorPosition = viewWidget.WidgetToScreen(viewWidget.ActualSize / 2f);
232 input.IsPadCursorVisible = true;
233 input.PadCursorPosition = padCursorPosition;
234 }
235 }
236 else {
237 input.IsPadCursorVisible = false;
238 Vector3 zero = Vector3.Zero;
241 float num = MathF.Pow(1.4f, 10f * (SettingsManager.LookSensitivity - 0.5f));
242 zero += new Vector3(2f * padStickPosition.X, 0f, 2f * padStickPosition.Y);
243 zero += Vector3.UnitY * (input.IsGamepadDown("MoveUp") ? 1 : 0);
244 zero += -Vector3.UnitY * (input.IsGamepadDown("MoveDown") ? 1 : 0);
245 m_playerInput.Move += zero;
246 m_playerInput.CrouchMove += zero;
247 m_playerInput.Look += 0.75f * num * padStickPosition2 * MathF.Pow(padStickPosition2.LengthSquared(), 0.25f);
248 m_playerInput.Jump |= input.IsGamepadDownOnce("Jump");
249 m_playerInput.Dig = input.IsGamepadDown("Dig") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Dig;
250 m_playerInput.Hit = input.IsGamepadDownOnce("Hit") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Hit;
251 m_playerInput.Aim = input.IsGamepadDown("Aim") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Aim;
252 m_playerInput.Interact = input.IsGamepadDownOnce("Interact") ? new Ray3(viewPosition, viewDirection) : m_playerInput.Interact;
253 m_playerInput.ToggleMount |= input.IsGamepadDownOnce("ToggleMount");
254 m_playerInput.ToggleCrouch |= input.IsGamepadDownOnce("ToggleCrouch");
255 if (input.IsPadButtonDownRepeat(GamePadButton.DPadLeft)) {
256 m_playerInput.ScrollInventory--;
257 }
258 if (input.IsPadButtonDownRepeat(GamePadButton.DPadRight)) {
259 m_playerInput.ScrollInventory++;
260 }
261 if (padStickPosition != Vector2.Zero
262 || padStickPosition2 != Vector2.Zero) {
263 IsControlledByTouch = false;
264 }
265 }
267 m_playerInput.ToggleInventory |= input.IsGamepadDownOnce("ToggleInventory");
268 m_playerInput.ToggleClothing |= input.IsGamepadDownOnce("ToggleClothing");
269 m_playerInput.TakeScreenshot |= input.IsGamepadDownOnce("TakeScreenshot");
270 m_playerInput.Drop |= input.IsGamepadDownOnce("Drop");
271 m_playerInput.GamepadHelp |= input.IsGamepadDownOnce("GamepadHelp");
272 if (m_componentGui.ModalPanelWidget == null) {//避免查看背包时使用十字键翻页时触发一些不该触发的功能
273 m_playerInput.SwitchCameraMode |= input.IsGamepadDownOnce("SwitchCameraMode");
274 m_playerInput.TimeOfDay |= input.IsGamepadDownOnce("TimeOfDay");
275 m_playerInput.Lighting |= input.IsGamepadDownOnce("Lightning");
276 m_playerInput.Precipitation |= input.IsGamepadDownOnce("Precipitation");
277 m_playerInput.Fog |= input.IsGamepadDownOnce("Fog");
278 m_playerInput.EditItem |= input.IsGamepadDownOnce("EditItem");
279 }
280 }
281 }
282
283 public virtual void UpdateInputFromVrControllers(WidgetInput input) {
284 if (!IsControlledByVr) {
285 return;
286 }
287 IsControlledByTouch = false;
288 if (m_componentGui.ModalPanelWidget != null
290 if (!input.IsVrCursorVisible) {
291 input.IsVrCursorVisible = true;
292 }
293 }
294 else {
295 input.IsVrCursorVisible = false;
296 float num = MathF.Pow(1.4f, 10f * (SettingsManager.MoveSensitivity - 0.5f));
297 float num2 = MathF.Pow(1.4f, 10f * (SettingsManager.LookSensitivity - 0.5f));
298 float num3 = Math.Clamp(m_subsystemTime.GameTimeDelta, 0f, 0.1f);
299 Vector2 v = Vector2.Normalize(m_componentPlayer.ComponentBody.Matrix.Right.XZ);
300 Vector2 v2 = Vector2.Normalize(m_componentPlayer.ComponentBody.Matrix.Forward.XZ);
301 Vector2 vrStickPosition = input.GetVrStickPosition(VrController.Left, 0.2f);
302 Vector2 vrStickPosition2 = input.GetVrStickPosition(VrController.Right, 0.2f);
303 Matrix m = VrManager.HmdMatrixInverted.OrientationMatrix * m_componentPlayer.ComponentCreatureModel.EyeRotation.ToMatrix();
306 Vector3 zero = Vector3.Zero;
307 zero += 0.5f * new Vector3(Vector2.Dot(xZ, v), 0f, Vector2.Dot(xZ, v2));
308 zero += new Vector3(2f * vrStickPosition.X, 2f * vrStickPosition2.Y, 2f * vrStickPosition.Y);
309 m_playerInput.Move += zero;
310 m_playerInput.CrouchMove += zero;
311 m_playerInput.VrMove = value;
313 if (touchInput.HasValue
314 && num3 > 0f) {
315 if (touchInput.Value.InputType == TouchInputType.Move) {
316 Vector2 move = touchInput.Value.Move;
317 Vector2 vector = 10f * num / num3 * new Vector2(0.5f) * move * MathF.Pow(move.LengthSquared(), 0.175f);
318 m_playerInput.CrouchMove.X += vector.X;
319 m_playerInput.CrouchMove.Z += vector.Y;
320 m_playerInput.Move.X += ProcessInputValue(touchInput.Value.TotalMoveLimited.X, 0.1f, 1f);
321 m_playerInput.Move.Z += ProcessInputValue(touchInput.Value.TotalMoveLimited.Y, 0.1f, 1f);
322 }
323 else if (touchInput.Value.InputType == TouchInputType.Tap) {
324 m_playerInput.Jump = true;
325 }
326 }
327 m_playerInput.Look += 0.5f * vrStickPosition2 * MathF.Pow(vrStickPosition2.LengthSquared(), 0.25f);
328 Vector3 hmdMatrixYpr = VrManager.HmdMatrixYpr;
329 Vector3 hmdLastMatrixYpr = VrManager.HmdLastMatrixYpr;
330 Vector3 vector2 = hmdMatrixYpr - hmdLastMatrixYpr;
331 m_playerInput.VrLook = new Vector2(vector2.X, hmdMatrixYpr.Y);
332 TouchInput? touchInput2 = VrManager.GetTouchInput(VrController.Right);
333 Vector2 zero2 = Vector2.Zero;
334 if (touchInput2.HasValue) {
335 if (touchInput2.Value.InputType == TouchInputType.Move) {
336 zero2.X = touchInput2.Value.Move.X;
337 m_playerInput.Move.Y += ProcessInputValue(touchInput2.Value.TotalMoveLimited.Y, 0.1f, 1f);
338 }
339 else if (touchInput2.Value.InputType == TouchInputType.Tap) {
340 m_playerInput.Jump = true;
341 }
342 }
343 if (num3 > 0f) {
344 m_vrSmoothLook = Vector2.Lerp(m_vrSmoothLook, zero2, 14f * num3);
345 m_playerInput.Look += num2 / num3 * new Vector2(0.25f) * m_vrSmoothLook * MathF.Pow(m_vrSmoothLook.LengthSquared(), 0.3f);
346 }
348 m_playerInput.Dig = VrManager.IsButtonDown(VrController.Right, VrControllerButton.Trigger)
350 : m_playerInput.Dig;
351 m_playerInput.Hit = VrManager.IsButtonDownOnce(VrController.Right, VrControllerButton.Trigger)
353 : m_playerInput.Hit;
354 m_playerInput.Aim = VrManager.IsButtonDown(VrController.Left, VrControllerButton.Trigger)
356 : m_playerInput.Aim;
357 m_playerInput.Interact = VrManager.IsButtonDownOnce(VrController.Left, VrControllerButton.Trigger)
359 : m_playerInput.Interact;
360 }
361 m_playerInput.ToggleMount |= input.IsVrButtonDownOnce(VrController.Left, VrControllerButton.TouchpadUp);
362 m_playerInput.ToggleCrouch |= input.IsVrButtonDownOnce(VrController.Left, VrControllerButton.TouchpadDown);
363 m_playerInput.EditItem |= input.IsVrButtonDownOnce(VrController.Left, VrControllerButton.Grip);
364 m_playerInput.ToggleCreativeFly |= input.IsVrButtonDownOnce(VrController.Right, VrControllerButton.TouchpadUp);
365 if (input.IsVrButtonDownOnce(VrController.Right, VrControllerButton.TouchpadLeft)) {
366 m_playerInput.ScrollInventory--;
367 }
368 if (input.IsVrButtonDownOnce(VrController.Right, VrControllerButton.TouchpadRight)) {
369 m_playerInput.ScrollInventory++;
370 }
371 m_playerInput.Drop |= input.IsVrButtonDownOnce(VrController.Right, VrControllerButton.Grip);
372 }
374 m_playerInput.ToggleInventory |= input.IsVrButtonDownOnce(VrController.Right, VrControllerButton.Menu);
375 }
376 }
377
378 public virtual void UpdateInputFromWidgets(WidgetInput input) {
379 float num = MathF.Pow(1.25f, 10f * (SettingsManager.MoveSensitivity - 0.5f));
380 float num2 = MathF.Pow(1.25f, 10f * (SettingsManager.LookSensitivity - 0.5f));
381 float num3 = Math.Clamp(m_subsystemTime.GameTimeDelta, 0f, 0.1f);
382 ViewWidget viewWidget = m_componentPlayer.ViewWidget;
383 m_componentGui.MoveWidget.Radius = 30f / num * m_componentGui.MoveWidget.GlobalScale;
384 if (m_componentGui.ModalPanelWidget != null
385 || !(m_subsystemTime.GameTimeFactor > 0f)
386 || !(num3 > 0f)) {
387 return;
388 }
389 Vector2 v = new(SettingsManager.LeftHandedLayout ? 96 : -96, -96f);
391 if (m_componentGui.ViewWidget != null
392 && m_componentGui.ViewWidget.TouchInput.HasValue) {
393 IsControlledByTouch = true;
394 TouchInput value = m_componentGui.ViewWidget.TouchInput.Value;
395 Camera activeCamera = m_componentPlayer.GameWidget.ActiveCamera;
396 Vector3 viewPosition = activeCamera.ViewPosition;
397 Vector3 viewDirection = activeCamera.ViewDirection;
398 Vector3 direction = Vector3.Normalize(activeCamera.ScreenToWorld(new Vector3(value.Position, 1f), Matrix.Identity) - viewPosition);
399 Vector3 direction2 = Vector3.Normalize(
400 activeCamera.ScreenToWorld(new Vector3(value.Position + v, 1f), Matrix.Identity) - viewPosition
401 );
402 if (value.InputType == TouchInputType.Tap) {
404 m_playerInput.Interact = new Ray3(viewPosition, viewDirection);
405 m_playerInput.Hit = new Ray3(viewPosition, viewDirection);
406 }
407 else {
408 m_playerInput.Interact = new Ray3(viewPosition, direction);
409 m_playerInput.Hit = new Ray3(viewPosition, direction);
410 }
411 }
412 else if (value.InputType == TouchInputType.Hold
413 && value.DurationFrames > 1
414 && value.Duration > 0.2f) {
416 m_playerInput.Dig = new Ray3(viewPosition, viewDirection);
417 m_playerInput.Aim = new Ray3(viewPosition, direction2);
418 }
419 else {
420 m_playerInput.Dig = new Ray3(viewPosition, direction);
421 m_playerInput.Aim = new Ray3(viewPosition, direction2);
422 }
423 m_isViewHoldStarted = true;
424 }
425 else if (value.InputType == TouchInputType.Move) {
428 Vector2 v2 = Vector2.TransformNormal(value.Move, m_componentGui.ViewWidget.InvertedGlobalTransform);
429 Vector2 vector = num2 / num3 * new Vector2(0.0006f, -0.0006f) * v2 * MathF.Pow(v2.LengthSquared(), 0.125f);
430 m_playerInput.Look += vector;
431 }
434 m_playerInput.Dig = new Ray3(viewPosition, viewDirection);
435 m_playerInput.Aim = new Ray3(viewPosition, direction2);
436 }
437 else {
438 m_playerInput.Dig = new Ray3(viewPosition, direction);
439 m_playerInput.Aim = new Ray3(viewPosition, direction2);
440 }
441 }
442 }
443 }
444 else {
445 m_isViewHoldStarted = false;
446 }
447 if (m_componentGui.MoveWidget != null
448 && m_componentGui.MoveWidget.TouchInput.HasValue) {
449 IsControlledByTouch = true;
450 float radius = m_componentGui.MoveWidget.Radius;
451 TouchInput value2 = m_componentGui.MoveWidget.TouchInput.Value;
452 if (value2.InputType == TouchInputType.Tap) {
453 m_playerInput.Jump = true;
454 }
455 else if (value2.InputType == TouchInputType.Move
456 || value2.InputType == TouchInputType.Hold) {
457 Vector2 v3 = Vector2.TransformNormal(value2.Move, m_componentGui.ViewWidget.InvertedGlobalTransform);
458 Vector2 vector2 = num / num3 * new Vector2(0.003f, -0.003f) * v3 * MathF.Pow(v3.LengthSquared(), 0.175f);
459 m_playerInput.CrouchMove.X += vector2.X;
460 m_playerInput.CrouchMove.Z += vector2.Y;
461 Vector2 vector3 = Vector2.TransformNormal(value2.TotalMoveLimited, m_componentGui.ViewWidget.InvertedGlobalTransform);
462 m_playerInput.Move.X += ProcessInputValue(vector3.X * viewWidget.GlobalScale, 0.2f * radius, radius);
463 m_playerInput.Move.Z += ProcessInputValue((0f - vector3.Y) * viewWidget.GlobalScale, 0.2f * radius, radius);
464 }
465 }
466 if (m_componentGui.MoveRoseWidget != null) {
467 if (m_componentGui.MoveRoseWidget.Direction != Vector3.Zero
468 || m_componentGui.MoveRoseWidget.Jump) {
469 IsControlledByTouch = true;
470 }
471 m_playerInput.Move += m_componentGui.MoveRoseWidget.Direction;
472 m_playerInput.CrouchMove += m_componentGui.MoveRoseWidget.Direction;
473 m_playerInput.Jump |= m_componentGui.MoveRoseWidget.Jump;
474 }
475 if (m_componentGui.LookWidget != null
476 && m_componentGui.LookWidget.TouchInput.HasValue) {
477 IsControlledByTouch = true;
478 TouchInput value3 = m_componentGui.LookWidget.TouchInput.Value;
479 if (value3.InputType == TouchInputType.Tap) {
480 m_playerInput.Jump = true;
481 }
482 else if (value3.InputType == TouchInputType.Move) {
483 Vector2 v4 = Vector2.TransformNormal(value3.Move, m_componentGui.ViewWidget.InvertedGlobalTransform);
484 Vector2 vector4 = num2 / num3 * new Vector2(0.0006f, -0.0006f) * v4 * MathF.Pow(v4.LengthSquared(), 0.125f);
485 m_playerInput.Look += vector4;
486 }
487 }
488 }
489
490 public static float ProcessInputValue(float value, float deadZone, float saturationZone) =>
491 MathF.Sign(value) * Math.Clamp((MathF.Abs(value) - deadZone) / (saturationZone - deadZone), 0f, 1f);
492 }
493}
Engine.Vector3 Vector3
static bool IsTouched
static double RealTime
定义 Time.cs:38
static float FrameDuration
定义 Time.cs:46
static bool IsActive
Vector3 ScreenToWorld(Vector3 screenPoint, Matrix worldMatrix)
Vector3 ViewPosition
Vector3 ViewDirection
virtual ? Ray3 CalculateVrHandRay()
static float ProcessInputValue(float value, float deadZone, float saturationZone)
virtual void UpdateInputFromMouseAndKeyboard(WidgetInput input)
ComponentPlayer m_componentPlayer
virtual void Update(float dt)
SubsystemTime m_subsystemTime
virtual void UpdateInputFromVrControllers(WidgetInput input)
virtual void SetSplitSourceInventoryAndSlot(IInventory inventory, int slotIndex)
virtual void UpdateInputFromWidgets(WidgetInput input)
override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap)
virtual void UpdateInputFromGamepad(WidgetInput input)
static bool HasDialogs(Widget parentWidget)
static LookControlMode LookControlMode
static Vector2 WalkingVelocity
static Vector3 HmdMatrixYpr
static bool IsButtonDown(VrController controller, VrControllerButton button)
static ? TouchInput GetTouchInput(VrController controller)
static bool IsVrStarted
static bool IsButtonDownOnce(VrController controller, VrControllerButton button)
static Vector2 HeadMove
static Vector3 HmdLastMatrixYpr
static bool IsControllerPresent(VrController controller)
float GlobalScale
virtual Vector2 WidgetToScreen(Vector2 p)
Vector2 ActualSize
Matrix GlobalTransform
Vector2 GetPadStickPosition(GamePadStick stick, float deadZone=0f)
bool IsKeyOrMouseDownOnce(string mappingName)
根据按键映射名称判断键盘鼠标按键是否按下
bool IsPadButtonDownRepeat(GamePadButton button)
bool IsVrButtonDownOnce(VrController controller, VrControllerButton button)
Vector2 GetVrStickPosition(VrController controller, float deadZone=0f)
bool IsKeyDownOnce(Key key)
bool IsGamepadDown(string mappingName)
根据按键映射名称判断手柄按键是否按住
bool IsKeyOrMouseDown(string mappingName)
根据按键映射名称判断键盘鼠标按键是否按住
bool IsGamepadDownOnce(string mappingName)
根据按键映射名称判断手柄按键是否按下
ValuesDictionary ValuesDictionary
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
static readonly Matrix Identity
static readonly Point2 Zero
static float Dot(Vector2 v1, Vector2 v2)
static readonly Vector2 Zero
static Vector2 TransformNormal(Vector2 v, Matrix m)
static Vector2 Lerp(Vector2 v1, Vector2 v2, float f)
static Vector2 Normalize(Vector2 v)
float LengthSquared()
static Vector3 TransformNormal(Vector3 v, Matrix m)
static Vector3 Normalize(Vector3 v)
static readonly Vector3 Zero
TouchInputType InputType