本文整理汇总了C#中System.Vector3.DistanceTo方法的典型用法代码示例。如果您正苦于以下问题:C# Vector3.DistanceTo方法的具体用法?C# Vector3.DistanceTo怎么用?C# Vector3.DistanceTo使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Vector3
的用法示例。
在下文中一共展示了Vector3.DistanceTo方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OnScheduledUpdate
public override void OnScheduledUpdate(World world, Vector3 position)
{
// Check for water
int closest = int.MaxValue;
for (int y = -1; y < 1; y++ )
for (int x = -8; x < 8; x++)
for (int z = -8; z < 8; z++)
{
if (position.Y + y < 0)
continue;
var blockPosition = new Vector3(x, position.Y + y, z);
var block = world.GetBlock(blockPosition);
if (block is WaterFlowingBlock || block is WaterStillBlock)
{
var distance = position.DistanceTo(blockPosition);
if (distance < closest)
closest = (int)distance;
}
}
closest = -(closest - 4) + 4;
Metadata = (byte)closest;
if (closest >= 5 && MathHelper.Random.Next(5) == 0)
world.SetBlock(position, new DirtBlock());
else
{
world.SetBlock(position, this);
ScheduleUpdate(world, position, DateTime.Now.AddSeconds(MathHelper.Random.Next(30, 120)));
}
base.OnScheduledUpdate(world, position);
}
示例2: DirectionByRotation
/// <summary>
/// Gets a byte representing block direction based on the rotation
/// of the entity that placed it.
/// </summary>
/// <param name="p">The entity whose rotation should be used.</param>
/// <param name="Position">The position of the block being placed.</param>
/// <param name="invert">If set to <c>true</c>, the direction is inverted.</param>
/// <returns></returns>
/// <remarks></remarks>
public static byte DirectionByRotation(PlayerEntity p, Vector3 Position, bool invert = false)
{
double d = Math.Asin(((p.Location.Y + 0.5) - Position.Y) / Position.DistanceTo(p.Location + new Vector3(0, 0.5, 0)));
if (d > (Math.PI / 4)) return invert ? (byte)1 : (byte)0;
if (d < -(Math.PI / 4)) return invert ? (byte)0 : (byte)1;
return DirectionByRotationFlat(p, invert);
}
示例3: DirectionByRotation
/// <summary>
/// Gets a byte representing block direction based on the rotation
/// of the entity that placed it.
/// </summary>
public static Direction DirectionByRotation(PlayerEntity p, Vector3 position, bool invert = false)
{
// TODO: Figure out some algorithm based on player's look yaw
double d = Math.Asin((p.Position.Y - position.Y) / position.DistanceTo(p.Position));
if (d > (Math.PI / 4)) return invert ? (Direction)1 : (Direction)0;
if (d < -(Math.PI / 4)) return invert ? (Direction)0 : (Direction)1;
return DirectionByRotationFlat(p, invert);
}
示例4: RightClick
public static void RightClick(MinecraftClient client, MinecraftServer server, IPacket _packet)
{
var packet = (RightClickPacket)_packet;
var slot = client.Entity.Inventory[client.Entity.SelectedSlot];
var position = new Vector3(packet.X, packet.Y, packet.Z);
var cursorPosition = new Vector3(packet.CursorX, packet.CursorY, packet.CursorZ);
Block block = null;
if (position != -Vector3.One)
{
if (position.DistanceTo(client.Entity.Position) > client.Reach)
return;
block = client.World.GetBlock(position);
}
bool use = true;
if (block != null)
use = block.OnBlockRightClicked(position, AdjustByDirection(packet.Direction), cursorPosition, client.World, client.Entity);
var item = slot.AsItem();
if (use && item != null)
{
if (block != null)
{
item.OnItemUsedOnBlock(client.World, position, AdjustByDirection(packet.Direction),
cursorPosition, client.Entity);
if (item is Block)
{
client.SendPacket(new NamedSoundEffectPacket((item as Block).PlacementSoundEffect,
(int)position.X, (int)position.Y, (int)position.Z, 1, 50));
}
}
else
item.OnItemUsed(client.World, client.Entity);
}
}
示例5: UpdateSign
public static void UpdateSign(MinecraftClient client, MinecraftServer server, IPacket _packet)
{
var packet = (UpdateSignPacket)_packet;
var position = new Vector3(packet.X, packet.Y, packet.Z);
if (position.DistanceTo(client.Entity.Position) < client.Reach)
{
var block = client.World.GetBlock(position);
if (block is SignBlock)
{
var sign = block as SignBlock;
var tile = sign.TileEntity as SignTileEntity;
tile.Text1 = packet.Text1;
tile.Text2 = packet.Text2;
tile.Text3 = packet.Text3;
tile.Text4 = packet.Text4;
sign.TileEntity = tile;
client.World.SetBlock(position, sign);
}
}
}
示例6: AcceptPlayerMove
protected virtual bool AcceptPlayerMove(McpeMovePlayer message)
{
if (GameMode != GameMode.Creative && _isKnownCheater <= _cheatLimit)
{
long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
if (HealthManager.CooldownTick == 0 && td > 49*TimeSpan.TicksPerMillisecond && td < 500*TimeSpan.TicksPerMillisecond && Level.SpawnPoint.DistanceTo(KnownPosition) > 2.0)
{
double horizSpeed;
{
// Speed in the xz plane
Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
horizSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
//if (horizSpeed > 11.0d)
//{
// _isKnownCheater = true;
// Level.BroadcastMessage(string.Format("{0} is spead cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed), type: MessageType.Raw);
// AddPopup(new Popup
// {
// MessageType = MessageType.Tip,
// Message = string.Format("{0} sprinting {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int)((double)td / TimeSpan.TicksPerMillisecond), horizSpeed),
// Duration = 1
// });
// LastUpdatedTime = DateTime.UtcNow;
// //HealthManager.TakeHit(this, 1, DamageCause.Suicide);
// //SendMovePlayer();
// return;
//}
}
double verticalSpeed;
{
// Speed in 3d
double speedLimit = (message.y - 1.62) - KnownPosition.Y < 0 ? -70d : 12d; //6d;
double distanceTo = (message.y - 1.62) - KnownPosition.Y;
verticalSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
if (!(horizSpeed > 0) && Math.Abs(verticalSpeed) > Math.Abs(speedLimit))
{
if (_isKnownCheater == _cheatLimit)
{
Level.BroadcastMessage(string.Format("{0} is detected as flying {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed), type: MessageType.Raw);
Log.WarnFormat("{0} is fly cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed);
}
//AddPopup(new Popup
//{
// MessageType = MessageType.Tip,
// Message = string.Format("{3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int)((double)td / TimeSpan.TicksPerMillisecond), verticalSpeed),
// Duration = 1
//});
LastUpdatedTime = DateTime.UtcNow;
//HealthManager.TakeHit(this, 1, DamageCause.Suicide);
//SendMovePlayer();
_isKnownCheater++;
return false;
}
}
AddPopup(new Popup
{
MessageType = MessageType.Tip,
Message = string.Format("Horiz: {0:##.##}m/s Vert: {1:##.##}m/s", horizSpeed, verticalSpeed),
Duration = 1
});
}
}
return true;
}
示例7: CheckEntityCollide
private Entity CheckEntityCollide(Vector3 position, Vector3 direction)
{
var players = Level.GetSpawnedPlayers().OrderBy(player => position.DistanceTo(player.KnownPosition.ToVector3()));
Ray2 ray = new Ray2
{
x = position,
d = direction.Normalize()
};
foreach (var entity in players)
{
if (entity == Shooter) continue;
if (Intersect(entity.GetBoundingBox(), ray))
{
if (ray.tNear < direction.Distance) break;
Vector3 p = ray.x + ray.tNear*ray.d;
KnownPosition = new PlayerLocation((float) p.X, (float) p.Y, (float) p.Z);
return entity;
}
}
var entities = Level.Entities.Values.OrderBy(entity => position.DistanceTo(entity.KnownPosition.ToVector3()));
foreach (Entity entity in entities)
{
if (entity == Shooter) continue;
if (entity == this) continue;
if (Intersect(entity.GetBoundingBox(), ray))
{
if (ray.tNear < direction.Distance) break;
Vector3 p = ray.x + ray.tNear*ray.d;
KnownPosition = new PlayerLocation((float) p.X, (float) p.Y, (float) p.Z);
return entity;
}
}
return null;
}
示例8: HandleMovePlayer
protected virtual void HandleMovePlayer(McpeMovePlayer message)
{
if (!IsSpawned || HealthManager.IsDead) return;
lock (_moveSyncLock)
{
if (_lastPlayerMoveSequenceNUmber > message.DatagramSequenceNumber)
{
Log.DebugFormat("Skipping move datagram {1}/{2} for player {0}", Username, _lastPlayerMoveSequenceNUmber, message.DatagramSequenceNumber);
return;
}
else
{
_lastPlayerMoveSequenceNUmber = message.DatagramSequenceNumber;
}
if (_lastOrderingIndex > message.OrderingIndex)
{
Log.DebugFormat("Skipping move ordering {1}/{2} for player {0}", Username, _lastOrderingIndex, message.OrderingIndex);
return;
}
else
{
_lastOrderingIndex = message.OrderingIndex;
}
long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
if (distanceTo/td*TimeSpan.TicksPerSecond > 25.0d)
{
//SendMovePlayer();
return;
}
}
//bool useAntiCheat = false;
//if (useAntiCheat)
//{
// long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
// if (GameMode == GameMode.Survival
// && HealthManager.CooldownTick == 0
// && td > 49*TimeSpan.TicksPerMillisecond
// && td < 500*TimeSpan.TicksPerMillisecond
// && Level.SpawnPoint.DistanceTo(new BlockCoordinates(KnownPosition)) > 2.0
// )
// {
// double horizSpeed;
// {
// // Speed in the xz plane
// Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
// double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
// horizSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
// if (horizSpeed > 11.0d)
// {
// //Level.BroadcastTextMessage(string.Format("{0} spead cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed), type: MessageType.Raw);
// AddPopup(new Popup
// {
// MessageType = MessageType.Tip,
// Message = string.Format("{0} sprinting {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed),
// Duration = 1
// });
// LastUpdatedTime = DateTime.UtcNow;
// HealthManager.TakeHit(this, 1, DamageCause.Suicide);
// SendMovePlayer();
// return;
// }
// }
// double verticalSpeed;
// {
// // Speed in 3d
// double speedLimit = (message.y - 1.62) - KnownPosition.Y < 0 ? -70d : 6d;
// double distanceTo = (message.y - 1.62) - KnownPosition.Y;
// verticalSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
// if (!(horizSpeed > 0) && Math.Abs(verticalSpeed) > Math.Abs(speedLimit))
// {
// //Level.BroadcastTextMessage(string.Format("{0} fly cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed), type: MessageType.Raw);
// AddPopup(new Popup
// {
// MessageType = MessageType.Tip,
// Message = string.Format("{3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed),
// Duration = 1
// });
// LastUpdatedTime = DateTime.UtcNow;
// HealthManager.TakeHit(this, 1, DamageCause.Suicide);
// //SendMovePlayer();
// return;
// }
// }
// AddPopup(new Popup
// {
// MessageType = MessageType.Tip,
// Message = string.Format("Horiz: {0:##.##}m/s Vert: {1:##.##}m/s", horizSpeed, verticalSpeed),
// Duration = 1
// });
// }
//.........这里部分代码省略.........
示例9: HandleMovePlayer
/// <summary>
/// Handles the move player.
/// </summary>
/// <param name="message">The message.</param>
private void HandleMovePlayer(McpeMovePlayer message)
{
if (HealthManager.IsDead) return;
long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
if (GameMode == GameMode.Survival
&& HealthManager.CooldownTick == 0
&& td > 49*TimeSpan.TicksPerMillisecond
&& td < 500*TimeSpan.TicksPerMillisecond
&& Level.SpawnPoint.DistanceTo(new BlockCoordinates(KnownPosition)) > 2.0
)
{
double horizSpeed;
{
// Speed in the xz plane
Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
horizSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
if (horizSpeed > 11.0d)
{
Level.BroadcastTextMessage(string.Format("{0} spead cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed), type: MessageType.Chat);
AddPopup(new Popup
{
MessageType = MessageType.Chat,
Message = string.Format("{0} sprinting {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed),
Duration = 1
});
LastUpdatedTime = DateTime.UtcNow;
HealthManager.TakeHit(this, 1, DamageCause.Suicide);
SendMovePlayer();
return;
}
}
double verticalSpeed;
{
// Speed in 3d
double speedLimit = (message.y - 1.62) - KnownPosition.Y < 0 ? -70d : 6d;
double distanceTo = (message.y - 1.62) - KnownPosition.Y;
verticalSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
if (!(horizSpeed > 0) && Math.Abs(verticalSpeed) > Math.Abs(speedLimit))
{
//Level.BroadcastTextMessage(string.Format("{0} fly cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed), type: MessageType.Raw);
AddPopup(new Popup
{
MessageType = MessageType.Tip,
Message = string.Format("{3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed),
Duration = 1
});
LastUpdatedTime = DateTime.UtcNow;
HealthManager.TakeHit(this, 1, DamageCause.Suicide);
//SendMovePlayer();
return;
}
}
AddPopup(new Popup
{
MessageType = MessageType.Tip,
Message = string.Format("Horiz: {0:##.##}m/s Vert: {1:##.##}m/s", horizSpeed, verticalSpeed),
Duration = 1
});
}
KnownPosition = new PlayerLocation
{
X = message.x,
Y = message.y - 1.62f,
Z = message.z,
Pitch = message.pitch,
Yaw = message.yaw,
HeadYaw = message.headYaw
};
LastUpdatedTime = DateTime.UtcNow;
if (IsBot) return;
//if (Level.Random.Next(0, 5) == 0)
//{
// int data = 0;
// //data = (int) uint.Parse("FFFF0000", NumberStyles.HexNumber);
// data = Level.Random.Next((int) uint.Parse("FFFF0000", NumberStyles.HexNumber), (int) uint.Parse("FFFFFFFF", NumberStyles.HexNumber));
// Level.RelayBroadcast(new McpeLevelEvent
// {
// eventId = 0x4000 | 22,
// x = KnownPosition.X,
// //y = KnownPosition.Y - 1.62f,
// y = KnownPosition.Y - 1f,
// z = KnownPosition.Z,
// data = data
// });
//}
//.........这里部分代码省略.........
示例10: ScheduledUpdate
public override void ScheduledUpdate(World world, Vector3 position)
{
bool canSpread = !(world.GetBlock(position + Vector3.Down) is AirBlock);
// Check inward flow
Block above = world.GetBlock(position + Vector3.Up);
Block[] neighbors = new Block[]
{
world.GetBlock(position + Vector3.Forward),
world.GetBlock(position + Vector3.Backward),
world.GetBlock(position + Vector3.Left),
world.GetBlock(position + Vector3.Right),
};
if (this.Metadata != 0)
{
if (above is WaterFlowingBlock || above is WaterStillBlock)
this.Metadata = 1;
else
{
byte minLevel = 8;
int sourceCount = 0;
for (int i = 0; i < neighbors.Length; i++)
{
if (neighbors[i] is WaterFlowingBlock ||
neighbors[i] is WaterStillBlock)
{
if (neighbors[i].Metadata < minLevel)
minLevel = neighbors[i].Metadata;
if (neighbors[i].Metadata == 0)
sourceCount++;
}
}
if (sourceCount >= 2)
{
this.Metadata = 0;
return;
}
if (minLevel > 0)
{
this.Metadata = (byte)(minLevel + 1);
if (this.Metadata > 7)
{
this.Metadata = 7;
world.SetBlock(position, new AirBlock());
return;
}
}
}
}
// Check outward flow
if (this.Metadata < 7)
{
Vector3 shortestLocation = new Vector3(6, 0, 6);
List<Vector3> additionalLocations = new List<Vector3>();
for (int x = -5; x <= 5; x++)
for (int z = -5; z <= 5; z++)
{
if (Math.Abs(x) + Math.Abs(z) > 5)
continue;
if (world.GetBlock(position + new Vector3(x, -1, z)) is AirBlock)
{
if (position.DistanceTo(position + new Vector3(x, 0, z)) ==
position.DistanceTo(position + shortestLocation))
additionalLocations.Add(new Vector3(x, 0, z));
if (position.DistanceTo(position + new Vector3(x, 0, z)) <
position.DistanceTo(position + shortestLocation))
{
shortestLocation = new Vector3(x, 0, z);
additionalLocations.Clear();
}
}
}
if (shortestLocation.Equals(new Vector3(6, 0, 6)))
{
additionalLocations.Add(new Vector3(-6, 0, 6));
additionalLocations.Add(new Vector3(6, 0, -6));
additionalLocations.Add(new Vector3(-6, 0, -6));
}
additionalLocations.Add(shortestLocation);
foreach (Vector3 v in additionalLocations)
{
Vector3 vC = v.Clamp(1);
Vector3 newLocation = position + new Vector3(vC.X, 0, 0);
Block b = world.GetBlock(newLocation);
if (b is AirBlock)
world.SetBlock(newLocation, new WaterFlowingBlock((byte)(this.Metadata + 1)));
newLocation = position + new Vector3(0, 0, vC.Z);
b = world.GetBlock(newLocation);
if (b is AirBlock)
world.SetBlock(newLocation, new WaterFlowingBlock((byte)(this.Metadata + 1)));
}
}
}
示例11: RenderVerts
internal unsafe void RenderVerts(TKContext ctx, IMatrixNode _singleBind, MDL0BoneNode selectedBone, Vector3 cam, bool pass2)
{
if (!_render)
return;
foreach (Vertex3 v in _vertices)
{
Color w = v._highlightColor != Color.Transparent ? v._highlightColor : (_singleBind != null && _singleBind == selectedBone) ? Color.Red : v.GetWeightColor(selectedBone);
if (w != Color.Transparent)
GL.Color4(w);
else
GL.Color4(DefaultVertColor);
float d = cam.DistanceTo(_singleBind == null ? v.WeightedPosition : _singleBind.Matrix * v.WeightedPosition);
if (d == 0) d = 0.000000000001f;
GL.PointSize((5000 / d).Clamp(1.0f, !pass2 ? 5.0f : 8.0f));
GL.Begin(BeginMode.Points);
GL.Vertex3(v.WeightedPosition._x, v.WeightedPosition._y, v.WeightedPosition._z);
GL.End();
}
}