public void AddRoute(GlobalStructureList aGlobalStructureList, TeleporterPermission aPermission, int aSourceId, int aTargetId, PlayerInfo aPlayer) { var FoundEntity = SearchEntity(aGlobalStructureList, aSourceId); if (FoundEntity == null) { return; } var FoundRoute = TeleporterRoutes.FirstOrDefault(R => R.Permission == aPermission && IsPermissionGranted(R, aPlayer) && ((R.A.Id == aSourceId && R.B.Id == aTargetId) || (R.B.Id == aSourceId && R.A.Id == aTargetId))); var RelativePos = GetVector3(aPlayer.pos) - GetVector3(FoundEntity.Data.pos); var NormRot = GetVector3(aPlayer.rot) - GetVector3(FoundEntity.Data.rot); var EntityRot = GetMatrix4x4(GetVector3(FoundEntity.Data.rot)).Transpose(); RelativePos = Vector3.Transform(RelativePos, EntityRot); RelativePos = new Vector3(RelativePos.X, ((float)Math.Round(RelativePos.Y + 1.9) - 1), RelativePos.Z); if (FoundRoute == null) { TeleporterRoutes.Add(FoundRoute = new TeleporterRoute() { Permission = aPermission, PermissionId = aPermission == TeleporterPermission.PublicAccess ? 0 : aPermission == TeleporterPermission.FactionAccess ? aPlayer.factionId : aPermission == TeleporterPermission.PrivateAccess ? aPlayer.entityId : 0, A = new TeleporterData() { Id = aSourceId, Position = RelativePos, Rotation = NormRot }, B = new TeleporterData() { Id = aTargetId } }); TeleporterRoutes = TeleporterRoutes.OrderBy(T => T.Permission).ToList(); } else if (FoundRoute.A.Id == aSourceId && FoundRoute.B.Id == aTargetId) { FoundRoute.Permission = aPermission; FoundRoute.A.Position = RelativePos; FoundRoute.A.Rotation = NormRot; } else if (FoundRoute.A.Id == aTargetId && FoundRoute.B.Id == aSourceId) { FoundRoute.Permission = aPermission; FoundRoute.B.Position = RelativePos; FoundRoute.B.Rotation = NormRot; } }
public int Delete(int aSourceId, int aTargetId) { var OldCount = TeleporterRoutes.Count(); TeleporterRoutes = aTargetId == 0 ? TeleporterRoutes.Where(T => T.A.Id != aSourceId && T.B.Id != aSourceId) .ToList() : TeleporterRoutes.Where(T => !((T.A.Id == aSourceId && T.B.Id == aTargetId) || (T.A.Id == aTargetId && T.B.Id == aSourceId))) .ToList(); return(OldCount - TeleporterRoutes.Count()); }
public TeleporterTargetData SearchRoute(GlobalStructureList aGlobalStructureList, PlayerInfo aPlayer) { //log($"T:{TeleporterRoutes.Aggregate("", (s, t) => s + " " + t.ToString())} => {aGlobalStructureList.globalStructures.Aggregate("", (s, p) => s + p.Key + ":" + p.Value.Aggregate("", (ss, pp) => ss + " " + pp.id + "/" + pp.name))}"); foreach (var I in TeleporterRoutes.Where(T => T.B.Position != Vector3.Zero && IsPermissionGranted(T, aPlayer))) { if (IsNearPos(aGlobalStructureList, I.A, aPlayer.pos)) { return(GetCurrentTeleportTargetPosition(aGlobalStructureList, I.B)); } if (IsNearPos(aGlobalStructureList, I.B, aPlayer.pos)) { return(GetCurrentTeleportTargetPosition(aGlobalStructureList, I.A)); } } return(null); }
public IEnumerable <TeleporterRoute> List(int aStructureId, PlayerInfo aPlayer) { return(TeleporterRoutes.Where(T => (T.A.Id == aStructureId || T.B.Id == aStructureId) && IsPermissionGranted(T, aPlayer))); }