コード例 #1
0
        public override void OnExit()
        {
            if (GameFlowHotfixController.PreviousActiveStateName != null)
            {
                PartitionObject.FlushAllAndUnload();
            }

            base.OnExit();
            CombatLogic.Instance.ExitCombat();

            if (GameFlowHotfixController.PreviousActiveStateName != null)
            {
                if (PSPoolManager.Instance != null)
                {
                    PSPoolManager.Instance.CompressPool();
                    PSPoolManager.Instance.UnloadStandardCombatFX();
                }

                EB.Assets.UnloadBundle("SpiritAnimaFx");
            }

            //暴力释放掉战斗场景资源
            if (m_ThemeLoadManager != null)
            {
                F_Clear(m_ThemeLoadManager.GetSceneRoot().m_LevelAssets);
            }

            EventManager.instance.Raise(eSimpleEventID.Combat_Exit);
        }
コード例 #2
0
    //Mount
    public bool Mount(string name, string assetName)
    {
        if (_mountPartition != null && _mountPartition.Name == name && _mountPartition.AssetName == assetName)
        {
            return(false);
        }
        if (_mountPartition == null)
        {
            _mountPartition = CreatePartitionObject(name, assetName);
        }
        else
        {
            if (_mountObject != null)
            {
                transform.parent = _mountObject.transform.parent;
                _mountPartition.UnregisterObject(_mountObject);
                _mountObject = null;
                _animator    = null;
            }
            _mountPartition.Name      = name;
            _mountPartition.AssetName = assetName;
        }
        _mountPartition.LoadAsset(OnAssetLoaded, gameObject);

        return(true);
    }
コード例 #3
0
    /// <summary>
    /// only put in one transform child partition example:Wing
    /// Anchor Name = name
    /// </summary>
    void UpdateChildrenPartition(PartitionObject partition, string name, string assetName, GameObject partitionObj)
    {
        Transform partitionAnchorDataTransform = transform.Find(name);

        if (partitionAnchorDataTransform == null)
        {
            EB.Debug.LogWarning("UpdateChildrenPartition:Partition Anchor Data lost  Need to Add!!", assetName);
            partition.UnregisterObject(partitionObj);
            return;
        }

        ChildPartitionAnchorDataComponent anchordata = partitionAnchorDataTransform.GetComponent <ChildPartitionAnchorDataComponent>();
        Transform partitionAnchor = anchordata.mAnchorBone;

        if (partitionAnchor == null)
        {
            EB.Debug.LogWarning("UpdateChildrenPartition:Partition Anchor Bone: anchordata.mAnchorBone lost!!", assetName);
            partition.UnregisterObject(partitionObj);
            return;
        }

        //Vector3 pos = partitionObj.transform.localPosition;
        //partitionObj.transform.parent = partitionAnchor;
        partitionObj.transform.SetParent(partitionAnchor, false);
        partitionObj.transform.localPosition = partitionAnchorDataTransform.localPosition;
        partitionObj.transform.localScale    = partitionAnchorDataTransform.localScale;
        partitionObj.CustomSetActive(!SyncLoad);
        partition.RegisterMeshObjects(partitionObj);
        SetLayer(partitionObj, gameObject.layer);
    }
コード例 #4
0
    /// <summary>
    /// 更新部件
    /// </summary>
    void UpdatePartitions()
    {
        Dictionary <string, PartitionObject> .Enumerator enumerator = m_Partitions.GetEnumerator();
        //应该是不存在的~因为这个属性不存在
        Transform prevTransform = gameObject.transform.Find(PreviewTransformName);

        if (prevTransform != null)
        {
#if UNITY_EDITOR
            GameObject.DestroyImmediate(prevTransform.gameObject);
#else
            GameObject.Destroy(prevTransform.gameObject);
#endif
        }

        while (enumerator.MoveNext())
        {
            PartitionObject partition = enumerator.Current.Value;
            if (partition != null)
            {
                m_ToLoad.Add(partition.AssetName);
                partition.LoadAsset(OnAssetLoaded, gameObject);
            }
        }
        enumerator.Dispose();
    }
