64 lines
2.2 KiB
C#
64 lines
2.2 KiB
C#
|
using System.Threading.Tasks;
|
|||
|
using ColdMint.scripts.debug;
|
|||
|
using ColdMint.scripts.map.dateBean;
|
|||
|
using ColdMint.scripts.map.interfaces;
|
|||
|
using ColdMint.scripts.utils;
|
|||
|
|
|||
|
namespace ColdMint.scripts.map.slotsMatcher;
|
|||
|
|
|||
|
public class RoomSlotsMatcher : IRoomSlotsMatcher
|
|||
|
{
|
|||
|
private RoomSlot _lastMatchedMainSlot;
|
|||
|
private RoomSlot _lastMatchedMinorSlot;
|
|||
|
|
|||
|
public async Task<bool> IsMatch(IRoom mainRoom, IRoom newRoom)
|
|||
|
{
|
|||
|
foreach (var mainRoomSlot in mainRoom.RoomSlots)
|
|||
|
{
|
|||
|
if (mainRoomSlot.Matched)
|
|||
|
{
|
|||
|
//如果已经匹配过了,就不再匹配
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
foreach (var newRoomSlot in newRoom.RoomSlots)
|
|||
|
{
|
|||
|
if (newRoomSlot.Matched)
|
|||
|
{
|
|||
|
//如果已经匹配过了,就不再匹配
|
|||
|
continue;
|
|||
|
}
|
|||
|
if (mainRoomSlot.IsHorizontal != newRoomSlot.IsHorizontal)
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
if (mainRoomSlot.Length != newRoomSlot.Length)
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
var distanceToMidpointOfRoom = mainRoomSlot.DistanceToMidpointOfRoom;
|
|||
|
var newDistanceToMidpointOfRoom = newRoomSlot.DistanceToMidpointOfRoom;
|
|||
|
LogCat.Log("尝试匹配" + distanceToMidpointOfRoom[0] + " " + distanceToMidpointOfRoom[1] + " 到 " +
|
|||
|
newDistanceToMidpointOfRoom[0] + " " + newDistanceToMidpointOfRoom[1]);
|
|||
|
if (distanceToMidpointOfRoom[0] == newDistanceToMidpointOfRoom[0] &&
|
|||
|
distanceToMidpointOfRoom[1] == newDistanceToMidpointOfRoom[1])
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
mainRoomSlot.Matched = true;
|
|||
|
newRoomSlot.Matched = true;
|
|||
|
_lastMatchedMainSlot = mainRoomSlot;
|
|||
|
_lastMatchedMinorSlot = newRoomSlot;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
public RoomSlot LastMatchedMainSlot => _lastMatchedMainSlot;
|
|||
|
public RoomSlot LastMatchedMinorSlot => _lastMatchedMinorSlot;
|
|||
|
}
|