Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
            }
        }