From f900c96ce44f83ed1d26de90761daef5751e642c Mon Sep 17 00:00:00 2001
From: shangfengh <3495281661@qq.com>
Date: Sat, 22 Apr 2023 18:15:34 +0800
Subject: [PATCH 1/2] refactor: :zap: Try to fix the problem about Moving
---
logic/GameEngine/CollisionChecker.cs | 15 +++++----------
logic/Preparation/Utility/XY.cs | 6 +++++-
2 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/logic/GameEngine/CollisionChecker.cs b/logic/GameEngine/CollisionChecker.cs
index c147c20..179ce30 100644
--- a/logic/GameEngine/CollisionChecker.cs
+++ b/logic/GameEngine/CollisionChecker.cs
@@ -123,12 +123,9 @@ namespace GameEngine
/// 最大可能的移动距离
public double FindMax(IMoveable obj, XY nextPos, XY moveVec)
{
- double maxLen = (double)uint.MaxValue;
- double tmpMax = maxLen; // 暂存最大值
+ double tmpMax = uint.MaxValue; // 暂存最大值
- // 先找只考虑墙的最大距离
- // double maxOnlyConsiderWall = FindMaxOnlyConsiderWall(obj, moveVec);
- double maxDistance = maxLen;
+ double maxDistance = uint.MaxValue;
foreach (var listWithLock in lists)
{
var lst = listWithLock.Item1;
@@ -159,13 +156,13 @@ namespace GameEngine
{
double tmp = mod - obj.Radius - listObj.Radius;
// 计算能走的最长距离,好像这么算有一点误差?
- tmp = tmp / Math.Cos(Math.Atan2(orgDeltaY, orgDeltaX) - moveVec.Angle());
- if (tmp < 0 || tmp > uint.MaxValue || tmp == double.NaN)
+ tmp = ((int)(tmp*1000 / Math.Cos(Math.Atan2(orgDeltaY, orgDeltaX) - moveVec.Angle())));
+ if (tmp < 0 || tmp > uint.MaxValue || double.IsNaN(tmp))
{
tmpMax = uint.MaxValue;
}
else
- tmpMax = tmp;
+ tmpMax = tmp/1000.0;
}
break;
}
@@ -207,11 +204,9 @@ namespace GameEngine
}
finally
{
- // maxLen = Math.Min(maxOnlyConsiderWall, maxDistance); //最大可能距离的最小值
listLock.ExitReadLock();
}
}
- // return maxLen;
return maxDistance;
}
diff --git a/logic/Preparation/Utility/XY.cs b/logic/Preparation/Utility/XY.cs
index 6749526..9b70661 100644
--- a/logic/Preparation/Utility/XY.cs
+++ b/logic/Preparation/Utility/XY.cs
@@ -64,7 +64,11 @@ namespace Preparation.Utility
}
public static double Distance(XY p1, XY p2)
{
- return Math.Sqrt(((long)(p1.x - p2.x) * (p1.x - p2.x)) + ((long)(p1.y - p2.y) * (p1.y - p2.y)));
+ long c = (((long)(p1.x - p2.x) * (p1.x - p2.x)) + ((long)(p1.y - p2.y) * (p1.y - p2.y)))*1000000;
+ long t = c/2+1;
+ while (t*t>c||(t+1)*(t+1)
Date: Sat, 22 Apr 2023 18:20:59 +0800
Subject: [PATCH 2/2] style: :art: Format
---
logic/GameEngine/CollisionChecker.cs | 4 ++--
logic/Preparation/Utility/XY.cs | 10 +++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/logic/GameEngine/CollisionChecker.cs b/logic/GameEngine/CollisionChecker.cs
index 179ce30..0d1d3ea 100644
--- a/logic/GameEngine/CollisionChecker.cs
+++ b/logic/GameEngine/CollisionChecker.cs
@@ -156,13 +156,13 @@ namespace GameEngine
{
double tmp = mod - obj.Radius - listObj.Radius;
// 计算能走的最长距离,好像这么算有一点误差?
- tmp = ((int)(tmp*1000 / Math.Cos(Math.Atan2(orgDeltaY, orgDeltaX) - moveVec.Angle())));
+ tmp = ((int)(tmp * 1000 / Math.Cos(Math.Atan2(orgDeltaY, orgDeltaX) - moveVec.Angle())));
if (tmp < 0 || tmp > uint.MaxValue || double.IsNaN(tmp))
{
tmpMax = uint.MaxValue;
}
else
- tmpMax = tmp/1000.0;
+ tmpMax = tmp / 1000.0;
}
break;
}
diff --git a/logic/Preparation/Utility/XY.cs b/logic/Preparation/Utility/XY.cs
index 9b70661..3798bb5 100644
--- a/logic/Preparation/Utility/XY.cs
+++ b/logic/Preparation/Utility/XY.cs
@@ -64,11 +64,11 @@ namespace Preparation.Utility
}
public static double Distance(XY p1, XY p2)
{
- long c = (((long)(p1.x - p2.x) * (p1.x - p2.x)) + ((long)(p1.y - p2.y) * (p1.y - p2.y)))*1000000;
- long t = c/2+1;
- while (t*t>c||(t+1)*(t+1) c || (t + 1) * (t + 1) < c)
+ t = (c / t + t) / 2;
+ return (double)t / 1000.0;
}
public double Length()
{