Newer
Older
DungeonShooting / DungeonShooting_Godot / src / test / TestPerfectPixelScene.cs
  1. using Godot;
  2. using System;
  3.  
  4. public partial class TestPerfectPixelScene : Node2D
  5. {
  6. public enum HandlerType
  7. {
  8. UnHandler,
  9. NormalHandler,
  10. OffsetHandler
  11. }
  12.  
  13. [Export]
  14. public CharacterBody2D Player;
  15.  
  16. [Export]
  17. public Label FpsLabel;
  18. [Export]
  19. public Camera2D Camera2D;
  20.  
  21. [Export]
  22. public float Speed = 50;
  23.  
  24. [Export]
  25. public float CameraRecoveryScale = 5;
  26.  
  27. [Export]
  28. public SubViewportContainer SubViewportContainer;
  29.  
  30. [Export]
  31. public HandlerType Type;
  32. private ShaderMaterial _shaderMaterial;
  33. private Vector2 _cameraPos;
  34.  
  35. public override void _Ready()
  36. {
  37. if (SubViewportContainer != null)
  38. {
  39. _shaderMaterial = (ShaderMaterial)SubViewportContainer.Material;
  40. }
  41. }
  42.  
  43. public override void _Process(double delta)
  44. {
  45. InputManager.Update((float)delta);
  46.  
  47. }
  48.  
  49. public override void _PhysicsProcess(double delta)
  50. {
  51. FpsLabel.Text = "FPS: " + Engine.GetFramesPerSecond();
  52. Player.Velocity = InputManager.MoveAxis * Speed;
  53. Player.MoveAndSlide();
  54.  
  55. var playerPos = Player.GlobalPosition;
  56. //_cameraPos = playerPos;
  57. _cameraPos = _cameraPos.MoveToward(playerPos, playerPos.DistanceTo(_cameraPos) * (float)delta * CameraRecoveryScale);
  58.  
  59. if (Type == HandlerType.UnHandler)
  60. {
  61. Camera2D.GlobalPosition = _cameraPos;
  62. }
  63. else if (Type == HandlerType.NormalHandler)
  64. {
  65. Camera2D.GlobalPosition = _cameraPos.Round();
  66. }
  67. else if (Type == HandlerType.OffsetHandler)
  68. {
  69. if (_shaderMaterial != null)
  70. {
  71. var cameraPosition = _cameraPos;
  72. var offset = cameraPosition.Round() - cameraPosition;
  73. _shaderMaterial.SetShaderParameter("offset", offset);
  74. Camera2D.GlobalPosition = cameraPosition.Round();
  75. }
  76. }
  77. }
  78. }