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); }
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]); }
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); }
//此构造函数主要用于加载角色 //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(); }
/// <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); }