Coder Social home page Coder Social logo

advanced-level-editor's People

Contributors

hertzole avatar seannowotny avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

advanced-level-editor's Issues

conside use unitask?

for example , By using UniTask, you can simplify your asynchronous operation of this modal window.

// ShowNotification("Notice!", "All your unsaved changes will be lost.\nAre you sure you want to create a new level?", "Yes", "No", ConfirmNewLevel, CloseNotification);

as unitask can await button's onclick event , and can await more then one button .
so you can do like this (fake logic snippet):

public class Notifacation:MonoBehaviours
{
         static Notifacation instance;
          public async static int ShowNoticeAsync(string message)
          {
                   instance.text.text = message;
                    await instanc.background.fadeinasync(); // by dotween maybe
                    var index=   await Unitask.WhenAny(instance.bt0.onclick,instance.bt1.onclick);
                    instance.gameobject.setactive(false);
                    return index;
          }
}

how to use?

public void OnCreateNewLevelRequred =>_=CreateLevelAsync();  // new level button's onclick callback list add this fuction

private async void CreateLevelAsync()
{
     if(editor.IsDirty)
     {
         var index = await Notifacation.ShowNoticeAsync(“you message here”);
          if(index==0)
          {
            // user say yes.
              CreateNewLevel();
           }
           else if(index==1)
           {
               // user say no. do nothing maybe
            }
     }
}


keyboard can effect both Inputfiled and gizmos at the same time.

Bug description:
keyboard can effect both Inputfiled and gizmos at the same time.

To reproduce:

  1. select one leveleditorobject ,
  2. open save level modal
  3. keyin "w、e、r、t"
  4. then you can see

Expected behavior:
do not effect gizmos when keyin some words.

Screenshots:

FEEDBACK

Desktop and versions:

  • Your OS: Windows
  • Target OS: Windows 64-bit
  • Unity version: Unity 2020.1f1

Additional context:
can alse perform drag when save level modal is display.

Keyboard actions

Is your feature request related to a problem? Please describe.
Add keyboard shortcuts for certain actions, like duplicate, delete, copy, and paste.

Can drag a root gameobject into a child

Bug description:
Can drag a root gameobject into a child

To reproduce:
see gif below

Expected behavior:
nothing would happend when user drag parent into a child transform

Screenshots:
FEEDBACK0

Additional context:
drag a gameobject to empty area should Detach from its parent,see below.
FEEDBACK1

Checking 'Compress' on LevelEditorSaveManager doubles file size

Checking 'Compress' on LevelEditorSaveManager increases file size of saved level (nearly doubled).

Expected behavior:
Checking 'Compress' should reduce file size of saved level.

Screenshots:
Unity_ctIzXwcYNY

Desktop and versions:

  • Your OS: Windows 10 Home 10.0.19044 Build 1944
  • Unity version: 2022.2.8

Exposed value with default null value can cause issues with equals

Bug description:
If an exposed value has no default value or is just null by default, the equals check in SetValue can fail and give a null reference exception.

To reproduce:
Make a new class type variable and don't give it a value, like a string.
Mark it as exposed.
Try to set the value.

Expected behavior:
The value should be set without any issues.

Play mode gives error when play mode object exists without exposed properties

Bug description:
If you have an object without any exposed properties and enter play mode, it will give you a null reference exception when trying to save all the exposed properties.

To reproduce:
Have one object without any exposed properties.
Enter runtime play mode.
Witness error.

Expected behavior:
It should not give an error.

Include manual installation step of message pack .NET plugins in documentation

Is your feature request related to a problem? Please describe.
Installing ALE with the package manager isn't enough.
Aditionally message pack .NET needs to be downloaded from the github page 'actions' section (release unitypackage is broken)
and the Microsoft.NET.StringTools.dll and System.Runtime.CompilerServices.Unsafe.dll need to be extracted into the plugins folder.

Describe the solution you'd like
Including this extra info into the docs would be nice.

Sample Scene has multiple "The referenced script on this Behaviour [...] is missing!" warnings. (Broken)

Bug description:
The sample scene has 86 of these warnings
As a result the sample scene doesn't work properly

To reproduce:
Import sample with package manager
Open "ALE Completed Sample" in Assets/Samples/Advanced Level Editor/0.1.0-preview/Completed Scene
Press Play
Observe warnings in console

Expected behavior:
No warnings
The sample Scene works as expected

