Browse Source

Merge remote-tracking branch 'upstream/dev' into dev

tags/0.1.0
mx05 2 years ago
parent
commit
d828e76d16
8 changed files with 52 additions and 53 deletions
  1. +8
    -8
      CAPI/cpp/API/src/DebugAPI.cpp
  2. +23
    -24
      CAPI/cpp/API/src/logic.cpp
  3. +6
    -6
      CAPI/python/PyAPI/DebugAPI.py
  4. +3
    -2
      CAPI/python/PyAPI/logic.py
  5. +1
    -1
      docs/CAPI接口(cpp).md
  6. +1
    -1
      docs/CAPI接口(python).md
  7. +5
    -10
      logic/GameEngine/CollisionChecker.cs
  8. +5
    -1
      logic/Preparation/Utility/XY.cs

+ 8
- 8
CAPI/cpp/API/src/DebugAPI.cpp View File

@@ -645,7 +645,7 @@ void StudentDebugAPI::PrintStudent() const
{
for (const auto& student : logic.GetStudents())
{
logger->info("\n******Student Info******");
logger->info("******Student Info******");
logger->info("playerID={}, GUID={}, x={}, y={}", student->playerID, student->guid, student->x, student->y);
logger->info("speed={}, view range={}, place={}, radius={}", student->speed, student->viewRange, THUAI6::placeTypeDict[student->place], student->radius);
std::string skillTime = "";
@@ -670,7 +670,7 @@ void TrickerDebugAPI::PrintStudent() const
{
for (const auto& student : logic.GetStudents())
{
logger->info("\n******Student Info******");
logger->info("******Student Info******");
logger->info("playerID={}, GUID={}, x={}, y={}", student->playerID, student->guid, student->x, student->y);
logger->info("speed={}, view range={}, place={}, radius={}", student->speed, student->viewRange, THUAI6::placeTypeDict[student->place], student->radius);
std::string skillTime = "";
@@ -695,7 +695,7 @@ void StudentDebugAPI::PrintTricker() const
{
for (const auto& tricker : logic.GetTrickers())
{
logger->info("\n******Tricker Info******");
logger->info("******Tricker Info******");
logger->info("playerID={}, GUID={}, x={}, y={}", tricker->playerID, tricker->guid, tricker->x, tricker->y);
logger->info("speed={}, view range={}, place={}, radius={}", tricker->speed, tricker->viewRange, THUAI6::placeTypeDict[tricker->place], tricker->radius);
std::string skillTime = "";
@@ -719,7 +719,7 @@ void TrickerDebugAPI::PrintTricker() const
{
for (auto tricker : logic.GetTrickers())
{
logger->info("\n******Tricker Info******");
logger->info("******Tricker Info******");
logger->info("playerID={}, GUID={}, x={}, y={}", tricker->playerID, tricker->guid, tricker->x, tricker->y);
logger->info("speed={}, view range={}, place={}, radius={}", tricker->speed, tricker->viewRange, THUAI6::placeTypeDict[tricker->place], tricker->radius);
std::string skillTime = "";
@@ -743,7 +743,7 @@ void StudentDebugAPI::PrintProp() const
{
for (auto prop : logic.GetProps())
{
logger->info("\n******Prop Info******");
logger->info("******Prop Info******");
logger->info("GUID={}, x={}, y={}, place={}, facing direction={}", prop->guid, prop->x, prop->y, THUAI6::placeTypeDict[prop->place], prop->facingDirection);
logger->info("*********************\n");
}
@@ -753,7 +753,7 @@ void TrickerDebugAPI::PrintProp() const
{
for (auto prop : logic.GetProps())
{
logger->info("\n******Prop Info******");
logger->info("******Prop Info******");
logger->info("GUID={}, x={}, y={}, place={}, facing direction={}", prop->guid, prop->x, prop->y, THUAI6::placeTypeDict[prop->place], prop->facingDirection);
logger->info("*********************\n");
}
@@ -762,7 +762,7 @@ void TrickerDebugAPI::PrintProp() const
void StudentDebugAPI::PrintSelfInfo() const
{
auto student = logic.StudentGetSelfInfo();
logger->info("\n******Self Info******");
logger->info("******Self Info******");
logger->info("playerID={}, GUID={}, x={}, y={}", student->playerID, student->guid, student->x, student->y);
logger->info("speed={}, view range={}, place={}, radius={}", student->speed, student->viewRange, THUAI6::placeTypeDict[student->place], student->radius);
std::string skillTime = "";
@@ -785,7 +785,7 @@ void StudentDebugAPI::PrintSelfInfo() const
void TrickerDebugAPI::PrintSelfInfo() const
{
auto tricker = logic.TrickerGetSelfInfo();
logger->info("\n******Self Info******");
logger->info("******Self Info******");
logger->info("playerID={}, GUID={}, x={}, y={}", tricker->playerID, tricker->guid, tricker->x, tricker->y);
logger->info("speed={}, view range={}, place={}, radius={}", tricker->speed, tricker->viewRange, THUAI6::placeTypeDict[tricker->place], tricker->radius);
std::string skillTime = "";


+ 23
- 24
CAPI/cpp/API/src/logic.cpp View File

@@ -27,8 +27,7 @@ Logic::Logic(THUAI6::PlayerType type, int64_t ID, THUAI6::TrickerType tricker, T
std::vector<std::shared_ptr<const THUAI6::Tricker>> Logic::GetTrickers() const
{
std::lock_guard<std::mutex> lock(mtxState);
std::vector<std::shared_ptr<const THUAI6::Tricker>> temp;
temp.assign(currentState->trickers.begin(), currentState->trickers.end());
std::vector<std::shared_ptr<const THUAI6::Tricker>> temp(currentState->trickers.begin(), currentState->trickers.end());
logger->debug("Called GetTrickers");
return temp;
}
@@ -36,8 +35,7 @@ std::vector<std::shared_ptr<const THUAI6::Tricker>> Logic::GetTrickers() const
std::vector<std::shared_ptr<const THUAI6::Student>> Logic::GetStudents() const
{
std::unique_lock<std::mutex> lock(mtxState);
std::vector<std::shared_ptr<const THUAI6::Student>> temp;
temp.assign(currentState->students.begin(), currentState->students.end());
std::vector<std::shared_ptr<const THUAI6::Student>> temp(currentState->students.begin(), currentState->students.end());
logger->debug("Called GetStudents");
return temp;
}
@@ -45,8 +43,7 @@ std::vector<std::shared_ptr<const THUAI6::Student>> Logic::GetStudents() const
std::vector<std::shared_ptr<const THUAI6::Prop>> Logic::GetProps() const
{
std::unique_lock<std::mutex> lock(mtxState);
std::vector<std::shared_ptr<const THUAI6::Prop>> temp;
temp.assign(currentState->props.begin(), currentState->props.end());
std::vector<std::shared_ptr<const THUAI6::Prop>> temp(currentState->props.begin(), currentState->props.end());
logger->debug("Called GetProps");
return temp;
}
@@ -54,8 +51,7 @@ std::vector<std::shared_ptr<const THUAI6::Prop>> Logic::GetProps() const
std::vector<std::shared_ptr<const THUAI6::Bullet>> Logic::GetBullets() const
{
std::unique_lock<std::mutex> lock(mtxState);
std::vector<std::shared_ptr<const THUAI6::Bullet>> temp;
temp.assign(currentState->bullets.begin(), currentState->bullets.end());
std::vector<std::shared_ptr<const THUAI6::Bullet>> temp(currentState->bullets.begin(), currentState->bullets.end());
logger->debug("Called GetBullets");
return temp;
}
@@ -436,14 +432,14 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
switch (Proto2THUAI6::messageOfObjDict[item.message_of_obj_case()])
{
case THUAI6::MessageOfObj::PropMessage:
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), bufferState->gameMap))
{
bufferState->props.push_back(Proto2THUAI6::Protobuf2THUAI6Prop(item.prop_message()));
logger->debug("Add Prop!");
}
break;
case THUAI6::MessageOfObj::BulletMessage:
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), bufferState->gameMap))
{
bufferState->bullets.push_back(Proto2THUAI6::Protobuf2THUAI6Bullet(item.bullet_message()));
logger->debug("Add Bullet!");
@@ -451,7 +447,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
break;
case THUAI6::MessageOfObj::ClassroomMessage:
{
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.classroom_message().x(), item.classroom_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.classroom_message().x(), item.classroom_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.classroom_message().x()), AssistFunction::GridToCell(item.classroom_message().y()));
if (bufferState->mapInfo->classRoomState.count(pos) == 0)
@@ -469,7 +465,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::ChestMessage:
{
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.chest_message().x(), item.chest_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.chest_message().x(), item.chest_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.chest_message().x()), AssistFunction::GridToCell(item.chest_message().y()));
if (bufferState->mapInfo->chestState.count(pos) == 0)
@@ -487,7 +483,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::DoorMessage:
{
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.door_message().x(), item.door_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.door_message().x(), item.door_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.door_message().x()), AssistFunction::GridToCell(item.door_message().y()));
if (bufferState->mapInfo->doorState.count(pos) == 0)
@@ -507,7 +503,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::HiddenGateMessage:
{
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.hidden_gate_message().x()), AssistFunction::GridToCell(item.hidden_gate_message().y()));
if (bufferState->mapInfo->hiddenGateState.count(pos) == 0)
@@ -525,7 +521,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::GateMessage:
{
if (!AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.gate_message().x(), item.gate_message().y(), currentState->gameMap))
if (!AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.gate_message().x(), item.gate_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.gate_message().x()), AssistFunction::GridToCell(item.gate_message().y()));
if (bufferState->mapInfo->gateState.count(pos) == 0)
@@ -591,7 +587,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
switch (Proto2THUAI6::messageOfObjDict[item.message_of_obj_case()])
{
case THUAI6::MessageOfObj::PropMessage:
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.prop_message().x(), item.prop_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.prop_message().x(), item.prop_message().y(), bufferState->gameMap))
{
bufferState->props.push_back(Proto2THUAI6::Protobuf2THUAI6Prop(item.prop_message()));
logger->debug("Add Prop!");
@@ -606,7 +602,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
break;
case THUAI6::MessageOfObj::ClassroomMessage:
{
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.classroom_message().x(), item.classroom_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.classroom_message().x(), item.classroom_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.classroom_message().x()), AssistFunction::GridToCell(item.classroom_message().y()));
if (bufferState->mapInfo->classRoomState.count(pos) == 0)
@@ -624,7 +620,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::ChestMessage:
{
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.chest_message().x(), item.chest_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.chest_message().x(), item.chest_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.chest_message().x()), AssistFunction::GridToCell(item.chest_message().y()));
if (bufferState->mapInfo->chestState.count(pos) == 0)
@@ -642,7 +638,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::DoorMessage:
{
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.door_message().x(), item.door_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.door_message().x(), item.door_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.door_message().x()), AssistFunction::GridToCell(item.door_message().y()));
if (bufferState->mapInfo->doorState.count(pos) == 0)
@@ -662,7 +658,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::HiddenGateMessage:
{
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), currentState->gameMap))
if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.hidden_gate_message().x()), AssistFunction::GridToCell(item.hidden_gate_message().y()));
if (bufferState->mapInfo->hiddenGateState.count(pos) == 0)
@@ -680,7 +676,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message)
}
case THUAI6::MessageOfObj::GateMessage:
{
if (!AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.gate_message().x(), item.gate_message().y(), currentState->gameMap))
if (!AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.gate_message().x(), item.gate_message().y(), bufferState->gameMap))
{
auto pos = std::make_pair(AssistFunction::GridToCell(item.gate_message().x()), AssistFunction::GridToCell(item.gate_message().y()));
if (bufferState->mapInfo->gateState.count(pos) == 0)
@@ -760,10 +756,13 @@ void Logic::Update() noexcept
// 缓冲区被更新之后才可以使用
cvBuffer.wait(lock, [this]()
{ return bufferUpdated; });

std::swap(currentState, bufferState);
{
std::lock_guard<std::mutex> stateLock(mtxState);
std::swap(currentState, bufferState);
counterState = counterBuffer;
}
bufferUpdated = false;
counterState = counterBuffer;
logger->info("Update State!");
}
}


