Пример #1
0
        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;
            }
        }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }
Пример #4
0
 public IEnumerable <TeleporterRoute> List(int aStructureId, PlayerInfo aPlayer)
 {
     return(TeleporterRoutes.Where(T => (T.A.Id == aStructureId || T.B.Id == aStructureId) && IsPermissionGranted(T, aPlayer)));
 }