本文整理汇总了C#中IEnumerator.Take方法的典型用法代码示例。如果您正苦于以下问题:C# IEnumerator.Take方法的具体用法?C# IEnumerator.Take怎么用?C# IEnumerator.Take使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IEnumerator
的用法示例。
在下文中一共展示了IEnumerator.Take方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateGuards
public IEnumerable<SpriteInfoExtended> CreateGuards(IEnumerator<Point> FreeSpaceForStuff, int Count, bool DoAttachGuardLogic)
{
for (int i = 0; i < Count; i++)
{
var g = CreateGuard();
GuardSprites.Add(g);
EgoView.BlockingSprites.Add(g);
g.ConstructorIndexForSync = i + ConstructorIndexForSync_Guards;
g.Position = FreeSpaceForStuff.Take();
g.Direction = 0;
g.TakeDamage +=
(damage, DamageOwner) =>
{
if (Sync_GuardAddDamage != null)
Sync_GuardAddDamage(g.ConstructorIndexForSync, damage, DamageOwner);
};
// state machine for AI guard
if (DoAttachGuardLogic)
AttachGuardLogic(g);
}
return GuardSprites;
}
示例2: CreateGuards
private void CreateGuards(IEnumerator<TextureBase.Entry> FreeSpaceForStuff)
{
for (int i = 0; i < 3; i++)
{
var g = CreateGuard();
g.Position = FreeSpaceForStuff.Take().Do(kk => new Point(kk.XIndex + 0.5, kk.YIndex + 0.5));
g.Direction = 0;
// state machine for AI guard
// each 3 secs turn 90 while not walking
3000.AtInterval(
delegate
{
if (g.WalkingAnimationRunning)
return;
var PossibleDestination = g.Position.MoveToArc(g.Direction, 1);
var AsMapLocation = new PointInt32
{
X = PossibleDestination.x.Floor(),
Y = PossibleDestination.y.Floor()
};
if (EgoView.Map.WallMap[AsMapLocation.X, AsMapLocation.Y] == 0)
{
// whee we can walk at this direction
g.StartWalkingAnimation();
const int StepsToBeTaken = 100;
(1000 / 15).AtInterval(
t =>
{
g.Position = g.Position.MoveToArc(g.Direction, 1.0 / (double)StepsToBeTaken);
if (t.currentCount == StepsToBeTaken)
{
t.stop();
g.StopWalkingAnimation();
}
}
);
return;
}
// can we walk at that direction?
g.Direction += 90.DegreesToRadians();
}
);
}
}
示例3: UpdatePortalPositions
void UpdatePortalPositions(IEnumerator<TextureBase.Entry> PortalPositions)
{
//WriteLine("portals: ");
foreach (var v in DualPortals)
{
var PortalAPos = PortalPositions.Take().Do(u => new Point { x = u.XIndex + 0.5, y = u.YIndex + 0.5 });
var PortalBPos = PortalPositions.Take().Do(u => new Point { x = u.XIndex + 0.5, y = u.YIndex + 0.5 });
//WriteLine("A: " + new { PortalAPos.x, PortalAPos.y });
//WriteLine("B: " + new { PortalBPos.x, PortalBPos.y });
var PortalADir = GetGoodDirection(PortalAPos);
var PortalBDir = GetGoodDirection(PortalBPos);
v.Orange.ViewVector = new Vector { Direction = 0, Position = new Point() };
v.Orange.ViewVector = new Vector { Direction = PortalADir, Position = PortalAPos };
v.Orange.SpriteVector = new Vector { Direction = PortalBDir, Position = PortalBPos };
v.Blue.ViewVector = new Vector { Direction = 0, Position = new Point() };
v.Blue.ViewVector = v.Orange.SpriteVector;
v.Blue.SpriteVector = v.Orange.ViewVector;
}
}
示例4: UpdatePortalPositions
public void UpdatePortalPositions(IEnumerator<Point> PortalPositions)
{
//WriteLine("portals: ");
foreach (var v in DualPortals)
{
var PortalAPos = PortalPositions.Take();
var PortalBPos = PortalPositions.Take();
//WriteLine("A: " + new { PortalAPos.x, PortalAPos.y });
//WriteLine("B: " + new { PortalBPos.x, PortalBPos.y });
var PortalADir = GetGoodDirection(PortalAPos);
var PortalBDir = GetGoodDirection(PortalBPos);
v.Orange.ViewVector = new RVector { Direction = 0, Position = new Point() };
v.Orange.ViewVector = new RVector { Direction = PortalADir, Position = PortalAPos };
v.Orange.SpriteVector = new RVector { Direction = PortalBDir, Position = PortalBPos };
v.Blue.ViewVector = new RVector { Direction = 0, Position = new Point() };
v.Blue.ViewVector = v.Orange.SpriteVector;
v.Blue.SpriteVector = v.Orange.ViewVector;
}
}