Ejemplo n.º 1
0
    private Entity GetFromPool(uint configID, ulong uID, eCamp camp)
    {
        HashSet <Entity> hash = null;

        if (!m_dicObjectPool.TryGetValue(configID, out hash))
        {
            hash = new HashSet <Entity>();
            m_dicObjectPool.Add(configID, hash);
        }
        Entity ent = null;
        var    e   = hash.GetEnumerator();

        if (e.MoveNext())
        {
            ent      = e.Current;
            ent.UID  = uID;
            ent.Camp = camp;
            ent.Alive();
            hash.Remove(ent);
        }
        else
        {
            ent = new Entity(configID, uID, camp);
        }
        return(ent);
    }
Ejemplo n.º 2
0
 public Entity Get(uint configID, ulong uID, eCamp camp)
 {
     if (!m_dicObject.ContainsKey(uID))
     {
         Entity ent = GetFromPool(configID, uID, camp);
         ent.IsActive = true;
         m_dicObject.Add(uID, ent);
         ent.Camp = camp;
         return(ent);
     }
     m_dicObject[uID].Camp = camp;
     return(m_dicObject[uID]);
 }
Ejemplo n.º 3
0
        public void RPC_SendFoodCar(int level, int num, RPC.RPCForwardInfo fwd)
        {
            sbyte result   = 0;
            eCamp tempCamp = eCamp.Song;
            var   tplWay   = CommonUtil.GetMapWayDataByType(tempCamp, eNpcType.FoodCar);

            if (null == tplWay)
            {
                Log.Log.Server.Error("RPC_SendFoodCar.GetMapWayDataByType is null: {0}, {1}", (int)Camp, (int)eNpcType.FoodCar);
            }
            else
            {
                var map = MapInstanceManager.Instance.GetMapBySourceId(tplWay.startmapID);
                if (null == map)
                {
                    Log.Log.Server.Error("RPC_SendFoodCar.GetMapInstance is null: {0}", tplWay.startmapID);
                    map = Planes.MapInstanceManager.Instance.CreateMapInstance(mHostMap.Planes, 0, (ushort)tplWay.startmapID, null);
                    if (map == null)
                    {
                        map = Planes.MapInstanceManager.Instance.GetDefaultMapInstance(mHostMap.Planes);
                    }
                    mHostMap.Planes.AddGlobalMap((ushort)tplWay.startmapID, map);
                }
                foreach (var npcData in map.MapInfo.MapDetail.NpcList)
                {
                    if (npcData.camp == (int)tempCamp)
                    {
                        var tplNpc = CSTable.StaticDataManager.NPCTpl[npcData.tid];
                        if (tplNpc.type == (int)eNpcType.FoodCar)
                        {
                            map.PushCreatingNpc(eNpcType.FoodCar, npcData);
                            result = 1;
                            break;
                        }
                    }
                }
            }
            var retPkg = new RPC.PackageWriter();

            retPkg.Write(result);
            retPkg.DoReturnPlanes2Client(fwd);
        }
Ejemplo n.º 4
0
    //此构造函数主要用于加载角色
    //param : 角色配置表的key值
    public Entity(uint configID, ulong uID, eCamp camp)
    {
        //注意顺序,首先应该加载 gameobject,然后实例化其他模块,因为其他模块的构造会依赖于这个gameobject
        EntityCfg = CSVManager.GetEntityCfg(configID);
        if (EntityCfg == null)
        {
            throw new Exception("找不到 configID = " + configID + " 的配置");
        }

        GameObject o = ResManager.Load <GameObject>(EntityCfg.ResPath);

        if (o == null)
        {
            throw new Exception("不存在的entity : " + EntityCfg.ResPath);
        }
        m_object = GameObject.Instantiate(o);
        m_object.transform.SetParent(EntityManager.Instance.EntityRoot);
        UID       = uID;
        this.Camp = camp;
        FillMapBones(); //映射骨骼信息
        blackboard = new Blackboard();
        InitModules();
    }
Ejemplo n.º 5
0
        /// <summary>
        /// 通过类型获取地图路线模板表
        /// </summary>
        public static CSTable.MapWayData GetMapWayDataByType(eCamp camp, eNpcType type)
        {
            var tplMapWays = CSTable.StaticDataManager.MapWay.Dict;

            foreach (var tpl in tplMapWays.Values)
            {
                eCarType carType = eCarType.None;
                switch (type)
                {
                case eNpcType.FoodCar:
                    carType = eCarType.FoodCar;
                    break;

                case eNpcType.MoneyCar:
                    carType = eCarType.MoneyCar;
                    break;
                }
                if (tpl.camp == (int)camp && tpl.cartype == (int)carType)
                {
                    return(tpl);
                }
            }
            return(null);
        }