Increase chance of damage when traversing long links.
This commit is contained in:
parent
2713d6156b
commit
d72ccee22f
@ -1830,6 +1830,10 @@ namespace EduNetworkBuilder
|
||||
{
|
||||
return Math.Sqrt(Math.Pow((start.X - dest.X),2) + Math.Pow((start.Y - dest.Y),2)) / 5; //use grid size...
|
||||
}
|
||||
public double pixeldistance(Point start, Point dest)
|
||||
{
|
||||
return Math.Sqrt(Math.Pow((start.X - dest.X), 2) + Math.Pow((start.Y - dest.Y), 2)); //pixel size, not grid size
|
||||
}
|
||||
|
||||
public double distance(NetworkDevice start, NetworkDevice dest)
|
||||
{
|
||||
|
@ -366,6 +366,24 @@ namespace EduNetworkBuilder
|
||||
}
|
||||
|
||||
|
||||
public void TakeDamageIfNeeded(Point location, Packet tPacket)
|
||||
{
|
||||
Network myNet = NB.GetNetwork();
|
||||
|
||||
if (myNet.DeviceIsOverDamaging(theLinkType, location))
|
||||
{
|
||||
tPacket.health -= 10;
|
||||
//Console.WriteLine(" health=" + tPacket.health.ToString());
|
||||
}
|
||||
if (theLinkType == LinkType.wireless)
|
||||
{
|
||||
if (myNet.DeviceInTree(theLinkType, location))
|
||||
{
|
||||
tPacket.health -= 60;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Have the packet traverse the network
|
||||
/// </summary>
|
||||
@ -375,22 +393,45 @@ namespace EduNetworkBuilder
|
||||
NetworkDevice movingTo = null;
|
||||
Network myNet = NB.GetNetwork();
|
||||
HostNicID target;
|
||||
int oldpercent = tPacket.myLinkPercent;
|
||||
Point oldLocation = PositionOnLine(tPacket.myDirection, tPacket.myLinkPercent);
|
||||
tPacket.IncrementDistance();
|
||||
Point newLocation = PositionOnLine(tPacket.myDirection, tPacket.myLinkPercent);
|
||||
if (myNet.DeviceIsOverDamaging(theLinkType, newLocation))
|
||||
List<Point> PointsToCheck = new List<Point>();
|
||||
PointsToCheck.Add(newLocation);
|
||||
|
||||
double distance = myNet.pixeldistance(oldLocation, newLocation);
|
||||
if(distance > (double)myNet.itemsize / 2)
|
||||
{
|
||||
tPacket.health -= 10;
|
||||
//Console.WriteLine(" health=" + tPacket.health.ToString());
|
||||
//We are traveling too fast to accurately take damage. take some snapshot point along the way
|
||||
int count = (int)(distance / ((double)myNet.itemsize / 2));
|
||||
int newpercent = tPacket.myLinkPercent;
|
||||
int delta = Math.Abs(newpercent - oldpercent) / (count +1);
|
||||
if (delta < 1) count = 1;
|
||||
if (delta > 5) count = 5;
|
||||
int start = newpercent + delta;
|
||||
int end = oldpercent;
|
||||
|
||||
if(oldpercent - newpercent < 0)
|
||||
{
|
||||
start = oldpercent + delta;
|
||||
end = newpercent;
|
||||
}
|
||||
for(int percent = start; percent < end; percent+= delta )
|
||||
{
|
||||
Point next = PositionOnLine(tPacket.myDirection, percent);
|
||||
PointsToCheck.Add(next);
|
||||
}
|
||||
}
|
||||
|
||||
foreach(Point one in PointsToCheck)
|
||||
TakeDamageIfNeeded(one, tPacket);
|
||||
|
||||
if(theLinkType == LinkType.wireless)
|
||||
{
|
||||
if(myNet.DeviceInTree(theLinkType, newLocation))
|
||||
{
|
||||
tPacket.health -= 60;
|
||||
}
|
||||
NetworkDevice sDev = myNet.GetDeviceFromID(SrcNic);
|
||||
NetworkDevice dDev = myNet.GetDeviceFromID(DstNic);
|
||||
double distance = myNet.distance(sDev, dDev) * (tPacket.myLinkPercent * 0.01);
|
||||
distance = myNet.distance(sDev, dDev) * (tPacket.myLinkPercent * 0.01);
|
||||
if(distance > NB.WirelessMaxSuccessfulLink)
|
||||
{
|
||||
//The wireless link is too far. Drop the packet
|
||||
|
Loading…
Reference in New Issue
Block a user