+ 6
- 6
CAPI/python/PyAPI/DebugAPI.py View File

@@ -311,7 +311,7 @@ class StudentDebugAPI(IStudentAPI, IGameTimer):

def PrintStudent(self) -> None:
for student in self.__logic.GetStudents():
self.__logger.info("\n******Student Info******")
self.__logger.info("******Student Info******")
self.__logger.info(
f"playerID={student.playerID}, GUID={student.guid}, x={student.x}, y={student.y}")
self.__logger.info(
@@ -335,7 +335,7 @@ class StudentDebugAPI(IStudentAPI, IGameTimer):

def PrintTricker(self) -> None:
for tricker in self.__logic.GetTrickers():
self.__logger.info("\n******Tricker Info******")
self.__logger.info("******Tricker Info******")
self.__logger.info(
f"playerID={tricker.playerID}, GUID={tricker.guid}, x={tricker.x}, y={tricker.y}")
self.__logger.info(
@@ -364,7 +364,7 @@ class StudentDebugAPI(IStudentAPI, IGameTimer):

def PrintSelfInfo(self) -> None:
student = cast(THUAI6.Student, self.__logic.GetSelfInfo())
self.__logger.info("\n******Student Info******")
self.__logger.info("******Student Info******")
self.__logger.info(
f"playerID={student.playerID}, GUID={student.guid}, x={student.x}, y={student.y}")
self.__logger.info(
@@ -763,7 +763,7 @@ class TrickerDebugAPI(ITrickerAPI, IGameTimer):

def PrintStudent(self) -> None:
for student in self.__logic.GetStudents():
self.__logger.info("\n******Student Info******")
self.__logger.info("******Student Info******")
self.__logger.info(
f"playerID={student.playerID}, GUID={student.guid}, x={student.x}, y={student.y}")
self.__logger.info(
@@ -787,7 +787,7 @@ class TrickerDebugAPI(ITrickerAPI, IGameTimer):

def PrintTricker(self) -> None:
for tricker in self.__logic.GetTrickers():
self.__logger.info("\n******Tricker Info******")
self.__logger.info("******Tricker Info******")
self.__logger.info(
f"playerID={tricker.playerID}, GUID={tricker.guid}, x={tricker.x}, y={tricker.y}")
self.__logger.info(
@@ -816,7 +816,7 @@ class TrickerDebugAPI(ITrickerAPI, IGameTimer):

def PrintSelfInfo(self) -> None:
tricker = cast(THUAI6.Tricker, self.__logic.GetSelfInfo())
self.__logger.info("\n******Tricker Info******")
self.__logger.info("******Tricker Info******")
self.__logger.info(
f"playerID={tricker.playerID}, GUID={tricker.guid}, x={tricker.x}, y={tricker.y}")
self.__logger.info(


+ 3
- 2
CAPI/python/PyAPI/logic.py View File

@@ -552,9 +552,10 @@ class Logic(ILogic):
if not Setting.asynchronous():
with self.__cvBuffer:
self.__cvBuffer.wait_for(lambda: self.__bufferUpdated)
self.__bufferState, self.__currentState = self.__currentState, self.__bufferState
with self.__mtxState:
self.__bufferState, self.__currentState = self.__currentState, self.__bufferState
self.__counterState = self.__counterBuffer
self.__bufferUpdated = False
self.__counterState = self.__counterBuffer
self.__logger.info("Update state!")

def __Wait(self) -> None:


+ 1
- 1
docs/CAPI接口(cpp).md View File

@@ -45,7 +45,7 @@
- `std::pair<int64_t, std::string> GetMessage()`:按照消息发送顺序获取来自队友的信息,第一个参数为发送该消息的PlayerID。

#### 查询可视范围内的信息
- `std::vector<std::shared_ptr<const THUAI6::Student>> GetStudents() const` :返回所有可视学生的信息。
- `std::vector<std::shared_ptr<const THUAI6::Student>> GetStudents() const` :对于学生,返回所有学生的信息;对于捣蛋鬼,返回可视学生的信息。
- `std::vector<std::shared_ptr<const THUAI6::Tricker>> GetTrickers() const` :返回所有可视捣蛋鬼的信息。
- `std::vector<std::shared_ptr<const THUAI6::Prop>> GetProps() const` :返回所有可视道具的信息。
- `std::vector<std::shared_ptr<const THUAI6::Bullet>> GetBullets() const` :返回所有可视子弹(攻击)的信息。


+ 1
- 1
docs/CAPI接口(python).md View File

@@ -57,7 +57,7 @@

#### 查询可视范围内的信息

- `std::vector<std::shared_ptr<const THUAI6::Student>> GetStudents() const` :返回所有可视学生的信息。
- `std::vector<std::shared_ptr<const THUAI6::Student>> GetStudents() const` :对于学生,返回所有学生的信息;对于捣蛋鬼,返回可视学生的信息。
- `std::vector<std::shared_ptr<const THUAI6::Tricker>> GetTrickers() const` :返回所有可视捣蛋鬼的信息。
- `std::vector<std::shared_ptr<const THUAI6::Prop>> GetProps() const` :返回所有可视道具的信息。
- `std::vector<std::shared_ptr<const THUAI6::Bullet>> GetBullets() const` :返回所有可视子弹(攻击)的信息。


+ 5
- 10
logic/GameEngine/CollisionChecker.cs View File

@@ -123,12 +123,9 @@ namespace GameEngine
/// <returns>最大可能的移动距离</returns>
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;
}



+ 5
- 1
logic/Preparation/Utility/XY.cs View File

@@ -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) < c)
t = (c / t + t) / 2;
return (double)t / 1000.0;
}
public double Length()
{


Loading…
Cancel
Save