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

public partial class TestPerfectPixelScene : Node2D
{
    public enum HandlerType
    {
        UnHandler,
        NormalHandler,
        OffsetHandler
    }

    [Export]
    public CharacterBody2D Player;

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

    [Export]
    public float Speed = 50;

    [Export]
    public float CameraRecoveryScale = 5;

    [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)
    {
        InputManager.Update((float)delta);

        
    }

    public override void _PhysicsProcess(double delta)
    {
        FpsLabel.Text = "FPS: " + Engine.GetFramesPerSecond();
        Player.Velocity = InputManager.MoveAxis * Speed;
        Player.MoveAndSlide();

        var playerPos = Player.GlobalPosition;
        //_cameraPos = playerPos;
        _cameraPos = _cameraPos.MoveToward(playerPos, playerPos.DistanceTo(_cameraPos) * (float)delta * CameraRecoveryScale);

        if (Type == HandlerType.UnHandler)
        {
            Camera2D.GlobalPosition = _cameraPos;
        }
        else if (Type == HandlerType.NormalHandler)
        {
            Camera2D.GlobalPosition = _cameraPos.Round();
        }
        else if (Type == HandlerType.OffsetHandler)
        {
            if (_shaderMaterial != null)
            {
                var cameraPosition = _cameraPos;
                var offset = cameraPosition.Round() - cameraPosition;
                _shaderMaterial.SetShaderParameter("offset", offset);
                Camera2D.GlobalPosition = cameraPosition.Round();
            }
        }
    }
}