public ILevelEditorObject CreateObject(ILevelEditorResource resource, Vector3 position, Quaternion rotation, Transform parent, uint instanceID, bool registerUndo = true)
        {
            LevelEditorLogger.Log($"Create object | Resource: {resource} | Position: {position} | Rotation: {rotation} | Parent: {parent} | Instance ID: {instanceID} | Register undo: {registerUndo}");

            if (resource.Asset is GameObject go)
            {
                return(CreateLevelEditorObject((p, r, par) =>
                {
                    GameObject objGo = Instantiate(go, p, r, par);
                    return objGo.GetOrAddComponent <LevelEditorObject>();
                }, resource, instanceID, registerUndo, position, rotation, parent));
            }

            if (resource.Asset is Component comp)
            {
                return(CreateLevelEditorObject((p, r, par) =>
                {
                    Component objGo = Instantiate(comp, p, r, par);
                    return objGo.gameObject.GetOrAddComponent <LevelEditorObject>();
                }, resource, instanceID, registerUndo, position, rotation, parent));
            }

            Debug.LogError($"Tried to create {resource.Name} ({resource.ID}) but the asset is not a prefab.");
            return(null);
        }
 public CreateObjectUndoAction(ILevelEditorResource resource, Vector3 position, Quaternion rotation, Transform parent, uint instanceID, ILevelEditorObject obj)
 {
     this.resource   = resource;
     this.position   = position;
     this.rotation   = rotation;
     this.parent     = parent;
     this.instanceID = instanceID;
     this.obj        = obj;
 }
        private Sprite GetIcon(ILevelEditorResource resource, out Color color, out bool isCached)
        {
            isCached = false;
            if (resource.CustomIcon && resource.Icon != null)
            {
                color = Color.white;
                return(resource.Icon);
            }

            if (iconHandling == IconHandling.SaveInMemory && iconCache.TryGetValue(resource.ID, out Sprite cachedIcon))
            {
                color    = Color.white;
                isCached = true;
                return(cachedIcon);
            }

            if (resource.Asset is GameObject go)
            {
                if (displayFirstSpriteAsIcon)
                {
                    SpriteRenderer goSprite = go.GetComponentInChildren <SpriteRenderer>();
                    if (goSprite != null)
                    {
                        color = goSprite.color;
                        return(goSprite.sprite);
                    }
                }

                Texture2D icon       = GetIconTexture(go.transform);
                Sprite    spriteIcon = Sprite.Create(icon, new Rect(0, 0, previewSettings.ImageSize.x, previewSettings.ImageSize.y), new Vector2(0.5f, 0.5f));

                if (iconHandling == IconHandling.SaveInMemory)
                {
                    iconCache.Add(resource.ID, spriteIcon);
                }

                color = Color.white;
                return(spriteIcon);
            }

            color = Color.clear;
            return(null);
        }
        public static ILevelEditorObject CreateObject(this ILevelEditorObjectManager x, LevelEditorObjectData data, bool registerUndo = false)
        {
            ILevelEditorResource resource = x.GetResource(data.id);

            if (resource == null)
            {
                return(null);
            }
            ILevelEditorObject obj = x.CreateObject(resource, Vector3.zero, Quaternion.identity, null, data.instanceId, registerUndo);

            if (obj == null)
            {
                return(null);
            }
            obj.MyGameObject.name = data.name;
            obj.MyGameObject.SetActive(data.active);

            return(obj);
        }
 public AssetClickEventArgs(ILevelEditorResource resource, bool isFolder)
 {
     Resource = resource;
     IsFolder = isFolder;
 }
 private Sprite GetIcon(ILevelEditorResource resource, out Color color)
 {
     return(GetIcon(resource, out color, out _));
 }
        private ILevelEditorObject CreateLevelEditorObject(Func <Vector3, Quaternion, Transform, ILevelEditorObject> createObject, ILevelEditorResource resource, uint instanceID, bool registerUndo, Vector3 position, Quaternion rotation, Transform parent)
        {
            if (objectsWithId.ContainsKey(instanceID))
            {
                throw new DuplicateIDException($"There already is an object with the instance ID {instanceID}.");
            }

            LevelEditorObjectEventSpawningEvent args = new LevelEditorObjectEventSpawningEvent(resource);

            OnCreatingObject?.Invoke(this, args);

            if (args.Cancel)
            {
                LevelEditorLogger.Log("CreateObject canceled. Returning null.");
                return(null);
            }

            ILevelEditorObject obj;

            if (poolObjects && pooledObjects.ContainsKey(resource.ID) && pooledObjects[resource.ID].Count > 0)
            {
                obj = pooledObjects[resource.ID].Pop();
                obj.MyGameObject.transform.SetPositionAndRotation(position, rotation);
                obj.MyGameObject.transform.SetParent(parent);
            }
            else
            {
                obj    = createObject.Invoke(position, rotation, parent);
                obj.ID = resource.ID;

                LevelEditorComponentWrapper.AddWrappers(obj.MyGameObject);
                obj.GetExposedComponents();
            }

            obj.MyGameObject.name = resource.Name;
            obj.InstanceID        = instanceID;
            obj.MyGameObject.SetActive(true);

            if (instanceID >= nextInstanceID)
            {
                nextInstanceID = instanceID;
            }

            if (!activeObjects.ContainsKey(resource.ID))
            {
                activeObjects.Add(resource.ID, new List <ILevelEditorObject>());
            }

            if (!objectCount.ContainsKey(resource.ID))
            {
                objectCount.Add(resource.ID, 0);
            }

            activeObjects[resource.ID].Add(obj);
            objectCount[resource.ID]++;
            allObjects.Add(obj);

            obj.OnUnPooled();

            objectsWithId[obj.InstanceID] = obj;

            OnCreatedObject?.Invoke(this, new LevelEditorObjectEvent(obj));

            if (registerUndo && Undo != null)
            {
                undoComp.AddAction(new CreateObjectUndoAction(resource, position, rotation, parent, instanceID, obj));
            }

            return(obj);
        }
 public static ILevelEditorObject CreateObject(this ILevelEditorObjectManager x, ILevelEditorResource resource, Vector3 position, Transform parent, uint instanceID, bool registerUndo = true)
 {
     return(x.CreateObject(resource, position, Quaternion.identity, parent, instanceID, registerUndo));
 }
 public static ILevelEditorObject CreateObject(this ILevelEditorObjectManager x, ILevelEditorResource resource, Vector3 position, bool registerUndo = true)
 {
     return(x.CreateObject(resource, position, Quaternion.identity, null, x.GetNextInstanceID(), registerUndo));
 }
 public static ILevelEditorObject CreateObject(this ILevelEditorObjectManager x, ILevelEditorResource resource, uint instanceId, bool registerUndo = true)
 {
     return(x.CreateObject(resource, Vector3.zero, Quaternion.identity, null, instanceId, registerUndo));
 }
 public static ILevelEditorObject CreateObject(this ILevelEditorObjectManager x, ILevelEditorResource resource, Vector3 position, Quaternion rotation, Transform parent, bool registerUndo = true)
 {
     return(x.CreateObject(resource, position, rotation, parent, x.GetNextInstanceID(), registerUndo));
 }
 public static ILevelEditorObject CreateObject(this ILevelEditorObjectManager x, ILevelEditorResource resource, Vector3 position, Quaternion rotation, uint instanceID, bool registerUndo = true)
 {
     return(x.CreateObject(resource, position, rotation, null, instanceID, registerUndo));
 }
Example #13
0
 public LevelEditorObjectEventSpawningEvent(ILevelEditorResource resource)
 {
     Resource = resource;
 }