private void LoadWeaponResources(SceneObjectEntity sceneObjectEntity, WeaponConfigNs.WeaponResConfigItem weaponCfg) { var avatarId = weaponCfg.AvatorId; if (sceneObjectEntity.hasWeaponObject && sceneObjectEntity.weaponObject.WeaponAvatarId > 0) { avatarId = sceneObjectEntity.weaponObject.WeaponAvatarId; } AssetInfo asset = SingletonManager.Get <WeaponAvatarConfigManager>().GetThirdPersonWeaponModel(avatarId); bool alreadyInitializedBefore = true; if (!sceneObjectEntity.hasMultiUnityObject || !sceneObjectEntity.hasWeaponAttachment) { alreadyInitializedBefore = false; sceneObjectEntity.AddMultiUnityObject(); sceneObjectEntity.AddWeaponAttachment( new Dictionary <AssetInfo, int>(AssetInfo.AssetInfoComparer.Instance), new List <AssetInfo>()); } var dic = sceneObjectEntity.multiUnityObject.LoadedAssets; if (!alreadyInitializedBefore) { AssetInfo assetInfo = new AssetInfo(asset.BundleName, asset.AssetName); dic[assetInfo] = null; _assetManager.LoadAssetAsync(sceneObjectEntity, assetInfo, _weaponLoadHandler.OnLoadSucc); } var weaponParts = sceneObjectEntity.weaponObject.CollectParts(); for (int i = 0; i < weaponParts.Count; i++) { var attachId = weaponParts[i]; var attach = SingletonManager.Get <WeaponPartsConfigManager>().GetAsset(attachId); AssetInfo partsInfo = new AssetInfo(attach.BundleName, attach.AssetName); if (!sceneObjectEntity.weaponAttachment.AttachmentDic.ContainsKey(partsInfo)) { dic[partsInfo] = null; sceneObjectEntity.weaponAttachment.AttachmentDic[partsInfo] = (int)SingletonManager.Get <WeaponPartsConfigManager>().GetPartType(attachId); _assetManager.LoadAssetAsync(sceneObjectEntity, partsInfo, _weaponLoadHandler.OnLoadSucc); } } List <AssetInfo> effectAssetInfo = SingletonManager.Get <WeaponAvatarConfigManager>().GetEffectAsset(avatarId); if (effectAssetInfo.Count > 0) { foreach (var effect in effectAssetInfo) { dic[effect] = null; _assetManager.LoadAssetAsync(sceneObjectEntity, effect, _weaponLoadHandler.OnLoadSucc); sceneObjectEntity.weaponAttachment.EffectDic.Add(effect); } } sceneObjectEntity.effects.AddGlobalEffect(GlobalEffectManager.GlobalGroundPropFlash); }
private void RefreshGround(Contexts context, PlayerEntity player) { HashSet <int> current = new HashSet <int>(); foreach (var item in context.sceneObject.GetEntities()) { if (item.hasPosition && IsNear(item.position.Value, player.position.Value) && item.hasSimpleEquipment && item.simpleEquipment.Category > 0 && HasNoObstacle(item, player)) { current.Add(item.entityKey.Value.EntityId); } } foreach (var item in context.freeMove.GetEntities()) { if (item.hasPosition && item.hasFreeData && IsNear(item.position.Value, player.position.Value) && HasNoObstacle(item, player)) { current.Add(item.entityKey.Value.EntityId); } } if (!current.SetEquals(groundEntitySet)) { Debug.LogFormat("当前列表{0}, 上次列表{1}", ToSetString(current), ToSetString(groundEntitySet)); List <SceneObjectEntity> list = new List <SceneObjectEntity>(); Dictionary <string, List <FreeMoveEntity> > deadList = new Dictionary <string, List <FreeMoveEntity> >(); Dictionary <string, List <FreeMoveEntity> > dropList = new Dictionary <string, List <FreeMoveEntity> >(); foreach (var id in current) { var sceneEntity = context.sceneObject.GetEntityWithEntityKey(new Core.EntityComponent.EntityKey(id, (short)EEntityType.SceneObject)); if (null != sceneEntity) { list.Add(sceneEntity); continue; } var freeMoveEntity = context.freeMove.GetEntityWithEntityKey(new Core.EntityComponent.EntityKey(id, (short)EEntityType.FreeMove)); { if (freeMoveEntity.freeData.Cat == FreeEntityConstant.DeadBox) { if (!deadList.ContainsKey(freeMoveEntity.freeData.Key)) { deadList.Add(freeMoveEntity.freeData.Key, new List <FreeMoveEntity>()); } deadList[freeMoveEntity.freeData.Key].Add(freeMoveEntity); } if (freeMoveEntity.freeData.Cat == FreeEntityConstant.DropBox) { if (!dropList.ContainsKey(freeMoveEntity.freeData.Key)) { dropList.Add(freeMoveEntity.freeData.Key, new List <FreeMoveEntity>()); } dropList[freeMoveEntity.freeData.Key].Add(freeMoveEntity); } } } //foreach (var item in context.sceneObject.GetEntities()) //{ // if (item.hasPosition && IsNear(item.position.Value, player.position.Value) && item.hasSimpleEquipment && item.simpleEquipment.Category > 0 // && HasNoObstacle(item, player)) // { // list.Add(item); // } //} //foreach (var item in context.freeMove.GetEntities()) //{ // if (item.hasPosition && item.hasFreeData && IsNear(item.position.Value, player.position.Value) && HasNoObstacle(item, player)) // { // if (item.freeData.Cat == FreeEntityConstant.DeadBox) // { // if (!deadList.ContainsKey(item.freeData.Key)) // { // deadList.Add(item.freeData.Key, new List<FreeMoveEntity>()); // } // deadList[item.freeData.Key].Add(item); // } // if (item.freeData.Cat == FreeEntityConstant.DropBox) // { // if (!dropList.ContainsKey(item.freeData.Key)) // { // dropList.Add(item.freeData.Key, new List<FreeMoveEntity>()); // } // dropList[item.freeData.Key].Add(item); // } // } //} foreach (ItemBar prefab in groundDic.Values) { ReturnObject(prefab); } groundDic.Clear(); FillBox(dropList, groundDic, false); FillBox(deadList, groundDic, true); list.Sort(new SceneObjectSorter()); if (list.Count > 0) { ItemBar caseName = AddCaseName("地面"); if (caseName != null) { groundDic.Add(-1, caseName); } } foreach (var item in list) { if (item.simpleEquipment.Category == (int)ECategory.Weapon) { WeaponConfigNs.WeaponResConfigItem weapon = SingletonManager.Get <WeaponResourceConfigManager>().GetConfigById(item.simpleEquipment.Id); if (weapon.Type != (int)EWeaponType_Config.ThrowWeapon) { item.simpleEquipment.Count = 0; } } if (item.simpleEquipment.Category == (int)ECategory.Avatar) { item.simpleEquipment.Count = 0; } ItemBar prefab = AddChild(item.simpleEquipment.Category, item.simpleEquipment.Id, item.simpleEquipment.Count, item.entityKey.Value.EntityId); if (prefab != null) { groundDic.Add(item.entityKey.Value.EntityId, prefab); } } groundEntitySet = current; } }