将Camera和Cursor初始化移到RoomManager下
1 parent 93fbc12 commit 07b1fbb143345b2bcb49f30a5622ae18ed18eb0d
@lijincheng lijincheng authored on 6 Mar 2023
Showing 7 changed files
View
2
■■■
DungeonShooting_Godot/src/framework/activity/ActivityObject_Register.cs
/// <summary>
/// 扫描指定程序集, 自动注册带有 RegisterActivity 特性的类
/// </summary>
/// <param name="assembly"></param>
/// <exception cref="Exception"></exception>
public static void ScannerFromAssembly(Assembly assembly)
{
var types = assembly.GetTypes();
foreach (var type in types)
View
2
■■■
DungeonShooting_Godot/src/framework/activity/RegisterActivity.cs
{
/// <summary>
/// 注册物体唯一ID, 该ID不能有重复
/// </summary>
public string Id { get; }
public string Id { get; protected set; }
 
/// <summary>
/// 模板 Prefab 的路径
/// </summary>
View
6
DungeonShooting_Godot/src/game/GameApplication.cs
/// 将 viewport 以内的全局坐标 转换成 viewport 外的全局坐标
/// </summary>
public Vector2 ViewToGlobalPosition(Vector2 viewPos)
{
//return viewPos;
return (viewPos - GameCamera.Main.GlobalPosition + (GameConfig.ViewportSize / 2)) * GameConfig.WindowScale - GameCamera.Main.SubPixelPosition;
// 3.5写法
//return (viewPos - GameCamera.Main.GlobalPosition + (GameConfig.ViewportSize / 2)) * GameConfig.WindowScale - GameCamera.Main.SubPixelPosition;
return (viewPos - GameCamera.Main.GlobalPosition + (GameConfig.ViewportSize / 2)) * GameConfig.WindowScale;
}
 
//初始化房间配置
private void InitRoomConfig()
View
92
DungeonShooting_Godot/src/game/camera/GameCamera.cs
/// 恢复系数
/// </summary>
[Export]
public float RecoveryCoefficient = 100f;
/// <summary>
/// 抖动开关
/// </summary>
public bool Enable { get; set; } = true;
public bool EnableShake { get; set; } = true;
 
/// <summary>
/// 相机跟随目标
/// </summary>
private Role _followTarget;
public Vector2 SubPixelPosition { get; private set; }
// 3.5
//public Vector2 SubPixelPosition { get; private set; }
 
private long _index = 0;
private Vector2 _processDistance = Vector2.Zero;
private Vector2 _processDirection = Vector2.Zero;
//抖动数据
private readonly Dictionary<long, Vector2> _shakeMap = new Dictionary<long, Vector2>();
private Vector2 _camPos;
private Vector2 _shakeOffset = Vector2.Zero;
// _camPos = _camPos.Lerp(camPos, Mathf.Min(6 * newDelta, 1)) + _shakeOffset;
// SubPixelPosition = _camPos.Round() - _camPos;
// (viewportContainer.Material as ShaderMaterial)?.SetShaderParameter("offset", SubPixelPosition);
// GlobalPosition = _camPos.Round();
var player = GameApplication.Instance.RoomManager.Player;
var mousePosition = InputManager.GetViewportMousePosition();
var playerPosition = player.GlobalPosition;
Vector2 targetPos;
if (playerPosition.DistanceSquaredTo(mousePosition) >= (60 / 0.3f) * (60 / 0.3f))
 
if (_followTarget != null)
{
targetPos = playerPosition.MoveToward(mousePosition, 60);
var mousePosition = InputManager.GetViewportMousePosition();
var targetPosition = _followTarget.GlobalPosition;
Vector2 targetPos;
if (targetPosition.DistanceSquaredTo(mousePosition) >= (60 / 0.3f) * (60 / 0.3f))
{
targetPos = targetPosition.MoveToward(mousePosition, 60);
}
else
{
targetPos = targetPosition.Lerp(mousePosition, 0.3f);
}
_camPos = _camPos.Lerp(targetPos, Mathf.Min(6 * newDelta, 1)) + _shakeOffset;
GlobalPosition = _camPos.Round();
}
else
{
targetPos = playerPosition.Lerp(mousePosition, 0.3f);
}
_camPos = _camPos.Lerp(targetPos, Mathf.Min(6 * newDelta, 1)) + _shakeOffset;
SubPixelPosition = _camPos.Round() - _camPos;
GlobalPosition = _camPos.Round();
}
 
/// <summary>
/// 设置相机跟随目标
/// </summary>
public void SetFollowTarget(Role target)
{
_followTarget = target;
GlobalPosition = target.GlobalPosition;
}
 
/// <summary>
/// 获取相机跟随目标
/// </summary>
public Role GetFollowTarget()
{
return _followTarget;
}
/// <summary>
/// 设置帧抖动, 结束后自动清零, 需要每一帧调用
 
//抖动调用
private void _Shake(float delta)
{
if (Enable)
if (EnableShake)
{
var distance = _CalculateDistance();
_shakeOffset += _processDirection + new Vector2(
Utils.RandomRangeFloat(-distance.X, distance.X) - _shakeOffset.X,
View
DungeonShooting_Godot/src/game/item/weapon/RegisterWeapon.cs
View
DungeonShooting_Godot/src/game/room/RoomManager.cs
View
DungeonShooting_Godot/src/game/ui/Cursor.cs