Screenshots:
Unity_lD7f5d1Of4

Desktop and versions:

  • Your OS: Windows 10 Home 10.0.19044 Build 1944
  • Unity version: 2022.2.8

Duplicate object

This level editor is awesome, it has very advanced things as script editing but still dosent have something as duplicate objects, hope this is added on future

the build dosent work

basicly i get errors on build with the package, but when i delete the folders i can build again

any help?

ILProcessor Exception

Bug description:
Sometimes this exception is thrown

Processing assembly Library/Bee/artifacts/1900b0aEDbg.dag/Assembly-CSharp.dll, with 138 defines and 350 references
processors: FishNet.CodeGenerating.ILCore.FishNetILPP, Hertzole.ALE.CodeGen.LevelEditorILProcessor, Unity.Entities.CodeGen.EntitiesILPostProcessors, Unity.Jobs.CodeGen.JobsILPostProcessor, zzzUnity.Burst.CodeGen.BurstILPostProcessor
running FishNet.CodeGenerating.ILCore.FishNetILPP
running Hertzole.ALE.CodeGen.LevelEditorILProcessor
Hertzole.ALE.CodeGen.LevelEditorILProcessor: ILPostProcessor has thrown an exception: System.ArgumentException: An item with the same key has already been added. Key: (Hertzole.ALE.ALEProcessedAttribute, .ctor, System.Type[])
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   at Hertzole.ALE.CodeGen.WeaverExtensions.GetConstructor(ModuleDefinition module, Type type, Type[] parameters)
   at Hertzole.ALE.CodeGen.WeaverExtensions.GetConstructor[T](ModuleDefinition module, Type[] parameters)
   at Hertzole.ALE.CodeGen.Weaver.ProcessAssembly(ModuleDefinition module, String[] defines)
   at Hertzole.ALE.CodeGen.LevelEditorILProcessor.Process(ICompiledAssembly compiledAssembly)
   at Unity.ILPP.Runner.PostProcessingPipeline.PostProcessAssemblyAsync(PostProcessAssemblyRequest request, Action`2 progressSink)
PostProcessing failed: System.ArgumentException: An item with the same key has already been added. Key: (Hertzole.ALE.ALEProcessedAttribute, .ctor, System.Type[])
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   at Hertzole.ALE.CodeGen.WeaverExtensions.GetConstructor(ModuleDefinition module, Type type, Type[] parameters)
   at Hertzole.ALE.CodeGen.WeaverExtensions.GetConstructor[T](ModuleDefinition module, Type[] parameters)
   at Hertzole.ALE.CodeGen.Weaver.ProcessAssembly(ModuleDefinition module, String[] defines)
   at Hertzole.ALE.CodeGen.LevelEditorILProcessor.Process(ICompiledAssembly compiledAssembly)
   at Unity.ILPP.Runner.PostProcessingPipeline.PostProcessAssemblyAsync(PostProcessAssemblyRequest request, Action`2 progressSink)
   at Unity.ILPP.Runner.PostProcessingService.PostProcessAssembly(PostProcessAssemblyRequest request, IServerStreamWriter`1 responseStream, ServerCallContext context)
Unhandled Exception: System.InvalidOperationException: Post processing failed
   at Unity.ILPP.Trigger.TriggerApp.<ProcessArgumentsAsync>d__1.MoveNext() + 0xf74
--- End of stack trace from previous location ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x20
   at Unity.ILPP.Trigger.TriggerApp.<ProcessArgumentsAsync>d__1.MoveNext() + 0x1149
--- End of stack trace from previous location ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x20
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0xb6
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x42
   at Unity.ILPP.Trigger.TriggerApp.<RunAsync>d__0.MoveNext() + 0xc7
--- End of stack trace from previous location ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x20
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0xb6
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x42
   at Program.<<Main>$>d__0.MoveNext() + 0x1a3
--- End of stack trace from previous location ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x20
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0xb6
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x42
   at Program.<Main>(String[]) + 0x20
   at Unity.ILPP.Trigger!<BaseAddress>+0x47890b

I believe that in ModuleExtensions the method on line 194 is the culprit.

 public static MethodReference GetConstructor(this ModuleDefinition module, Type type, params Type[] parameters)
		{
			if (cachedParameterMethods.TryGetValue((type, ".ctor", parameters), out var cachedMethod))
			{
			 	return cachedMethod;
			}
			
			MethodReference result = module.ImportReference(type.GetConstructor(parameters));

			if (result == null)
			{
				throw new ArgumentException($"There's no constructor with those parameters in type {type.FullName}");
			}
			
			cachedParameterMethods.Add((type, ".ctor", parameters), result);

			return result;
		}

As far as I understand, when cachedParamterMethods.Add is called, the key is already present in the dictionary, even though that should be impossible in normal circumstances. Could this have something to do with multithreading?

I pushed a fix to my fork of ALE. If it works as intended I'll make a PR.

Desktop and versions:

  • Your OS: Windows 10 Home 10.0.19044 Build 1944
  • Unity version: 2022.2.8

Set decimals in inspector

Ive tried lots of things, but didnt work, whenever i try to set something with decimals in the inspector it eliminates the commas and makes seting position very complicated

Custom data types are not automatically registered as a valid type

Bug description:
When doing customData.AddCustomData, the type of said data is not registered as a valid type. This results in the type not being able to be serialized at all unless you manually add it.

To reproduce:
Make a new type and don't use it anywhere else but in custom data.
Try to serialize.
It should now say it hasn't been registered.

Expected behavior:
It should be registered and can be saved without issues.

Is there a way to determine the currently loaded level?

What I want to do:
I would like to know what level is currently loaded.

What I've tried:
Looked through the code but couldn't find anything.

How it could be improved:
A field that has a reference to the currently loaded level.

Rename ILevelEditorSaveManager->GetLevelData to GenerateLevelDataFromScenery

Is your feature request related to a problem? Please describe.
As far as I can tell this method's common implementation is the generation of new LevelEdtorSaveData and it doesn't actually get an already existing instance of LevelEditorSaveData.

Describe the solution you'd like
Rename to GenerateLevelDataFromScenery

Describe alternatives you've considered
Idk, I'm sure there are better names than "[...]FromScenery"

Additional context
At first, I was incorrectly using this method, because I assumed that it would return already present LevelEditorSaveData.

Implement undo/redo

Fully implement a undo/redo system.

Todo list:

  • Create object
  • Delete object
  • Delete multiple objects
  • Selection
  • Set value
  • Reparent

Name in hierarchy doesn't update

Bug description:
When changing the name of an object in the inspector, the name doesn't update in the hierarchy.

To reproduce:
Rename an object and observe how it wasn't updated in the hierarchy.

Expected behavior:
The name should be updated to the new name in the hierarchy.

Clicking in the Hierarchy on the empty space should unselect your current selection.

Is your feature request related to a problem? Please describe.
When clicking on empty space in the Hierarchy nothing happens and selection stays. Which feels like a bad user experiance.

Describe the solution you'd like
When clicking on empty space in the Hierarchy it should unselect whatever is currently selected.

Additional context
Screenshot of how it would work:
lyl1MGgXJk

Add a way to delete levels from load level dialog

Is your feature request related to a problem? Please describe.
As the title says, allow the user to delete levels from the load level dialog. There should be a confirmation before deleting the level.

Some types can not be serialized in IL2CPP

Bug description:
Some types, like arrays and enums, can not be serialized when building to IL2CPP.

Expected behavior:
It should serialize.

Additional context:
Can be solved by implementing a resolver that points the types to an ArrayFormatter, GenericEnumFormatter, etc.

Ability to disable reparent/children for a object.

Is your feature request related to a problem? Please describe.
If you want an object to not have the ability to have children or be a child. That is not possible.

Describe the solution you'd like
Ability to disable reparent/children for an object.

ManipulationHandle is not work after change level.

Bug description:
change one level from another ,when there has same type model ,say "cube" maybe,then after level changed the cube can not select from free space.

To reproduce:

  1. create a level with just a cube 、a spownpoint and one plane ,save it ,named as “one”
  2. do not click "Save Level" empty our workbench.
  3. then create another cube save it as “two”
  4. after that, reload the level named "one" by "Load Level".
  5. and then , you will find that you can not select any gameobject now.

Expected behavior:
no matter how many times change the level. contents inside the level should be selected.
but the gameobject appeared before will not be select in the other level.

Screenshots:

FEEDBACK2

Desktop and versions:

  • Your OS: Windows 10
  • Target OS: Windows 64-bit
  • Unity version: [e.g. Unity 2020.3.30f1c1]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.