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()); } }
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); }
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); }
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); }
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()); } }
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()); } }