コード例 #5
0
        public void Online()
        {
            var result = (string?)PartitionObject.InvokeMethod("Online", Array.Empty <object>());

            if (result != null)
            {
                throw new DiskOperationException(result);
            }
        }
コード例 #6
0
    PartitionObject CreatePartitionObject(string name, string assetName)
    {
        PartitionObject partition = new PartitionObject();

        partition.Name      = name;
        partition.AssetName = assetName;

        return(partition);
    }
コード例 #7
0
    public void UpdateEquipmentColor(string name, int colorIndex)
    {
        if (!m_Partitions.ContainsKey(name))
        {
            EB.Debug.LogError(string.Format("[AvatarComponent]Current character does NOT contain partition named {0}", name));
            return;
        }

        PartitionObject partition = m_Partitions[name];

        partition.UpdateEquipmentColor(colorIndex);
    }
コード例 #8
0
        public void AssignDriveLetter()
        {
            var inParams = PartitionObject.GetMethodParameters("AddAccessPath");

            inParams["AssignDriveLetter"] = true;
            var outParams = PartitionObject.InvokeMethod("AddAccessPath", inParams, null) !;
            var code      = Convert.ToInt32(outParams["ReturnValue"]);

            if (code != 0 && code != 42012)
            {
                throw new DiskOperationException("Could not assign drive letter", new Win32Exception(code));
            }

            // return code 42012 is ok for some reason, don't ask me why
        }
コード例 #9
0
        public string[] GetAccessPaths()
        {
            var inParams  = PartitionObject.GetMethodParameters("GetAccessPaths");
            var outParams = PartitionObject.InvokeMethod("GetAccessPaths", inParams, null);

            if (outParams == null)
            {
                return(Array.Empty <string>());
            }

            var paths       = (string[])outParams["AccessPaths"];
            var mappedPaths = paths.Select(p => p.Replace('?', '.')).ToArray();

            return(mappedPaths);
        }
コード例 #10
0
        public override void OnEnter()
        {
            LoadingLogic.AddCustomProgress(10);
            hudLoaded   = false;
            sceneLoaded = false;
            PartitionObject.FlushAllAndUnload();
            base.OnEnter();
            FusionAudio.PostGlobalMusicEvent("MUS_CampaignView_Demo", true);

            Hotfix_LT.Messenger.AddListener <EnemyController, eBattleType>("AttackEnemyImediatly", AttackEnemyImediatly);
            Hotfix_LT.Messenger.Raise("LTSpeedSnatchEvent.IdleFollow");
            MainlandViewAction();

            LTWelfareModel.Instance.SetMaxCampaignLevel();//更新通关的最大章节
        }
コード例 #11
0
    public void AddPartition(string partitionName, string assetName)
    {
        PartitionObject partition = null;

        if (m_Partitions.ContainsKey(partitionName))
        {
            partition = m_Partitions[partitionName];
            if (partition == null)
            {
                partition = CreatePartitionObject(partitionName, assetName);
                m_Partitions[partitionName] = partition;
            }
            else
            {
                m_Partitions[partitionName].AssetName = assetName;
            }
        }
        else
        {
            partition = CreatePartitionObject(partitionName, assetName);
            m_Partitions.Add(partitionName, partition);
        }
    }
コード例 #12
0
    public bool LoadEquipment(string name, string assetName)
    {
        if (m_Partitions.ContainsKey(name))
        {
            PartitionObject partition1 = m_Partitions[name];
            if (partition1.AssetName.Equals(assetName))
            {
                return(false);
            }
        }
        AddPartition(name, assetName);
        PartitionObject partition = m_Partitions[name];

        if (partition == null)
        {
            return(false);
        }

        partition.AssetName = assetName;

        m_ToLoad.Add(partition.AssetName);
        partition.LoadAsset(OnAssetLoaded, gameObject);
        return(true);
    }
コード例 #13
0
 public void RefreshVolume()
 {
     VolumeObject = PartitionObject.GetRelated("MSFT_Volume").OfType <ManagementObject>().FirstOrDefault();
 }
