Newer
Older
DungeonShooting / DungeonShooting_Godot / src / test / TestMask2.cs
@小李xl 小李xl on 28 Nov 2023 1 KB 将将液体材质抽成配置表
  1. using Godot;
  2. using System;
  3. using System.Collections.Generic;
  4. using Config;
  5.  
  6. public partial class TestMask2 : SubViewportContainer
  7. {
  8.  
  9. [Export]
  10. public Label Message;
  11. [Export]
  12. public Node2D Player;
  13.  
  14. [Export]
  15. public Texture2D Brush1;
  16. [Export]
  17. public Texture2D Brush2;
  18.  
  19. private BrushImageData _brushData1;
  20. private BrushImageData _brushData2;
  21.  
  22. private Vector2I? _prevPosition = null;
  23.  
  24. private LiquidCanvas _liquidCanvas;
  25. public override void _Ready()
  26. {
  27. Engine.MaxFps = (int)DisplayServer.ScreenGetRefreshRate();
  28. //Engine.MaxFps = 5;
  29. _brushData1 = new BrushImageData(ExcelConfig.LiquidMaterial_Map["0001"]);
  30. _brushData2 = new BrushImageData(ExcelConfig.LiquidMaterial_Map["0002"]);
  31. _liquidCanvas = new LiquidCanvas(null, (int)(Size.X / LiquidCanvas.CanvasScale), (int)(Size.X / LiquidCanvas.CanvasScale));
  32. GetNode("SubViewport").AddChild(_liquidCanvas);
  33. }
  34.  
  35. public override void _Process(double delta)
  36. {
  37. InputManager.Update((float)delta);
  38. //玩家移动
  39. Player.Position += InputManager.MoveAxis * 120 * (float)delta;
  40. var pos = (Player.Position / LiquidCanvas.CanvasScale).AsVector2I();
  41. if (_prevPosition != null)
  42. {
  43. _liquidCanvas.DrawBrush(_brushData2, _prevPosition, pos, new Vector2(pos.X - _prevPosition.Value.X, pos.Y - _prevPosition.Value.Y).Angle());
  44. }
  45. else
  46. {
  47. _liquidCanvas.DrawBrush(_brushData2, _prevPosition, pos, 0);
  48. }
  49. //碰撞检测
  50. var mousePosition = (GetGlobalMousePosition() / (4 * LiquidCanvas.CanvasScale)).AsVector2I();
  51. Message.Text = "鼠标是否碰到毒液: " + _liquidCanvas.Collision(mousePosition.X, mousePosition.Y);
  52. }
  53. }