Esempio n. 1
0
        public CGfxMeshPrimitives RefreshMeshPrimitives(CRenderContext rc, RName name)
        {
            if (name.IsExtension(CEngineDesc.MeshSourceExtension) == false)
            {
                return(null);
            }

            lock (MeshPrimitives)
            {
                CGfxMeshPrimitives mesh;
                if (false == MeshPrimitives.TryGetValue(name, out mesh))
                {
                    mesh = new CGfxMeshPrimitives();
                    if (mesh.LoadMesh(rc, name, true) == false)
                    {
                        return(null);
                    }

                    MeshPrimitives.Add(name, mesh);
                }
                else
                {
                    using (var xnd = IO.XndHolder.SyncLoadXND(name.Address))
                    {
                        mesh.RefreshResource(rc, name.Name, xnd.Node);
                    }
                }
                return(mesh.CloneMeshPrimitives());
            }
        }
Esempio n. 2
0
        public async Task <UIElement> GetUIAsync([EngineNS.Editor.Editor_RNameMacrossType(typeof(EngineNS.UISystem.UIElement))] RName name,
                                                 string keyName = "__default", bool forceLoad = false)
        {
            if (name == null || name.IsExtension(CEngineDesc.UIExtension) == false)
            {
                return(null);
            }
            if (name.RNameType != RName.enRNameType.Game)
            {
                throw new InvalidOperationException("暂不支持非游戏UI");
            }
            if (string.IsNullOrEmpty(keyName))
            {
                keyName = "__default";
            }
            var       rc  = CEngine.Instance.RenderContext;
            var       key = new CKeyName(name, keyName);
            UIElement result;

            bool bFound = true;

            lock (UserUIs)
            {
                if (UserUIs.TryGetValue(key, out result) == false)
                {
                    var nameSpace  = name.RelativePath().Replace("/", ".");
                    var typeName   = nameSpace + name.PureName();
                    var resultType = EngineNS.CEngine.Instance.MacrossDataManager.MacrossScripAssembly.GetType(typeName);
                    if (resultType == null)
                    {
                        return(null);
                    }
                    result = System.Activator.CreateInstance(resultType) as UIElement;
                    bFound = false;
                    UserUIs.Add(key, result);
                }
            }

            if (bFound)
            {
                if (forceLoad)
                {
                    var atts     = result.GetType().GetCustomAttributes(typeof(Editor_UIControlInitAttribute), false);
                    var att      = atts[0] as Editor_UIControlInitAttribute;
                    var initType = att.InitializerType;
                    var init     = System.Activator.CreateInstance(initType) as UIElementInitializer;
                    await result.Initialize(rc, init);
                }
            }
            else
            {
                var atts     = result.GetType().GetCustomAttributes(typeof(Editor_UIControlInitAttribute), false);
                var att      = atts[0] as Editor_UIControlInitAttribute;
                var initType = att.InitializerType;
                var init     = System.Activator.CreateInstance(initType) as UIElementInitializer;
                await result.Initialize(rc, init);
            }
            return(result);
        }
Esempio n. 3
0
        public CGfxSkeletonAction GetSkeletonAction(CRenderContext rc, RName name, bool firstLoad = true)
        {
            if (name.IsExtension(CEngineDesc.AnimationSequenceExtension) == false)
            {
                return(null);
            }

            CGfxSkeletonAction action;

            if (false == SkeletonActions.TryGetValue(name, out action))
            {
                action = new CGfxSkeletonAction();
                if (action.LoadSkeletonAction(rc, name, firstLoad) == false)
                {
                    return(null);
                }

                SkeletonActions.Add(name, action);
            }
            return(action);
        }
Esempio n. 4
0
        public async Task <UVAnim> GetUVAnimAsync(CRenderContext rc, RName name)
        {
            if (name == null || name.IsExtension(CEngineDesc.UVAnimExtension) == false)
            {
                return(null);
            }
            UVAnim result;
            bool   found = false;

            lock (UVAnims)
            {
                if (UVAnims.TryGetValue(name, out result) == false)
                {
                    result = new UVAnim();
                    UVAnims.Add(name, result);
                }
                else
                {
                    found = true;
                }
            }
            if (found)
            {
                var context = await result.AwaitLoad();

                if (context != null && context.Result == null)
                {
                    return(null);
                }
                return(result);
            }

            if (false == await result.LoadUVAnimAsync(rc, name))
            {
                return(null);
            }
            return(result);
        }
Esempio n. 5
0
        public CGfxMeshPrimitives GetMeshPrimitives(CRenderContext rc, RName name, bool firstLoad = false)
        {
            if (name.IsExtension(CEngineDesc.MeshSourceExtension) == false)
            {
                return(null);
            }

            lock (MeshPrimitives)
            {
                CGfxMeshPrimitives mesh;
                if (false == MeshPrimitives.TryGetValue(name, out mesh))
                {
                    mesh = new CGfxMeshPrimitives();
                    if (mesh.LoadMesh(rc, name, firstLoad) == false)
                    {
                        return(null);
                    }

                    MeshPrimitives.Add(name, mesh);
                }
                return(mesh.CloneMeshPrimitives());
            }
        }
Esempio n. 6
0
        public CGfxMeshPrimitives NewMeshPrimitives(CRenderContext rc, RName name, UInt32 atom)
        {
            if (name.IsExtension(CEngineDesc.MeshSourceExtension) == false)
            {
                return(null);
            }
            lock (MeshPrimitives)
            {
                CGfxMeshPrimitives mesh;
                if (true == MeshPrimitives.TryGetValue(name, out mesh))
                {
                    return(mesh);
                }
                mesh = new CGfxMeshPrimitives();

                if (false == mesh.Init(rc, name, atom))
                {
                    return(null);
                }

                MeshPrimitives.Add(name, mesh);
                return(mesh.CloneMeshPrimitives());
            }
        }