コード例 #14
0
    public void PreviewCharacter(List <PartitionInfo> infos)
    {
        Transform[] skeletonBones = gameObject.GetComponentsInChildren <Transform>();
        int         skeletonCount = skeletonBones.Length;

        m_SkeletonBonesDic.Clear();
        for (int i = 0; i < skeletonCount; i++)
        {
            m_SkeletonBonesDic.Add(skeletonBones[i].name, skeletonBones[i]);
        }

        Transform prevTransform = gameObject.transform.Find(PreviewTransformName);

        if (prevTransform != null)
        {
            GameObject.DestroyImmediate(prevTransform.gameObject);
        }

        for (int i = 0; i < infos.Count; i++)
        {
            PartitionInfo   info      = infos[i];
            PartitionObject partition = new PartitionObject();
            partition.Name      = info.Name;
            partition.AssetName = info.AssetName;
            m_Partitions.Add(info.Name, partition);
            if (info.AssetObject == null)
            {
                info.AssetObject = PartitionAssetManager.Instance.GetAssetObject(info.AssetName);

                if (info.AssetObject == null)
                {
                    string assetPath = PartitionAssetManager.Instance.GetAssetPath(info.AssetName);
                    if (!string.IsNullOrEmpty(assetPath))
                    {
                        info.AssetObject = AssetDatabase.LoadAssetAtPath(assetPath, typeof(GameObject)) as GameObject;
                        if (info.AssetObject != null)
                        {
                            PartitionAssetManager.Instance.RegisterAssetObject(info.AssetName, info.AssetObject);
                        }
                    }
                }
            }
            GameObject           partitionObject      = GameObject.Instantiate(info.AssetObject) as GameObject;
            List <PartitionInfo> linkedPartitionInfos = null;

            CharacterPartitionLink partitionLink = partitionObject.GetComponent <CharacterPartitionLink>();

            if (partitionLink != null)
            {
                linkedPartitionInfos = new List <PartitionInfo>();
                foreach (PartitionInfo linkedInfo in partitionLink.LinkedPartitions)
                {
                    linkedPartitionInfos.Add(linkedInfo);
                }
            }

            UpdatePartition(info.Name, info.AssetName, partitionObject, false);

            if (linkedPartitionInfos != null)
            {
                for (int j = 0; j < linkedPartitionInfos.Count; j++)
                {
                    PartitionInfo linkedInfo = linkedPartitionInfos[j];
                    if (linkedInfo.AssetObject == null)
                    {
                        linkedInfo.AssetObject = PartitionAssetManager.Instance.GetAssetObject(linkedInfo.AssetName);
                    }
                    GameObject linkedObj = GameObject.Instantiate(linkedInfo.AssetObject) as GameObject;
                    UpdatePartition(info.Name, linkedInfo.AssetName, linkedObj, true);
                }
            }
        }
    }
