Increase chance of damage when traversing long links.
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user