/// <summary> /// Initializes a new instance of the <see cref="Utp"/> class. /// </summary> /// <param name="parent">Parent newtwork controller</param> /// <param name="target">Target networkcontroller</param> public Utp(IActiveNetworkController parent, INetworkController target) { this.IsActive = false; this.Parent = parent; this.Target = target; this.Cables = new List <ICable> { new Cable(target) { X = this.Parent.X, Y = this.Parent.Y } }; this.Creator = this.Parent; if (this.EnemyUTP() != null) { this.Mode = UtpModes.MoveToBattle; this.EnemyUTP().Mode = UtpModes.MoveToBattle; } else { this.Mode = UtpModes.Attack; } this.Disconnect = false; this.HeadArrive += this.UTP_HeadArrive; }
/// <inheritdoc/> public void InteractionStart(INetworkController networkController) { IActiveNetworkController aNCTemp = networkController as IActiveNetworkController; if (networkController.IsEnable && aNCTemp != null && networkController.Owner == this.LocalPlayer) { this.LocalPlayer.SelectController(aNCTemp); } }
/// <inheritdoc/> public void ConnectTwoServer(IActiveNetworkController source, INetworkController target) { if (this.IsEnableConnection(source, target)) { source.Attack(target); } else { this.Messages.Add(new GameMessage("Firewall blocked connection")); } }
private bool IsEnableConnection(IActiveNetworkController source, INetworkController target) { List <IFireWall> firewalls = this.Firewalls(); foreach (var item in firewalls) { if (this.FireWallDetection(source, target, item)) { return(false); } } return(true); }
private bool FireWallDetection(IActiveNetworkController source, INetworkController target, IFireWall fireWall) { Rectangle r = new Rectangle((int)(fireWall.X - (this.TileSize / 2)), (int)(fireWall.Y - (this.TileSize / 2)), this.TileSize, this.TileSize); Vector sourcev = new Vector(source.X, source.Y); Vector targetv = new Vector(target.X, target.Y); Vector firewallv1 = new Vector(r.X, r.Y); Vector firewallv2 = new Vector(r.X + r.Width, r.Y + r.Height); Vector firewallv3 = new Vector(r.X + r.Width, r.Y); Vector firewallv4 = new Vector(r.X, r.Y + r.Height); Vector outv = new Vector(); var hit1 = LineSegment.LineSegementsIntersect(sourcev, targetv, firewallv1, firewallv2, out outv); var hit2 = LineSegment.LineSegementsIntersect(sourcev, targetv, firewallv3, firewallv4, out outv); return(hit1 || hit2); }
/// <inheritdoc/> public void SelectController(IActiveNetworkController controller) { this.SelectedController = controller; }