コード例 #15
0
    /// <summary>
    /// need combine bone partition example:Armor
    /// 合并骨骼部件
    /// </summary>
    /// <param name="partition"></param>
    /// <param name="name"></param>
    /// <param name="assetName"></param>
    /// <param name="partitionObj">部件数据组件</param>
    /// <param name="isLinkObj"></param>
    void UpdateCombineBonePartition(PartitionObject partition, string name, string assetName, GameObject partitionObj, bool isLinkObj = false)
    {
        if (gameObject == null)
        {
            EB.Debug.LogError("This AvatarComponent has been destroyed!");
            return;
        }

        //获取数据组件身上挂载的部件预置体相应的蒙皮
        SkinnedMeshRenderer[] meshes = partitionObj.GetComponentsInChildren <SkinnedMeshRenderer>();
        if (meshes == null || meshes.Length == 0)
        {
            if (partitionObj.GetComponentInChildren <CharacterPartitionLink>() == null)
            {
                EB.Debug.LogWarning("UpdatePartition: SkinnedMeshRenderer not found in {0}", assetName);
            }

            partition.UnregisterObject(partitionObj);
            return;
        }

        for (int meshIndex = meshes.Length - 1; meshIndex >= 0; meshIndex--)
        {
            SkinnedMeshRenderer smr  = meshes[meshIndex];
            Transform           root = null;
            m_CombinedBones.Clear();
            Transform[] bones = smr.bones;

            //reskin this thing to the new skeleton
            if (!m_SkeletonBonesDic.ContainsKey(smr.rootBone.name))
            {
                EB.Debug.LogError("No rootBone for {0}", assetName);
                return;
            }
            root = m_SkeletonBonesDic[smr.rootBone.name];
            if (!m_SkeletonBonesDic.ContainsKey(RootBoneTransformName))            //for Optimized Game Object
            {
                smr.bones = new Transform[0];
            }
            else
            {
                int boneCount = bones.Length;
                for (int boneIndex = 0; boneIndex < boneCount; boneIndex++)
                {
                    Transform bone         = bones[boneIndex];
                    Transform combinedBone = null;
                    if (m_SkeletonBonesDic.TryGetValue(bone.name, out combinedBone) && combinedBone != null)
                    {
                        m_CombinedBones.Add(combinedBone);
                    }
                }
                smr.bones = m_CombinedBones.ToArray();
            }

            smr.rootBone = root;
            smr.transform.SetParent(gameObject.transform);
            smr.gameObject.CustomSetActive(!SyncLoad);
            partition.RegisterMeshObjects(smr.gameObject);

            smr.gameObject.layer = gameObject.layer;

            CheckRender();
        }
    }
コード例 #16
0
    /// <summary>
    /// 更新部件
    /// </summary>
    /// <param name="name">部件名称</param>
    /// <param name="assetName">资源名称</param>
    /// <param name="partitionObj">部件数据对象</param>
    /// <param name="isLinkObj">是否有部件信息组件</param>
    void UpdatePartition(string name, string assetName, GameObject partitionObj, bool isLinkObj = false)
    {
        if (!m_Partitions.ContainsKey(name))
        {
            EB.Debug.LogError(string.Format("更新部件,发现这个部件不存在部件列表当中,: {0} ,部件的资源名称: {1}!", name, assetName));
        }

        PartitionObject partition = m_Partitions[name];

        if (partition == null)
        {
            return;
        }

        if (!isLinkObj)        //现在默认都是没有部件列表的组件了,每次都进去
        {
            partition.ClearMeshObjects();
        }

        //initialize character partition: load skinnedmeshes and set materials
        CharacterPartition characterPartition = partitionObj.GetComponent <CharacterPartition>();

        if (characterPartition != null)
        {
            characterPartition.Initialize();
        }

        ColorCustomization customization = partitionObj.GetComponent <ColorCustomization>();

        if (customization != null)
        {
            customization.ApplyColor();
        }
        bool isChildrenPatition = IsChildrenPartition(name, assetName);

        //日志
        EB.Debug.LogObjectMgrAsset("<color=#00ff00>更新合并部件的骨骼:{0}</color>,,assetName:<color=#00ff00>{1}</color>是否为这个角色的子级:<color=#00ff00>{2}</color>,isLinkObj:<color=#00ff00>{3}</color>"
                                   , name, assetName, isChildrenPatition, isLinkObj);
        //
        if (isChildrenPatition)
        {
            //更新部件,先注掉,因为业务逻辑已经过老了
            UpdateChildrenPartition(partition, name, assetName, partitionObj);
        }
        else
        {
            try
            {
                UpdateCombineBonePartition(partition, name, assetName, partitionObj, isLinkObj);
            }
            catch (System.NullReferenceException e)
            {
                EB.Debug.LogError(e.ToString());
            }
            partition.UnregisterObject(partitionObj);
        }

        if (SyncLoad && m_ToLoad.Count == 0)
        {
            var iter = m_Partitions.GetEnumerator();
            while (iter.MoveNext())
            {
                iter.Current.Value.ShowMeshObjects();
            }
            iter.Dispose();
        }

        CharacterColorScale colorScale = GetComponent <CharacterColorScale>();

        if (colorScale != null)
        {
            colorScale.ForceUpdateColorScale();
        }
    }