public static EntityGroupGraph CreateFromEntityGroup(UTinyEntityGroup entityGroup) { var graph = new EntityGroupGraph(entityGroup); graph.SyncFromUTiny(); foreach (var entity in entityGroup.Entities.Select(entityRef => entityRef.Dereference(entityGroup.Registry))) { if (null == entity) { continue; } entity.EntityGroup = entityGroup; graph.CreateLink(entity); } graph.CommitToUnity(); foreach (var entity in entityGroup.Entities.Select(entityRef => entityRef.Dereference(entityGroup.Registry))) { if (null == entity) { continue; } BindingsHelper.RunAllBindings(entity); } return(graph); }
public UTinyEntityGroup CreateEntityGroup(UTinyId id, string name) { var entityGroup = new UTinyEntityGroup(this, m_VersionStorage) { Id = id, Name = name }; m_VersionStorage.MarkAsChanged(entityGroup); Register(entityGroup); return(entityGroup); }
public override void VisitEntityGroup(UTinyEntityGroup entityGroup) { var begin = Writer.Length; Writer.Line($"{UTinyHTML5Builder.KEntityGroupNamespace}.{Module.Namespace}.{entityGroup.Name}.name = {EscapeJsString(entityGroup.Name)};"); Writer.WriteRaw($"{UTinyHTML5Builder.KEntityGroupNamespace}.{Module.Namespace}.{entityGroup.Name}.load = "); WriteEntityGroupSetupFunction(Writer, Project, entityGroup, WriteEntityGroupComponent, WriteEntityLayer); Report.AddChild(entityGroup.Name, System.Text.Encoding.ASCII.GetBytes(Writer.Substring(begin))); #if UNITY_EDITOR_WIN Writer.Length -= 2; #else Writer.Length -= 1; #endif }
private static void CreateEntityForAsset(IRegistry registry, UTinyProject project, UTinyEntityGroup entityGroup, UTinyAssetInfo asset) { var @object = asset.Object; UTinyEntity entity = null; if (@object is Texture2D) { var texture = @object as Texture2D; var path = AssetDatabase.GetAssetPath(texture); var importer = (TextureImporter)AssetImporter.GetAtPath(path); entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Texture2D))}{asset.Name}"); var image2d = entity.AddComponent(registry.GetImage2DType()); image2d.Refresh(); image2d["imageFile"] = $"ut-asset:{asset.Name}"; var settings = UTinyUtility.GetAssetExportSettings(project, @object) as UTinyTextureSettings; if (settings != null && settings.FormatType == TextureFormatType.JPG && UTinyAssetExporter.TextureExporter.ReallyHasAlpha(texture)) { image2d["maskFile"] = $"ut-asset:{asset.Name}_a"; } image2d["disableSmoothing"] = importer.filterMode == FilterMode.Point; var sprite = AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().FirstOrDefault(); // @NOTE The `importer.spritePixelsPerUnit` is currently NOT used in the editor... // We ALWAYS draw sprites at 1 pixel to world unit in the editor. // When we switch to using SpriteRenderer as our editor drawer we can just pass `sprite.pixelsPerUnit` directly here. var pixelsToWorldUnits = sprite ? sprite.pixelsPerUnit : 1; image2d["pixelsToWorldUnits"] = 1.0f / pixelsToWorldUnits; } else if (@object is Sprite) { var sprite = (Sprite)@object; entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Sprite))}{asset.Name}"); var sprite2d = entity.AddComponent(registry.GetSprite2DType()); sprite2d.Refresh(); sprite2d["image"] = sprite.texture; var region = sprite2d["imageRegion"] as UTinyObject; if (null != region) { region["x"] = sprite.rect.x / sprite.texture.width; region["y"] = sprite.rect.y / sprite.texture.height; region["width"] = sprite.rect.width / sprite.texture.width; region["height"] = sprite.rect.height / sprite.texture.height; } var pivot = sprite2d["pivot"] as UTinyObject; if (null != pivot) { pivot["x"] = sprite.pivot.x / sprite.rect.width; pivot["y"] = sprite.pivot.y / sprite.rect.height; } } else if (@object is AudioClip) { entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(AudioClip))}{asset.Name}"); var audioClip = entity.AddComponent(registry.GetAudioClipType()); audioClip.Refresh(); audioClip["file"] = $"ut-asset:{asset.Name}"; } else if (@object is Font) { entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Font))}{asset.Name}"); var fontAsset = entity.AddComponent(registry.GetFontType()); fontAsset.Refresh(); fontAsset["file"] = $"ut-asset:{asset.Name}"; } if (null != entity) { entityGroup.AddEntityReference((UTinyEntity.Reference)entity); } foreach (var child in asset.Children) { CreateEntityForAsset(registry, project, entityGroup, child); } }
public override void VisitEntityGroup(UTinyEntityGroup entityGroup) { }
public static void WriteEntityGroupSetupFunction(UTinyCodeWriter writer, UTinyProject project, UTinyEntityGroup entityGroup, bool writeEntityGroupComponent = true, bool writeEntityLayer = true) { var entityIndex = 0; var entityIndexMap = new Dictionary <UTinyEntity.Reference, int>(); using (writer.Scope("function(w)")) { entityIndexMap.Clear(); foreach (var reference in entityGroup.Entities) { var entity = reference.Dereference(entityGroup.Registry); ++entityIndex; entityIndexMap[reference] = entityIndex; writer.Line($"var e{entityIndex} = w.create({EscapeJsString(entity.Name)});"); } if (writeEntityGroupComponent) { foreach (var reference in entityGroup.Entities) { var index = entityIndexMap[reference]; writer.Line($"e{index}.addComponent(this.Component);"); } } if (writeEntityLayer) { foreach (var reference in entityGroup.Entities) { var index = entityIndexMap[reference]; var entity = reference.Dereference(entityGroup.Registry); writer.Line($"e{index}.addComponent({GetFullyQualifiedLayerName(LayerMask.LayerToName(entity.Layer))});"); } } var context = new VisitorContext { Project = project, Module = project.Module.Dereference(project.Registry), Registry = project.Registry, Writer = writer, EntityIndexMap = entityIndexMap }; entityIndex = 0; foreach (var reference in entityGroup.Entities) { var entity = reference.Dereference(entityGroup.Registry); ++entityIndex; foreach (var component in entity.Components) { var type = component.Type.Dereference(component.Registry); if (null == type) { Debug.LogError($"{UTinyConstants.ApplicationName}: Missing component type, ComponentType=[{component.Type.Name}] Entity=[{entity.Name}] Group=[{entityGroup.Name}]"); continue; } var index = ++context.ComponentIndex; writer.Line($"var c{index} = e{entityIndex}.addComponent({UTinyBuildPipeline.GetJsTypeName(type)});"); component.Properties.Visit(new ComponentVisitor { VisitorContext = context, Path = $"c{index}", Entity = $"e{entityIndex}" }); } } writer.WriteIndent(); writer.WriteRaw("return ["); for (var i = 0; i < entityIndex; i++) { writer.WriteRaw(i != 0 ? $", e{i + 1}" : $"e{i + 1}"); } writer.WriteRaw("];\n"); } writer.Line().Line(); }
public virtual void VisitEntityGroup(UTinyEntityGroup entityGroup) { }
public override void VisitEntityGroup(UTinyEntityGroup entityGroup) { m_Scene?.Invoke(entityGroup); }
private EntityGroupGraph(UTinyEntityGroup entityGroup) { EntityGroupRef = (UTinyEntityGroup.Reference)entityGroup; Registry = entityGroup.Registry; }