Calculation algorithm for optimizing room location.
优化房间位置的计算算法。
This commit is contained in:
parent
16a2a1d551
commit
4023d1d870
|
@ -83,7 +83,7 @@ public class PatchworkRoomPlacementStrategy : IRoomPlacementStrategy
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var position = CalculatedPosition(parentRoomNode, newRoom, mainRoomSlot, newRoomSlot, true)
|
var position = CalculatedPosition(parentRoomNode, newRoom, mainRoomSlot, newRoomSlot, false)
|
||||||
.Result;
|
.Result;
|
||||||
if (position == null) continue;
|
if (position == null) continue;
|
||||||
var roomPlacementData = new RoomPlacementData
|
var roomPlacementData = new RoomPlacementData
|
||||||
|
@ -236,44 +236,41 @@ public class PatchworkRoomPlacementStrategy : IRoomPlacementStrategy
|
||||||
return Task.FromResult<Vector2?>(null);
|
return Task.FromResult<Vector2?>(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2 result;
|
var mainRoomSlotPosition = mainRoom.TileMap.MapToLocal(mainRoomSlot.StartPosition);
|
||||||
if (mainOrientationDescribe[0] == CoordinateUtils.OrientationDescribe.Left &&
|
var newRoomSlotPosition = newRoom.TileMap.MapToLocal(newRoomSlot.StartPosition);
|
||||||
newOrientationDescribe[0] == CoordinateUtils.OrientationDescribe.Right)
|
//Get the vector from the new room slot to the main room slot
|
||||||
|
//得到从新房间槽位到主房间槽位的向量
|
||||||
|
var newToMain = mainRoomSlotPosition - newRoomSlotPosition;
|
||||||
|
var result = newToMain + mainRoom.RootNode.Position;
|
||||||
|
if (!roomSlotOverlap)
|
||||||
{
|
{
|
||||||
//Move left to new room.
|
//如果不允许房间槽位重叠
|
||||||
//左移新房间。
|
//If room slot overlap is not allowed
|
||||||
var mainSlotPosition = mainRoom.RootNode.Position + mainRoom.TileMap.MapToLocal(mainRoomSlot.StartPosition);
|
if (mainRoomSlot.IsHorizontal)
|
||||||
var newSlotPosition = newRoom.RootNode.Position + newRoom.TileMap.MapToLocal(newRoomSlot.StartPosition);
|
|
||||||
result = mainSlotPosition +
|
|
||||||
newRoom.TileMap.Position - newRoom.TileMap.MapToLocal(newRoomSlot.StartPosition);
|
|
||||||
//Modified y height
|
|
||||||
//修正y高度
|
|
||||||
result.Y -= newSlotPosition.Y - mainSlotPosition.Y;
|
|
||||||
//If the room slots don't overlap
|
|
||||||
//如果房间槽不能重叠
|
|
||||||
if (!roomSlotOverlap)
|
|
||||||
{
|
{
|
||||||
result.X -= Config.CellSize;
|
//Horizontal slot, offset in the Y direction.
|
||||||
|
//水平方向槽,向Y方向偏移。
|
||||||
|
if (result.Y < 0)
|
||||||
|
{
|
||||||
|
result.Y += Config.CellSize;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
result.Y -= Config.CellSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Vertical slot, offset in the X direction.
|
||||||
|
//垂直方向槽向X方向偏移。
|
||||||
|
if (result.X < 0)
|
||||||
|
{
|
||||||
|
result.X -= Config.CellSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.X += Config.CellSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var mainSlotPosition = mainRoom.RootNode.Position + mainRoom.TileMap.MapToLocal(mainRoomSlot.StartPosition);
|
|
||||||
var newSlotPosition = newRoom.RootNode.Position + newRoom.TileMap.MapToLocal(newRoomSlot.StartPosition);
|
|
||||||
result = mainSlotPosition;
|
|
||||||
// result.Y += newSlotPosition.Y - mainSlotPosition.Y;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//We need to be on the same level.
|
|
||||||
//我们需要在同一水平上。
|
|
||||||
if (mainRoomSlot.IsHorizontal)
|
|
||||||
{
|
|
||||||
result += newRoom.TileMap.MapToLocal(new Vector2I(newRoomSlot.EndPosition.X, 0)) - _halfCell;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result -= newRoom.TileMap.MapToLocal(new Vector2I(0, newRoomSlot.EndPosition.Y)) - _halfCell;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.FromResult<Vector2?>(result);
|
return Task.FromResult<Vector2?>(result);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user