Newer
Older
DungeonShooting / DungeonShooting_Godot / src / test / TestPerfectPixelScene.cs
using Godot;
using System;

public partial class TestPerfectPixelScene : Node2D
{
    public enum HandlerType
    {
        Normal,
        UseHandler
    }

    [Export]
    public Label FpsLabel;
    
    [Export]
    public Camera2D Camera2D;

    [Export]
    public float Speed = 50;

    [Export]
    public SubViewportContainer SubViewportContainer;

    [Export]
    public HandlerType Type;
    
    private ShaderMaterial _shaderMaterial;
    private Vector2 _cameraPos;

    public override void _Ready()
    {
        if (SubViewportContainer != null)
        {
            _shaderMaterial = (ShaderMaterial)SubViewportContainer.Material;
        }
    }

    public override void _Process(double delta)
    {
        FpsLabel.Text = "FPS: " + Engine.GetFramesPerSecond();
        InputManager.Update((float)delta);
        var dir = InputManager.MoveAxis;
        if (dir != Vector2.Zero)
        {
            _cameraPos += dir * Speed * (float)delta;
        }

        if (Type == HandlerType.Normal)
        {
            Camera2D.GlobalPosition = _cameraPos.Round();
        }
        else if (Type == HandlerType.UseHandler)
        {
            if (_shaderMaterial != null)
            {
                var cameraPosition = _cameraPos;
                var offset = cameraPosition.Round() - cameraPosition;
                _shaderMaterial.SetShaderParameter("offset", offset);
                Camera2D.GlobalPosition = cameraPosition.Round();
            }
        }
        //Debug.Log("CameraPos: " + cameraPosition);
    }
}