コード例 #1
0
        /// <summary>
        /// 根据坐标 即时 向地图固定格子 里删除 unitId
        /// </summary>
        /// <param name="aoiUnit"></param>
        public static void RemoveUnitId(this AoiGridComponent self, AoiUnitComponent aoiUnit)
        {
            AoiGrid aoiGrid = self.Get(aoiUnit.gridId);

            if (aoiGrid != null)
            {
                UnitType unitType = aoiUnit.GetParent <Unit>().UnitType;
                switch (unitType)
                {
                case UnitType.Player:
                    if (aoiGrid.players.Contains(aoiUnit.GetParent <Unit>().Id))
                    {
                        aoiGrid.players.Remove(aoiUnit.GetParent <Unit>().Id);
                    }
                    break;

                case UnitType.Monster:
                    if (aoiGrid.enemys.Contains(aoiUnit.GetParent <Unit>().Id))
                    {
                        aoiGrid.enemys.Remove(aoiUnit.GetParent <Unit>().Id);
                    }
                    break;

                case UnitType.Npcer:
                    if (aoiGrid.npcers.Contains(aoiUnit.GetParent <Unit>().Id))
                    {
                        aoiGrid.npcers.Remove(aoiUnit.GetParent <Unit>().Id);
                    }
                    break;
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 更新 AoiUnitInfo ,当换格时
        /// </summary>
        /// <param name="aoiUnit"></param>
        public static void UpdateAoiUnitInfo(this AoiGridComponent self, AoiUnitComponent aoiUnit)
        {
            // 把新的AOI节点转移到旧的节点里
            aoiUnit.playerIds.OldMovesSet = aoiUnit.playerIds.MovesSet.Select(d => d).ToHashSet();
            aoiUnit.enemyIds.OldMovesSet  = aoiUnit.enemyIds.MovesSet.Select(d => d).ToHashSet();
            aoiUnit.npcerIds.OldMovesSet  = aoiUnit.npcerIds.MovesSet.Select(d => d).ToHashSet();

            //// 移动到新的位置
            self.MoveToChangeAoiGrid(aoiUnit);

            // 查找 周围 可见九宫格内单元 unitId
            self.FindAoi(aoiUnit);

            // 差集计算
            aoiUnit.playerIds.Enters = aoiUnit.playerIds.MovesSet.Except(aoiUnit.playerIds.OldMovesSet).ToHashSet();
            aoiUnit.playerIds.Leaves = aoiUnit.playerIds.OldMovesSet.Except(aoiUnit.playerIds.MovesSet).ToHashSet();
            aoiUnit.enemyIds.Enters  = aoiUnit.enemyIds.MovesSet.Except(aoiUnit.enemyIds.OldMovesSet).ToHashSet();
            aoiUnit.enemyIds.Leaves  = aoiUnit.enemyIds.OldMovesSet.Except(aoiUnit.enemyIds.MovesSet).ToHashSet();
            aoiUnit.npcerIds.Enters  = aoiUnit.npcerIds.MovesSet.Except(aoiUnit.npcerIds.OldMovesSet).ToHashSet();
            aoiUnit.npcerIds.Leaves  = aoiUnit.npcerIds.OldMovesSet.Except(aoiUnit.npcerIds.MovesSet).ToHashSet();

            ///20190715
            AoiPlayerComponent aoiPlayer = aoiUnit.GetParent <Unit>().GetComponent <AoiPlayerComponent>();

            if (aoiPlayer != null)
            {
                aoiPlayer.UpdateAddRemove();
            }

            ///将进入自己视野的人 加进来;将自己加入别的人视野
            aoiUnit.UpdateEnters();

            ///将离开自己视野的人 删除掉;同时将自己从别人的视野里删除
            aoiUnit.UpdateLeaves();
        }
コード例 #3
0
        /// <summary>
        /// 得到本人的 九宫格内 最新的 所有单元的 unitId
        /// </summary>
        /// <param name="aoiUnit"></param>
        static void FindAoi(this AoiGridComponent self, AoiUnitComponent aoiUnit)
        {
            aoiUnit.playerIds.MovesSet.Clear();
            aoiUnit.enemyIds.MovesSet.Clear();
            aoiUnit.npcerIds.MovesSet.Clear();

            AoiGrid mygrid = self.Get(aoiUnit.gridId);

            foreach (long gid in mygrid.seeGrids)
            {
                AoiGrid nineGrid = self.Get(gid);
                if (nineGrid.players.Count > 0)
                {
                    foreach (long unitId1 in nineGrid.players)
                    {
                        aoiUnit.playerIds.MovesSet.Add(unitId1);
                    }
                }
                if (nineGrid.enemys.Count > 0)
                {
                    foreach (long unitId2 in nineGrid.enemys)
                    {
                        aoiUnit.enemyIds.MovesSet.Add(unitId2);
                    }
                }
                if (nineGrid.npcers.Count > 0)
                {
                    foreach (long unitId3 in nineGrid.npcers)
                    {
                        aoiUnit.npcerIds.MovesSet.Add(unitId3);
                    }
                }
            }
        }
コード例 #4
0
        public static long GetGridId(this AoiGridComponent self, AoiUnitComponent aoiUnit)
        {
            float x  = aoiUnit.GetParent <Unit>().Position.x;
            float y  = aoiUnit.GetParent <Unit>().Position.z;
            long  id = self.GetDridX(x) + self.GetDridY(y) * self.rcCount;

            return(id);
        }
コード例 #5
0
        /// <summary>
        /// 根据坐标 更换地图固定格子 注册注销 unitId
        /// </summary>
        /// <param name="aoiUnit"></param>
        public static void MoveToChangeAoiGrid(this AoiGridComponent self, AoiUnitComponent aoiUnit)
        {
            long oldid = aoiUnit.gridId;

            self.RemoveUnitId(aoiUnit);
            aoiUnit.gridId = self.GetGridId(aoiUnit);
            self.AddUnitId(aoiUnit);

            Console.WriteLine(" AoiGridComponentHelper-119-Id: " + aoiUnit.GetParent <Unit>().Id + " " + aoiUnit.GetParent <Unit>().UnitType + " " + oldid + " => " + aoiUnit.gridId);
        }
コード例 #6
0
        static int GetDridY(this AoiGridComponent self, float y)
        {
            int gY = (int)Math.Floor((y + self.mapWide / 2) / self.gridWide);

            return(gY);
        }
コード例 #7
0
        static int GetDridX(this AoiGridComponent self, float x)
        {
            int gX = (int)Math.Floor((x + self.mapWide / 2) / self.gridWide);

            return(gX);
        }