本文整理汇总了C#中Microsoft.Xna.Framework.Graphics.Model.Last方法的典型用法代码示例。如果您正苦于以下问题:C# Model.Last方法的具体用法?C# Model.Last怎么用?C# Model.Last使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.Xna.Framework.Graphics.Model
的用法示例。
在下文中一共展示了Model.Last方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FillEmptyBorderRange
/// <summary>
/// Fills empty range of town quarter border with buildings. It takes it by dimension X - first fit.
/// </summary>
/// <param name="buildingModels">Availible models</param>
/// <param name="borderPosition">Position of border - specifies side of rectangle</param>
/// <param name="range">Empty range for filling</param>
/// <param name="offset">Already filled part of range</param>
private int FillEmptyBorderRange(Model[] buildingModels, TownQuarterInterfacePosition borderPosition, Range range, float offset, bool lastOne)
{
float emptySpace = (range.Length - 1) * SquareWidth - offset;
foreach(Model model in buildingModels)
{
if (model.GetSize(game.Drawer.WorldTransformMatrix).X <= emptySpace)
{
Model usedModel = model;
Vector3 usedModelSize = usedModel.GetSize(game.Drawer.WorldTransformMatrix);
float angle = 0;
Vector3 position = Vector3.Zero;
float newOffset = offset + usedModelSize.X;
switch (borderPosition)
{
case TownQuarterInterfacePosition.Top:
position = new Vector3(range.Begin * SquareWidth + SquareWidth + offset, 0, BlockWidth * SquareWidth - SquareWidth - usedModelSize.Z);
break;
case TownQuarterInterfacePosition.Right:
position = new Vector3(BlockWidth * SquareWidth - SquareWidth - usedModelSize.X / 2 + usedModelSize.Z / 2 + +(bitmapSize.Width - 2 * (BlockWidth - 1)) * SquareWidth, 0, range.Begin * SquareWidth + SquareWidth + offset + usedModelSize.X / 2 - usedModelSize.Z / 2);
angle = MathHelper.PiOver2;
break;
case TownQuarterInterfacePosition.Bottom:
position = new Vector3(range.Begin * SquareWidth + SquareWidth + offset, 0, BlockWidth * SquareWidth - SquareWidth + (bitmapSize.Height - 2 * (BlockWidth - 1)) * SquareWidth);
break;
case TownQuarterInterfacePosition.Left:
position = new Vector3(BlockWidth * SquareWidth - SquareWidth - usedModelSize.X / 2 - usedModelSize.Z / 2, 0, range.Begin * SquareWidth + SquareWidth + offset + usedModelSize.X / 2 - usedModelSize.Z / 2);
angle = MathHelper.PiOver2;
break;
default:
break;
}
SpatialObject borderBuilding = new SpatialObject(usedModel, this, position, angle, game.Drawer.WorldTransformMatrix);
solidObjects.AddLast(borderBuilding);
int recRes = 0;
if (!lastOne)
{
recRes = FillEmptyBorderRange(buildingModels, borderPosition, range, newOffset, false);
}
if (recRes == 0 && !lastOne)
{
Range overflowedRange = range;
overflowedRange.End++;
recRes = FillEmptyBorderRange(new Model[] {buildingModels.Last()}, borderPosition, overflowedRange, newOffset, true);
}
return recRes + 1;
//break;
}
}
return 0;
}