コード例 #1
0
        public void DeRegisterObject(IHasGalaxyID obj)
        {
            ISimulatable tempSim;
            IHasGalaxyID tempGal;

            //Maybe a type check is faster than TryRemove?

            _collisionManager.TryRemoveCollidableKey(obj.Id);

            _galaxyManager.DeRegisterArea(obj.Id);
            _galaxyManager.AllSimulatableObjects.TryRemove(obj.Id, out tempSim);
            _galaxyManager.AllObjects.TryRemove(obj.Id, out tempGal);


            _shipManager.DeregisterShip(obj.Id);

            _galaxyIDManager.PushFreeID(obj.Id);
        }
コード例 #2
0
ファイル: TeamManager.cs プロジェクト: bsed/Freecon-Galactic
        /// <summary>
        /// Dissolves the team with the given team number
        /// I kind of half assed this function, needs testing
        /// </summary>
        /// <param name="teamNumber"></param>
        /// <returns></returns>
        public void dissolveTeam(Team team)
        {
            var areas = new HashSet <IArea>(); //Keeps track of all areas which need to recieve notification



            HashSet <int> playerIDs = team.PlayerIDs;



            HashSet <int> nonlocalPlayerIDs = new HashSet <int>();

            foreach (int i in team.PlayerIDs)
            {
                Player p = _playerLocator.GetPlayerAsync(i).Result;
                if (p == null)
                {
                    nonlocalPlayerIDs.Add(i);
                }
                else
                {
                    p.RemoveTeam(team.Id);
                    areas.Add(p.GetArea());
                }
            }


            if (nonlocalPlayerIDs.Count != 0)
            {
                NetworkMessageContainer msgc = new NetworkMessageContainer();
                msgc.MessageData = new PlayerRemoveTeam(nonlocalPlayerIDs, team.Id);
                _redisServer.PublishObject(MessageTypes.Redis_PlayerRemoveTeam, msgc);
            }



            //Send removeships message to areas in which this team exists
            foreach (var a in areas)
            {
                if (a.NumOnlinePlayers == 0)
                {
                    continue;
                }


                var data = new MessageAddRemoveShipsTeam();
                data.AddOrRemove = false;
                data.TeamID      = team.Id;

                foreach (var s in a.GetShips())
                {
                    if (team.PlayerIDs.Contains(s.Value.Id))
                    {
                        data.IDs.Add(s.Value.Id);
                    }
                }

                a.BroadcastMessage(new NetworkMessageContainer(data, MessageTypes.AddRemoveShipsTeam));
            }

            _databaseManager.DeleteTeam(team.Id);
            _teamIDSupplier.PushFreeID(team.Id);
        }