Author SHA1 Message Date
Simon Lübeß 7fd36de77a Use String as ID, working visible toggle 2024-11-19 22:23:40 +01:00
Simon Lübeß d259ce5dfa Make text boxes slightly less ugly 2024-11-17 20:25:47 +01:00
Simon Lübeß e1e91089ca Filter entities 2024-11-17 19:57:31 +01:00
Simon Lübeß 080861ed4a Use Attributes for JS<->Beef binding 2024-11-17 19:09:52 +01:00
Simon Lübeß 28c2922b89 Basic Entity hierarchy sync 2024-11-15 13:34:54 +01:00
Simon Lübeß d2efc6c5c4 Only rebuild UI when files changed 2024-11-06 22:56:25 +01:00
Simon Lübeß df125f4e57 Added UI Project to this repository, small UI fixes 2024-11-05 22:21:47 +01:00
Simon Lübeß 4957f3c033 Added ToString-Method for Vectors 2024-11-03 19:09:28 +01:00
Simon Lübeß 80048951f8 Fixed title bar hittest and changing cursor 2024-11-03 19:09:18 +01:00
Simon Lübeß 4a18d3150f Added Blit-Class 2024-11-03 14:44:20 +01:00
Simon Lübeß 139cd6e6e5 Allow (basic) SetData with TextureSliceData
fixes wrong stride when first creating UL window
2024-11-03 14:35:15 +01:00
Simon Lübeß 3555198ffc Start of custom title, call beef delegates from JS 2024-11-02 00:56:45 +01:00
Simon Lübeß 61bc3ed0bb Add more cursors 2024-10-31 00:03:17 +01:00
Simon Lübeß 2e60f13c02 Updated directx-beef 2024-10-30 21:22:13 +01:00
Simon Lübeß 7506b8c118 Allow changing the cursor, moved Window to GlitchyEngine.UI 2024-10-30 21:20:57 +01:00
Simon Lübeß 1818593394 React test 2024-10-05 18:21:04 +02:00
Simon Lübeß 4f45da02bf Bootstrap test 2024-10-02 18:21:57 +02:00
Simon Lübeß 21ddf69d5f Start of test window using ultralight 2024-09-15 22:57:20 +02:00
Simon Lübeß 77c74f4cc3 Separate Ultralight Layer and Window 2024-09-15 22:17:31 +02:00
Simon Lübeß 458b86c29b Allow not setting icon 2024-09-15 21:46:16 +02:00
Simon Lübeß 849615a199 Cleanup 2024-09-15 21:44:12 +02:00
Simon Lübeß 143b4bad9e Copy UI to backbuffer, resize, stuff 2024-09-15 21:40:10 +02:00
Simon Lübeß 4315c6c5ec Fixed swapchain with zero size (auto detect resolution) 2024-09-15 21:39:46 +02:00
Simon Lübeß 90b416f7fa Use fork of ultralight beef 2024-09-15 18:50:22 +02:00
Simon Lübeß 4d7863dcb3 Better WindowClass handling, Added Clipboard 2024-09-15 18:45:30 +02:00
Simon Lübeß 2e3c0d0aa4 Basic multiple windows working 2024-09-10 23:02:34 +02:00
Simon Lübeß 352073869f Separate GraphicsContext from Window, prepare for windows and swap chain for multi window 2024-09-10 19:07:58 +02:00
Simon Lübeß 65992126c0 Ultralight game loop integration 2024-09-10 18:57:39 +02:00
Simon Lübeß c717da0080 Update to ultralight 1.3.0 2024-09-01 22:32:48 +02:00
Simon Lübeß 0a11102c3f Added Ultralight 1.2 and Sample 2024-09-01 12:34:13 +02:00
Simon Lübeß f3e68bd8d8 Remove obsolete EffectLibrary 2024-08-18 22:54:46 +02:00
Simon Lübeß c908f5a0e7 A little bit better number formatting 2024-06-27 20:50:26 +02:00
Simon Lübeß b96f195afb Clear log on play option 2024-06-23 18:58:40 +02:00
Simon Lübeß bbbbe833df Changed number format in component editor 2024-06-23 18:42:31 +02:00
Simon Lübeß c6eb705977 Drag component window 2024-06-23 18:31:53 +02:00
Simon Lübeß 454ec59951 Use icon buttons for save component and context menu, right click context menu 2024-06-23 17:15:21 +02:00
Simon Lübeß 1b130a4bce Basic save component button 2024-06-23 00:27:20 +02:00
Simon Lübeß cd434d64f9 Better asset processor selection, process subassets 2024-06-13 15:44:27 +02:00
Simon Lübeß 36e98311c6 TextureAsset properties, start of better asset pipeline detection 2024-06-12 16:51:52 +02:00
Simon Lübeß b3dac4a338 Show name of selected object in property window title 2024-06-09 17:12:56 +02:00
Simon Lübeß c8be6eca5c Show error in Properties window, deselect invalid objects in Inspector window 2024-06-09 17:12:42 +02:00
Simon Lübeß 2d5e6a9278 Properties window 2024-06-09 01:44:58 +02:00
Simon Lübeß f61d1bc644 Inspector window to combine asset properties and components editor 2024-06-09 01:16:21 +02:00
Simon Lübeß ace51b396d Fixed crash when assets gets queued for reloading twice 2024-06-09 00:29:15 +02:00
Simon Lübeß 86afa234e7 Texture processor cleanup, new asset properties config UI 2024-06-08 17:03:21 +02:00
Simon Lübeß 8972e607fd Asset Placeholders 2024-06-05 13:54:46 +02:00
Simon Lübeß ff0ac74d12 Moved texture loader from editor to engine 2024-06-03 00:59:01 +02:00
Simon Lübeß 1b38a41dfc Fix dds and texture cube import 2024-06-03 00:46:55 +02:00
Simon Lübeß 108b31399a Use asset pipeline for blocking asset loading, remove old texture loader 2024-06-03 00:46:23 +02:00
Simon Lübeß b2806d9460 Reprocess, load and hot swap changed assets using new asset pipeline 2024-06-02 00:39:22 +02:00
Simon Lübeß 9e7e7f0d76 Asset (de)compression 2024-05-20 16:10:55 +02:00
Simon Lübeß ffe8954b8d Load pngs from cache 2024-05-20 13:35:37 +02:00
Simon Lübeß f0fc67db35 Removed compiler warnings for Runtime.NotImplemented 2024-05-20 13:35:00 +02:00
Simon Lübeß e5139ee3e8 Fixed DepthStencilTarget 2024-05-20 13:34:41 +02:00
Simon Lübeß 1a43ff2971 Convert texture asset and save to cache 2024-05-20 01:08:18 +02:00
Simon Lübeß 2725801db8 Start of asset management 2.0 2024-05-19 01:35:52 +02:00
Simon Lübeß 989ad4a5bd Use dedicated AssetIdentifier instead of string 2024-05-19 01:06:02 +02:00
Simon Lübeß 1fc3b70a50 Fixed memory leak in TextRendererComponent 2024-05-12 19:32:31 +02:00
Simon Lübeß 8c4880f92f Fixed AddComponent for components with Copy function 2024-05-12 19:32:06 +02:00
Simon Lübeß 045281e881 Updated submodule
box2D, freetype and imgui
2024-04-20 22:30:17 +02:00
Simon Lübeß bb7bc41e62 Kind of prevent creating invalid colliders sometimes 2024-04-15 12:35:56 +02:00
Simon Lübeß d1fc33cb6d ScriptCore: Marked EditorFlags as falgs 2024-04-15 00:02:08 +02:00
Simon Lübeß b65bdb84ae ScriptCore: Added Math.remap 2024-04-14 23:57:12 +02:00
Simon Lübeß f30bcb2f89 Slightly improved text renderer 2024-04-14 23:56:09 +02:00
Simon Lübeß 4d0617aff7 Fixed text box losing the last letter 2024-04-13 23:45:04 +02:00
Simon Lübeß a3de5ddc9c Serialization: Support sharing object references 2024-04-13 00:50:09 +02:00
Simon Lübeß 949ab4ebb0 ScriptEngine: Serialize static fields 2024-04-13 00:10:35 +02:00
Simon Lübeß df13aa8596 Refactored Scene serialization 2024-04-12 19:36:01 +02:00
Simon Lübeß d81471419d Refactored script instance serialization and now the refactoring is finally finished... 2024-04-10 14:42:07 +02:00
Simon Lübeß 95262d67d7 Fixed anoying access violation in font desctructor by leaking memory 🤷 2024-04-10 13:51:15 +02:00
Simon Lübeß 9640b153f6 Fixed compile error in some method I'm not sure why, but it wasn't used 🤷 2024-04-10 13:50:40 +02:00
Simon Lübeß f05cf721e8 Almost done refactoring ScriptEngine 2024-04-10 13:50:12 +02:00
Simon Lübeß 777f52ab49 ScriptEngine refactoring 2024-03-31 12:36:22 +02:00
Simon Lübeß abcacc84a9 Refactored ScriptEngine 2024-03-31 11:55:39 +02:00
Simon Lübeß 1279dc0a66 Implemented Copy for physics components 2024-03-28 22:40:53 +01:00
Simon Lübeß 9cee44f4d2 ScriptCore: Fixed error when deserializing list of strings 2024-03-22 10:15:24 +01:00
Simon Lübeß c6c47d0c0e ScriptCore: Implemented Pick-Method and ThreadSafeRandom 2024-03-22 10:14:38 +01:00
Simon Lübeß f8b6c50cda ScriptCore: Type.GetSimpleName and GetPrettyName 2024-03-22 10:13:16 +01:00
Simon Lübeß 94fc620662 EntityEditor: Refactored type dropdown 2024-03-22 10:12:55 +01:00
Simon Lübeß d357f44a39 Jump to correct line when opening script file from log 2024-03-22 10:05:00 +01:00
Simon Lübeß da59fd87f2 Removed sandbox project from workspace 2024-03-17 20:30:51 +01:00
Simon Lübeß d28426478b Font renderer improvements + component for scripting 2024-03-17 20:29:52 +01:00
Simon Lübeß 930d289565 Improved copying of components 2024-03-17 20:28:41 +01:00
Simon Lübeß a2c7bf7d06 Ensure generating unique Entity IDs 2024-03-17 20:25:38 +01:00
Simon Lübeß 84204aed46 No longer crash when selected entity disappears 2024-03-17 20:10:48 +01:00
Simon Lübeß 2dd826fc36 Made entity hierarchy more compact 2024-03-17 18:08:39 +01:00
Simon Lübeß 96609a6c31 FontRenderer: Basic Rich Text processing and lazy text building 2024-03-16 23:35:12 +01:00
Simon Lübeß f9ea705e77 Enum extension for SetFlag and ClearFlag 2024-03-16 23:34:10 +01:00
Simon Lübeß e703452b94 Start of text renderer component
- UC, LC, IC, RC tags
2024-03-14 22:17:57 +01:00
Simon Lübeß a87820c7da Use text height for entity visibility toggle 2024-03-10 15:21:25 +01:00
Simon Lübeß 27c433aba2 Moved play buttons into main menu 2024-03-10 15:16:55 +01:00
Simon Lübeß fc475eb468 Save and copy editor flags with scene. Replaced EditorComponent with DontSafe-flag 2024-03-10 13:11:53 +01:00
Simon Lübeß 72bd152999 Refactor 2024-03-10 13:01:05 +01:00
Simon Lübeß 8d92822845 Added EditorFlags: Hide entities in hierarchy and editor scene
- Also some Style changes
2024-03-10 12:21:20 +01:00
Simon Lübeß 5ca5404f72 Moved template copying from EditorLayer to Project 2024-03-09 20:53:27 +01:00
Simon Lübeß 9ea27a64e8 Modified template and improved template creation 2024-03-09 20:35:21 +01:00
Simon Lübeß 4e9a6b54f3 Friendship ended with VISUAL STUDIO, Now RIDER is my best friend 2024-03-09 20:33:26 +01:00
Simon Lübeß 09624e4e59 ScriptCore: Added NumberFormatAttribute 2024-03-09 01:00:59 +01:00
Simon Lübeß 5dbe1d7e50 ScriptCore: Color structs 2024-03-02 14:19:24 +01:00
Simon Lübeß ba246dd638 ScriptCore: Fixed some nullable warnings 2024-03-02 14:19:02 +01:00
Simon Lübeß caaa7646ef ScriptCore: matrix generator 2024-03-02 13:54:34 +01:00
Simon Lübeß 0a8d83ffb6 Changed Transform Update order 2024-02-26 13:47:29 +01:00
Simon Lübeß 19ee9bee89 Tooltips for Script Editor 2024-02-26 13:46:32 +01:00
Simon Lübeß aa29207e72 Show ImGui DemoWindow in EditorLayer 2024-02-26 13:40:00 +01:00
Simon Lübeß 0a822dcd79 ScriptCore: Added Transform.WorldTransform 2024-02-19 21:39:07 +01:00
Simon Lübeß 1ca9746921 Fixed crash in Logger 2024-02-19 21:38:35 +01:00
Simon Lübeß f5f32eecb2 Vector documentation 2024-02-19 18:17:45 +01:00
Simon Lübeß b84ce5e482 File filter for open and save scene 2024-02-18 00:51:53 +01:00
Simon Lübeß 1340b06af5 Basic asset thumbnails 2024-02-18 00:48:09 +01:00
Simon Lübeß 3b584f2c78 Editor: Show name of script class in script component header 2024-02-17 23:43:39 +01:00
Simon Lübeß 886c4a71dd Editor: Changed color for ImGui MenuBars 2024-02-17 23:32:47 +01:00
Simon Lübeß 86b09c173b Print pretty names and support LabelAttribute for enum cases 2024-02-17 23:32:21 +01:00
Simon Lübeß a07ea3276c ScriptCore: Added LabelAttribute 2024-02-17 23:06:55 +01:00
Simon Lübeß 3c0302b06c Editor: Show pretty script field names 2024-02-17 22:53:58 +01:00
Simon Lübeß 59aaec572b Render 2D with depth, reverse depth of camera projection
dirty fix in Renderer...
2024-02-16 17:31:32 +01:00
Simon Lübeß 0321bd91c4 3D Renderer: inverted depth buffer 2024-02-16 16:14:14 +01:00
Simon Lübeß 2ab4a7d70b Set debug names for directx textures and views in render target group 2024-02-16 16:07:10 +01:00
Simon Lübeß aba7448fe6 Improved collapsing region for PolygonCollider2D vertices 2024-01-30 23:57:07 +01:00
Simon Lübeß 4830fd289e ComponentWindow finalized
ScriptCore:
- ActivatorExtension: Fixed creation of default value or null class
- ImGuiExtension: added DragUIntX / DoubleX and CheckboxX
2024-01-30 23:40:58 +01:00
Simon Lübeß 09f7dfce90 FloatX to Numerics.VectorX converision operators 2024-01-30 23:36:35 +01:00
Simon Lübeß f86d1aa79e Improved UI of component edit window
- Also fixed some errors in list and dictionary editors
2024-01-29 19:46:52 +01:00
Simon Lübeß bae8b84d35 ScriptCore: Added some Random functions 2024-01-27 19:52:42 +01:00
Simon Lübeß 394ec2b9b2 ScriptCore: Added TryGetComponent for entities
also added NullableAttributes for better static null analysis
2024-01-27 19:47:30 +01:00
Simon Lübeß 8ff35d3967 ScriptCore: Added more properties to components
- Added CircleRenderer
- Transform: Added Rotation, RotationEuler, RotationAxisAngle and Scale
- RigidBody: Added BodyType and GravityScale
- Added ColorRGBA
2024-01-27 19:46:37 +01:00
Simon Lübeß bc535ddc26 Get/Set FixedRotation in play mode 2024-01-26 12:51:29 +01:00
Simon Lübeß d4d6cc8e38 Fixed OnCollisionEnter/Leave callbacks 2024-01-26 12:41:37 +01:00
Simon Lübeß 2399196a3a Fixed Collision2D using wrong entities for rigidbodies 2024-01-25 23:36:29 +01:00
Simon Lübeß 4538c38fd7 ScriptGlue error handling 2024-01-25 23:35:56 +01:00
Simon Lübeß 525bb050ef ScriptEngine cleanup 2024-01-25 23:35:40 +01:00
Simon Lübeß d8e4e8d028 ScriptCore: Added Parent property to Transform 2024-01-25 22:29:11 +01:00
Simon Lübeß 3815b70f06 Content Browser: Context menu item to copy path and identifier of assets 2024-01-25 22:28:02 +01:00
Simon Lübeß 7026be1c90 2D Physics and script improvements
- fixed time step
- Fixed crash caused by physics script callback being registered in simulation mode
- Moved 2D Physics config to file
- Finally gave up on the attempt to keep X and Y rotation when applying new Z-rotation from 2D rigidbody to transform and now I can sleep well
- Streamlined starting and stopping of scenes
- Scripts: execute all inits and OnCreates before OnUpdate
2024-01-22 23:19:55 +01:00
Simon Lübeß 7f40ae038a Removed Atan2 from script glue 2024-01-20 21:24:43 +01:00
Simon Lübeß 02be6d8eb7 Log: Also log filename and line number of caller 2024-01-20 21:23:34 +01:00
Simon Lübeß 55eef017e7 AssetBrowser: Bad way to open scripts in Visual Studio 2024-01-20 21:23:01 +01:00
Simon Lübeß 04a0cecf3c Fixed script play mode info 2024-01-18 21:41:18 +01:00
Simon Lübeß c906fc9667 Properly destroy script instances
Now without memory leaks!
2024-01-18 21:29:11 +01:00
Simon Lübeß 9befd9e910 ScriptCore: Added trigonometric functions to Math
I don't know why it claims I changed the entire file...
2024-01-16 13:32:46 +01:00
Simon Lübeß 60b45828c2 ScriptGlue: Added Camera component and throwing mono exceptions from beef 2024-01-15 01:22:52 +01:00
Simon Lübeß ceb4241216 ScriptGlue: Added Log.Exception
- Also pushed missing List Editor fix
2024-01-15 01:21:56 +01:00
Simon Lübeß 49db3a28c8 Fixed deserialization of generic types 2024-01-15 01:18:13 +01:00
Simon Lübeß 19d70c94e6 Added UUID.Zero 2024-01-15 01:16:30 +01:00
Simon Lübeß ba68eb7428 Editor: Show name of open scene in window title 2024-01-12 15:41:56 +01:00
Simon Lübeß 827f3bb564 EntityHierarchyWindow: Dragging entites no longer selects them 2024-01-12 15:32:21 +01:00
Simon Lübeß 6c910ab03b Editor: Prevent saving while in not in edit mode 2024-01-12 00:31:10 +01:00
Simon Lübeß 55b4be05c2 ScriptCore: Properly use nullable 2024-01-12 00:17:40 +01:00
Simon Lübeß 3d0c010139 EntityHierarchyWindow: Fixed right click deselecting entities 2024-01-11 23:36:00 +01:00
Simon Lübeß 91cef7ad4b Added checkbox to enable and disable polygon collider vertex handles 2024-01-11 22:55:40 +01:00
Simon Lübeß 7cdc398494 Added basic decimal editor 2024-01-11 22:55:18 +01:00
Simon Lübeß 99a12a118c Fixed Script data for entity copying 2024-01-09 13:41:54 +01:00
Simon Lübeß b93e081e0a Fixed URL of Submodule Box2D 2024-01-08 14:37:14 +01:00
Simon Lübeß 86139f870c ScriptCore: Cleanup and refactoring
A bit of nullable stuff
2024-01-07 23:56:44 +01:00
Simon Lübeß bfc9d4a0a5 Save and Load script data from files 2024-01-07 18:35:33 +01:00
Simon Lübeß a302a26f80 Moved SerializationType and Object to separate files 2024-01-06 13:27:24 +01:00
Simon Lübeß 9a09a1d878 ScriptCore: Escape sequence for char editor 2024-01-06 13:17:23 +01:00
Simon Lübeß 31e7edcc9c ScriptCore: Open newly created dictionary entry 2024-01-06 13:16:36 +01:00
Simon Lübeß 5d9973a791 ScriptCore: Add Entry for dictionaries 2024-01-06 13:12:50 +01:00
Simon Lübeß 13baf2f4bc ScriptCore: Show Custom Editor
Implemented basic Dictionary editor
2024-01-05 15:46:54 +01:00
Simon Lübeß 9da675e4bb Use delegates for custom serializers 2024-01-05 14:34:11 +01:00
Simon Lübeß a5e767df01 Enabled nullable for ScriptCore 2024-01-05 14:33:50 +01:00
Simon Lübeß 3de861110e Custom Serializers
- Dictionary serializer
2024-01-05 13:37:58 +01:00
Simon Lübeß 16f4dd349b Serialize and Deserialize Lists and 1D-Arrays 2024-01-01 13:03:34 +01:00
Simon Lübeß c111fff32b ScriptCore: Added extension Type.IsAssignableTo 2024-01-01 13:02:50 +01:00
Simon Lübeß 19fb969718 ScriptCore: Added custom debug display for UUID 2024-01-01 13:02:34 +01:00
Simon Lübeß e5f2da66a9 ScriptCore Fixed CreateInstanceSafe(Type type, params object[] args) 2024-01-01 13:02:15 +01:00
Simon Lübeß 418aa71241 ScriptCore: Fixed adding element to arrays 2023-12-31 17:22:04 +01:00
Simon Lübeß beb696ee5d Added basic ArrayEditor 2023-12-31 17:10:17 +01:00
Simon Lübeß ed3884e30e ScriptCore: Made creation of class instance safer 2023-12-31 17:05:27 +01:00
Simon Lübeß bd72a67d29 Fixed List add/remove element buttons not working 2023-12-31 17:01:23 +01:00
Simon Lübeß 9e222daeb2 ScriptCore: Fixed deserialization of null values 2023-12-28 23:05:49 +01:00
Simon Lübeß 34ddfc11f7 Update Submodule DirectX 2023-12-28 22:56:29 +01:00
Simon Lübeß 5051829753 Split up, clean up and internalize EntitySerializer 2023-12-28 22:50:24 +01:00
Simon Lübeß 2fc45a50e0 ScriptCore: Fixed component and entity reference serialization 2023-12-28 22:40:59 +01:00
Simon Lübeß 2e82f24fd7 Initialize ScriptGlue whenever ScriptEngine loads assemblies 2023-12-26 02:01:14 +01:00
Simon Lübeß a4c311c2e4 Implemented Entity and Component Drop-Targets and added Name property for entities
- Also fixed non generic GetComponent
- Use UUID as Drag-Drop value for entities
- Removed unused methods from ComponentEditWindow
- Started a marginally type-safe version of ImGui.Payload
2023-12-26 02:00:44 +01:00
Simon Lübeß 4fa6384544 Fixed ScriptCore post build script to enable hot reloading for ScriptCore 2023-12-26 00:42:09 +01:00
Simon Lübeß 2f86f751a4 Serialize Enums (and maybe Entitiy/Component refs) 2023-12-25 21:46:19 +01:00
Simon Lübeß 215e1f6500 Catch Activator exceptions 2023-12-25 20:25:55 +01:00
Simon Lübeß acefbb58bd Serialize/Deserialize simple classes 2023-12-25 20:08:48 +01:00
Simon Lübeß 7bd69c162f Fixed serialization of null-strings 2023-12-25 18:58:06 +01:00
Simon Lübeß 20814a61b6 Fixed memory leak in AssetFile 2023-12-25 16:30:58 +01:00
Simon Lübeß abb119589c Reload scripts in Play Mode!!!
- Dont serialize static fields
- Added some profiling to ScriptEngine
- Removed superseded ScriptFieldMaps
2023-12-24 01:33:48 +01:00
Simon Lübeß d0f0a34247 Start of Script Instance deserialization
- Also deserialize when stopping the game to restore pre play state
- Fixed ancient bug where ClearDictionaryAndDeleteKeys falsly deletes the dictionary
- Added ClearDictionaryAndDeleteValues helper mixin
2023-12-24 01:30:01 +01:00
Simon Lübeß c9116812b4 Serialize Data 2023-12-23 00:44:04 +01:00
Simon Lübeß a6f68a59d6 Moved basic ScriptEngine classes into separate object 2023-12-22 19:11:40 +01:00
Simon Lübeß 424e995fae ScriptCore: Made trivial pointer stuff complicated to fix some warnings 2023-12-18 01:44:44 +01:00
Simon Lübeß 4b30fc1a69 ScriptCore: Fixed nullable warning 2023-12-18 01:43:23 +01:00
Simon Lübeß 203e8c4ddb ScriptCore: Generate GetHashCode for Vectors
Fixes warnings
2023-12-18 01:43:02 +01:00
Simon Lübeß 945a0e5603 Fixed Half 2023-12-17 19:23:19 +01:00
Simon Lübeß 3a3778651d ScriptCore: Moved Physics2D into Physics namespace 2023-12-17 18:47:29 +01:00
Simon Lübeß 6a87d1ac09 ScriptCore: Use engine implementation of half to no longer rely on Half-Package 2023-12-17 18:47:07 +01:00
Simon Lübeß 64f7896c15 Updated ImGui to 1.90.1 2023-12-17 02:22:04 +01:00
Simon Lübeß 89e4e4ef17 Start of entity serialization 2023-12-15 14:53:31 +01:00
Simon Lübeß b884ee8303 Moved Components to their respective namespaces 2023-12-15 14:53:10 +01:00
Simon Lübeß 66281ebddb Added icon for editor 2023-12-15 14:52:19 +01:00
Simon Lübeß a129156641 Documentation 2023-12-13 14:45:33 +01:00
Simon Lübeß ed756f5847 Fixed scripts OnUpdate not being called in play mode 2023-12-13 14:01:23 +01:00
Simon Lübeß 4a2635a8c3 ScriptCore: Moved Component + Doc 2023-12-13 14:00:27 +01:00
Simon Lübeß 105ff57206 Merge branch 'main' of github.com:aharabada/glitchy-engine-beef 2023-12-12 13:38:47 +01:00
Simon Lübeß e69e1b5526 Show Buttons in entity editor
- ScriptEngine: Added HasCustomAttribute- extension method
- ScriptEngine: Added Application class
2023-12-12 13:38:29 +01:00
aharabada 4ed3dcf96f Update README.md 2023-12-12 02:34:06 +01:00
Simon Lübeß 13cb043cf4 Removed TODOs related to native script component (which was removed) 2023-12-10 12:52:49 +01:00
Simon Lübeß bedbc696c3 ScriptCore: Added UUID.CreateNew 2023-12-10 12:50:11 +01:00
Simon Lübeß 1238a43896 Start and Stop script runtime for editor scene 2023-12-03 14:06:40 +01:00
Simon Lübeß aaa48158c3 Removed script editor from beef side 2023-12-02 00:40:17 +01:00
Simon Lübeß 5852e11ccb Start of edit mode scripts
- Initialize script instances in edit mode
- Run OnCreate and OnUpdate for Entities with RunInEditMode-Attribute
2023-12-02 00:28:04 +01:00
Simon Lübeß 23b38a7a31 Removed references to nonexistent files/folders 2023-12-01 23:52:16 +01:00
Simon Lübeß dc551fb85c Remove native script component 2023-12-01 23:51:53 +01:00
Simon Lübeß df6b522741 Improved postbuild script for ScriptCore: Automatically create target directory 2023-12-01 23:45:02 +01:00
Simon Lübeß 8f93e1e0e5 Ignore ScriptCore build output 2023-12-01 23:22:41 +01:00
Simon Lübeß 48cdcee8a8 Fixed null pointer exception in ShowScriptEditor when script component has no instance 2023-12-01 23:14:51 +01:00
Simon Lübeß 270e34b983 Fixed list of struct drag and drop, added context menu to remove list entries 2023-12-01 23:14:19 +01:00
Simon Lübeß df446188b6 Add support for strings and BoolX in script engine, show strings as textfields in editor 2023-12-01 23:13:30 +01:00
Simon Lübeß b68bad5bda Keep Entities selected when switching between Play- and Edit-Mode
- Fixed the check whether all selected entities have the same parent
2023-11-29 14:16:36 +01:00
Simon Lübeß 0257b93c7b Move List elements via Drag and Drop 2023-11-22 19:28:02 +01:00
Simon Lübeß 872a400966 Scripts: More range attributes for fields
- Added Minimum- and Maximum attributes
- Documentation for Min, Max and Range
- EntityEditor: Refactoring + Range Attributes
2023-11-22 01:59:57 +01:00
Simon Lübeß ffe86a18cf Scripts: First implementation of Range- and Readonly-Attributes + added support for all primitive types 2023-11-22 00:57:18 +01:00
Simon Lübeß 881bb8ee51 Scriptengine: Support char-type 2023-11-22 00:55:07 +01:00
Simon Lübeß 05350d4768 Renamed EditfloatX to EditFloatX 2023-11-22 00:54:43 +01:00
Simon Lübeß 8127884b50 Improved List editor and added Enum editor, fixed changed fields not updating 2023-11-18 18:06:13 +01:00
Simon Lübeß 18867fd208 Scripting: VectorGeneratorgenerate Equals methods 2023-11-18 18:03:14 +01:00
Simon Lübeß 849a8582f6 Scripting: Added Log functions to print objects 2023-11-18 18:02:37 +01:00
Simon Lübeß f28eabf807 Fixed mono not finding assemblies like linq, etc. 2023-11-18 17:56:09 +01:00
Simon Lübeß 060d1ae6fc Scripting: Implemented Equals and GetHashCode for UUID 2023-11-18 16:45:46 +01:00
Simon Lübeß 24365ec477 Call correct UUID constructor for Entities, fixed crash and weirdness when Scripts have fields that are classes
Let's not talk about the fact that this was a one line fix all along...
2023-11-18 02:05:55 +01:00
Simon Lübeß 214889470f Scene: Set ScriptEngine Context (Scene) when copying entities
Fixes invalid access when constructors throw exceptions
2023-11-18 02:00:11 +01:00
Simon Lübeß 2a4eac814b ScriptGlue: Changed signature of Entity_GetScriptInstance 2023-11-18 01:59:10 +01:00
Simon Lübeß 1a92f4aec1 Started reworking entity initialisation 2023-11-18 01:04:12 +01:00
Simon Lübeß 02a2ccb6f9 Copy ScriptCore dependencies to output, EntityEditor: Start of lists 2023-11-16 18:32:13 +01:00
Simon Lübeß d2972d1b03 Updated submodule "gltf" 2023-11-15 16:25:12 +01:00
Simon Lübeß d718c6625d Allow separators in "Create new Asset" dropdown (also changed text to just "Create new") 2023-11-15 16:23:22 +01:00
Simon Lübeß 6f1467046d Tried EntityEditor in C# 2023-11-10 12:41:58 +01:00
Simon Lübeß b41eaad788 Disposable Rigidbody2D 2023-10-28 21:48:56 +02:00
Simon Lübeß 38fc1f63b3 Small script engine improvements
- Fixed script class name not visible in Component Editor
- Retain user assembly file system watcher (fixed deletion while handling events)
- Fixed crash when a scritp constains a List or Array (by ignoring them for now)
- Fixed Typo in Genericinst
- Scene: Invoke OnCreate for copied entity scripts
2023-10-28 21:48:43 +02:00
Simon Lübeß 909012f518 Moved Script Solution (.sln) to project root
- Updated vswhere.exe
- Scripts created via Asset browser are now being added to the project
- Fixed Apply not being called for extended Settings
- Correctly wrap New File preview only when line full
- Create Project: Show warning, when target directory already exists
2023-10-27 22:29:10 +02:00
Simon Lübeß 3d8756ec42 Added context menu entry to create C#-Scripts.
Allow entering file name before creation
2023-10-19 19:27:01 +02:00
Simon Lübeß bad7b08046 EditorContentManager: Fixed asset reloading
(thats why unit tests exist... or at least types...)
2023-09-29 18:56:37 +02:00
Simon Lübeß d32bc6c475 Properties Window: Combined "Save"- and "Apply"-Buttons into one "Save"-Button 2023-09-29 18:51:21 +02:00
Simon Lübeß 688046fcf9 Scripting: Create Rigidbodies and Colliders during runtime 2023-09-21 15:10:20 +02:00
Simon Lübeß 446dc2ca2a Scripting: Basic copying of entities during runtime + Reference Components using UUID 2023-09-21 14:23:00 +02:00
Simon Lübeß ba54d48dfe Fixed referencing entities and components that are not the script owners entity 2023-09-16 22:14:52 +02:00
Simon Lübeß 754c149493 Entity Creation and Destruction from scripts
- ScriptEngine: Allow destroying scripts during runtime
- Scripting:
    - Create new entities using Constructors
    - Added Destroy functions for Entities
    - Added SetScript/RemoveScript functions for Entities
    - Allow adding multiple components at once
    - Added Is-Method
- Mono Wrapper: Added Array-Functions
- WorldEnumerator: Fixed crash due to dangling list pointer after entity creation
- Scene:
    - Basic create Rigidbodies during runtime
    - Start of entity copying (For runtime use)
    - Added DestroyEntityDeferred
- SceneSerializer:
    - Added option to assign new IDs to entities
2023-09-15 23:22:27 +02:00
Simon Lübeß ff54eb738e UUID: Removed empty constructor, added static Create-Function 2023-09-13 13:14:54 +02:00
Simon Lübeß 370eaf9bc7 Skip CMake compiler testing 2023-09-13 01:02:13 +02:00
Simon Lübeß 5af174ecee ScriptCore: atan2 2023-09-05 23:15:48 +02:00
Simon Lübeß 7bffd01401 Rigidbody2D Get/Set Linear and Angular Velocity 2023-09-05 23:15:33 +02:00
Simon Lübeß cd333f4f02 EditVector: Allow Disabling individual components
+ Disable XY-Angle when Entity has Rigidbody2D Component (This is something for future me, I couldn't figure it out...)
+ Start of handling of non trivial tranform nesting and rotations on XY axes
+ TranformComponent.RotationEuler: Normalize quaternion before converison
2023-09-05 23:14:51 +02:00
Simon Lübeß 2f58f0e142 Renamed RigidBody2D to Rigidbody2D
+ Math.normalize(Quaternion)
+ Position and Rotation properties for Rigidbody2D
+ use In, Out on beef side in ScriptGlue
2023-09-03 19:42:50 +02:00
Simon Lübeß 0165279220 Implemented "Open recent Project" menu entry
+ Clean up handle -> asset map when chaning Asset or Resource directory
2023-08-21 14:11:51 +02:00
Simon Lübeß 3affb8a32f Scripting: Added Set and GetPosition to Rigidbody2D
+ Vectors: Hide swizzles in Debugger + Generate ToString
2023-08-21 13:20:12 +02:00
Simon Lübeß d3c19dd8da 2D Polygon Collider editor with Gizmos
+ Added Handles class
2023-08-21 13:18:51 +02:00
Simon Lübeß 377997f903 Fixed mouse wrapping to wrong position when window is moved 2023-08-14 23:56:43 +02:00
Simon Lübeß d7201299c7 Fixed physics only simulation
+ Don't run scripts in physics only mode
+ Don't initialize scritps in physics only mode
+ Don't setup physics callbacks in physics only mode
2023-08-14 22:38:55 +02:00
Simon Lübeß a112fcc64a Automatic switch between Player <-> Editor Tabs
+ Allow Editor to inject into Settings
2023-08-14 22:10:27 +02:00
Simon Lübeß f71e851ab5 Push Loggers earlyer to hopefully avoid race condition
+ Fix null check in EditorLogger
2023-08-14 22:09:35 +02:00
Simon Lübeß 040e87d57f Fixed Selection and Deletion in Entity Hierarchy Window 2023-08-14 14:32:58 +02:00
Simon Lübeß 74b17c8599 2D Polygon Collider 2023-08-13 12:03:06 +02:00
Simon Lübeß 4e5d3cfd64 Add OnCollisionLeave2D 2023-08-10 22:07:58 +02:00
Simon Lübeß b28ca14e15 Updated Box2D 2023-08-10 20:38:49 +02:00
Simon Lübeß aafcc41286 Invoke on collision enter + start of attach child colliders to rigidbody
+ Changed default Namespace of ScriptCore to GlitchyEngine
+ Implicit Casts float2 <-> b2Vec2
+ Entity constructor internal
+ Renamed RigidBody2D to Rigidbody2D (notice the B)
+ Basic Debug Draw actual 2D Colliders
+ Added Entity::GetParentWithComponent
2023-08-10 19:55:45 +02:00
Simon Lübeß 987246a806 Asset Drag'n'Drop preview 2023-08-02 14:59:35 +02:00
Simon Lübeß f654a4f379 Fixed AssetHierarchy not updating + Drag'n'drop Files in Asset Browser 2023-08-02 13:48:06 +02:00
Simon Lübeß 92334d8150 Hide obsolete Application.Get() 2023-08-02 00:08:30 +02:00
Simon Lübeß 0101f546a5 Use InvokeOnMainThread for asset tree updates 2023-08-02 00:08:17 +02:00
Simon Lübeß 6c4ac923c6 Asset renaming + AssetHierarchy: major refactoring for file tree construction
+ AssetFile: Added "AssetConfigPath" Property
+ Less crashy, more cleaner
2023-08-01 23:56:52 +02:00
Simon Lübeß 51441f0e70 Fixed memory leak 2023-08-01 23:20:25 +02:00
Simon Lübeß d2600c7517 Fixed Race-Condition in SamplerStateManager 2023-08-01 22:50:09 +02:00
Simon Lübeß 60725c3588 Universal AssetHandles. Serialize AssetHandle instead of AssetIdentifier
A bit unstable
2023-08-01 21:38:54 +02:00
Simon Lübeß 6d7f26b1f4 Added "Create new Folder" to Asset Browser context menu 2023-08-01 16:45:54 +02:00
Simon Lübeß b1f89a345f Deletion of Assets and Directories 2023-08-01 16:45:33 +02:00
Simon Lübeß 253dd8087e Added option to create Materials in Asset Browser 2023-08-01 16:24:31 +02:00
Simon Lübeß e8a5594540 Allow changing Effect of Materials
+ TextureDimension Property for Texture
2023-08-01 13:28:04 +02:00
Simon Lübeß 5d8c1b111a Project user settings, load recent scenes, properly cleanup ScriptEngine when switching scenes 2023-07-31 20:09:56 +02:00
Simon Lübeß 3298053d9d Fixed Asset Drag'n'Drop 2023-07-31 20:07:12 +02:00
Simon Lübeß adccb74f44 Editor Layer cleanup 2023-07-31 18:48:36 +02:00
Simon Lübeß 97113b5df6 Start of Create Asset Context Menu
+ Asset Hierarchy: Fixed Assets in Folder-Root not being shown
2023-07-31 17:40:05 +02:00
Simon Lübeß c374d86ec7 Cleanup 2023-07-31 16:40:27 +02:00
Simon Lübeß 803fd7f8ba Fixed crash when ScriptComponent has no Instance in Play Mode 2023-07-31 16:36:02 +02:00
Simon Lübeß 11a57f5285 Fixed ComponentEditWindow showing component editor after it was deleted 2023-07-31 16:35:38 +02:00
Simon Lübeß 0d015b485e Basic project creation
+ Added TreeNode.RemoveChild
+ Added Directory.Copy
+ Path.Combine now replaces alt directory separator
+ Project: Renamed ProjectName to Name
+ Project.Load: Save settings, if file doesn't exist
2023-07-31 16:35:12 +02:00
Simon Lübeß 17e4a6a589 Updated Beef.Linq 2023-07-30 20:32:19 +02:00
Simon Lübeß c1a87ed946 Separated Assets to Resources (Engine assets) and Assets (Project specific)
+ AssetHierarchy: Exposed RootNode
+ ContentBrowserWindow: Fixed Empty Folder not being Leaf-Node
+ TreeNode: Added IsParentOf, IsChildOf and IsInSubtree.
    + Fixed InternalDeleteTreeAndChildren for null trees
2023-07-30 20:30:06 +02:00
Simon Lübeß 20dae92be7 Fixed Assets having scrollbars in content browser 2023-07-30 13:55:50 +02:00
Simon Lübeß df67f32399 Start of project system
+ added Directory.IsEmpty
2023-07-30 13:23:34 +02:00
Simon Lübeß 14a802d057 Added new line to EditorLogger 2023-07-30 13:21:33 +02:00
Simon Lübeß 12d6df3edf Fixed crash when AssetViewer has size of 0 (RTFM) 2023-07-29 18:54:45 +02:00
Simon Lübeß 2838449186 Ignore MonoDebugger.log 2023-07-28 21:15:23 +02:00
Simon Lübeß 75513bea3d Removed obsolete texture viewer 2023-07-28 21:09:33 +02:00
Simon Lübeß 16c3d7c44d Updated ImGui 2023-07-28 13:38:59 +02:00
Simon Lübeß 7ae069baf6 Fixed loading UI font 2023-07-28 12:26:15 +02:00
Simon Lübeß 00dc3faa19 Failed to show and edit script sctruct
+ SizeInBytes for MonoFields
2023-07-28 11:48:01 +02:00
Simon Lübeß f39acdadb3 Show enum fields in Edit mode 2023-07-28 00:07:10 +02:00
Simon Lübeß 1254d01545 Handle exceptions from C# Scripts + Log window + EditorLogger
+ Renamed Platform/DX11/ImGui.bf to .../Dx11ImGui.bf for clarity
+ ImGuiExtension: ImageButtonEx thata takes a TextureViewBinding
+ EditorLogger that logs to the LogWindow
+ Current logger can now be changed
+ Info, Trace, Warning and Error Icons
2023-07-27 21:58:42 +02:00
Simon Lübeß 0bc517842f Allow changing logger 2023-07-27 00:42:42 +02:00
Simon Lübeß 3e63281508 Fixed mono debugging... 2023-07-26 22:56:43 +02:00
Simon Lübeß ef486b7082 Basic entity highlighting 2023-07-25 19:37:13 +02:00
Simon Lübeß 81a61d5a90 Drag'n'drop for components
+ Added CreateInstance to ScriptClass
+ Added CreateComponentInstance to ScriptInstance
2023-07-25 16:37:41 +02:00
Simon Lübeß 37197cbdf1 Allow dragging and dropping of Entities in editor
+ New Dictionary Helpers
+ Made ImGui Payloads safer
+ Start of Component drag'n'drop
2023-07-24 23:17:00 +02:00
Simon Lübeß b53ed2d8f2 Made script deserialization more robust 2023-07-24 21:28:58 +02:00
Simon Lübeß 457b43352a Debugging, but it doesn't work for some reason 2023-07-21 16:16:24 +02:00
Simon Lübeß cc7fb7311f Added single step for simulation and play mode
+ Added ManualStepTime to GameTime
2023-07-20 23:21:21 +02:00
Simon Lübeß 5f27b8001a Automatic script assembly reloading 2023-07-20 22:11:11 +02:00
Simon Lübeß 0cbb8a4966 Fixed C# -> Beef Type mapping 2023-07-20 17:53:32 +02:00
Simon Lübeß 79adc70f01 Gitignores and missing updates to scripts 2023-07-20 17:51:06 +02:00
Simon Lübeß 78ba016b03 Log Exceptions in thrown by Script OnUpdate-Function 2023-07-20 17:48:50 +02:00
Simon Lübeß 3e55a1614a Shader like vectors for C# Scripting 2023-07-20 17:48:28 +02:00
Simon Lübeß f0de874572 Start of generate vectors for C# 2023-07-19 18:43:26 +02:00
Simon Lübeß 6e02a04a4f Changed ScriptCore to DotNet Standard 2.0 2023-07-19 15:45:36 +02:00
Simon Lübeß cd1562f372 Basic Script reloading
+ ScriptComponent now saves script name instead of direct ScriptClass reference
+ Added ClearDictionaryAndDeleteKeys helper
+ Moved ScriptFieldType to separate file
+ _ScriptFieldMap now uses String as Key
2023-07-18 22:06:34 +02:00
Simon Lübeß e8505f6bdb Scripting: FindEntityWithName and get script instance
+ Some C# UUID stuff
+ Added some Mono functions
+ ScriptEngine:
  + ID -> ScriptInstance map in ScriptEngine
  + GetManagedInstance

+ Fixed Scene not visible after loading a new scene
  + Renamed OnViewportResize to SetViewportSize for Scene and SceneRenderer
2023-07-17 20:27:18 +02:00
Simon Lübeß 66d66d3308 Serialize script fields in "array" + more forgiving deserialization 2023-07-17 04:04:01 +02:00
Simon Lübeß 88b393157a Make sure we always initialize with a scene 2023-07-17 04:00:30 +02:00
Simon Lübeß 28155ec92c Allow opening a scene on launch
+ don't resize on load/new scene
2023-07-17 02:19:49 +02:00
Simon Lübeß 1641bafd06 Don't instantiate scripts for Editor + ScriptComponent Serialzation + Don't crash when scene loading failed 2023-07-17 01:27:58 +02:00
Simon Lübeß 76bff3a6c1 Texture importer now supports mip maps 2023-07-06 17:06:59 +02:00
Simon Lübeß a507eeb1cd Kind of fixed a memory leak 2023-07-01 12:49:17 +02:00
Simon Lübeß 77c45db122 Replaced IntX by intX, Basic AssetViewer (can view Textures, kind of) 2023-07-01 00:15:01 +02:00
Simon Lübeß e12fcaacff Added Math min/max for float 2023-06-28 22:03:43 +02:00
Simon Lübeß b31d43820a Support emissive materials 2023-06-28 19:33:39 +02:00
Simon Lübeß 334c2c0366 Search in Content Browser (and added ForEach in TreeNode) 2023-06-28 19:27:52 +02:00
Simon Lübeß bb520b43ec Added support for Cube Textures, Improved dds import (and textures in general), Texture refactoring and DX11 DeviceContext synchronization 2023-06-25 17:58:16 +02:00
Simon Lübeß 46693666aa Fixed current directories context menu not opening
i.e. when right clicking the background of the current directory
2023-06-25 03:20:35 +02:00
Simon Lübeß 9e1f648aa0 Transitioned from VectorX to floatX
And some trying to update Rigidbody when transform changes
2023-06-25 02:47:33 +02:00
Simon Lübeß 5f5da2ed35 Moved vector type files 2023-06-25 01:11:06 +02:00
Simon Lübeß fa2277cd99 Start of shader like vectors + added 16 bit float 2023-06-24 23:45:56 +02:00
Simon Lübeß 54936d5744 Fixed crash when viewport size is negative 2023-06-24 13:07:07 +02:00
Simon Lübeß 04d69717a3 Automatically pull and build mono once + .gitignore 2023-06-18 21:03:59 +02:00
Simon Lübeß 3becc1e25b fixed Settings-File not being created and start of Recent-Projects-Menu 2023-06-18 16:05:03 +02:00
Simon Lübeß e8e6207bc1 Merge branch 'scripting' of github.com:aharabada/glitchy-engine-beef into scripting
# Conflicts:
#	GlitchyEngine/src/Scripting/ScriptClass.bf
#	GlitchyEngine/src/Scripting/ScriptEngine.bf
#	GlitchyEngine/src/Scripting/ScriptInstance.bf
#	GlitchyEngine/src/World/Scene.bf
#	GlitchyEngineHelper/src/Mono/Mono.bf
2023-06-18 14:33:28 +02:00
Simon Lübeß f4c5bf9c2d Added binding for mono_field_get_value_object 2023-06-18 14:24:26 +02:00
Simon Lübeß f4607a6210 Script default values after init, Fix memory leak, Copy Script values on Play 2023-05-31 14:38:07 +02:00
Simon Lübeß 6a59deb9e2 Weiß ich nicht, ist Monate her... 2023-05-30 16:54:57 +02:00
Simon Lübeß ac1817fe33 Weiß ich nicht, ist Monate her... 2023-05-30 16:52:27 +02:00
Simon Lübeß 5855b13873 Wer weiß, was ich alles so gemacht hatte...
- Fixed crash caused by early ScriptEngine shutdown
2023-05-30 16:50:22 +02:00
Simon Lübeß ef5e4ba64f Fixed ScriptClass leaking 2023-03-30 15:13:21 +02:00
Simon Lübeß 4fd9a924a0 Added basic component access in Scripts 2023-03-29 16:32:46 +02:00
Simon Lübeß e60d74fccd Basic entity scripting 2023-03-29 13:33:34 +02:00
Simon Lübeß 5e5134a607 Added Mono for C# scripting 2023-03-26 13:11:44 +02:00
Simon Lübeß fd6826785a Updated submodules again? 2023-03-25 13:24:50 +01:00
Simon Lübeß 43bcf01299 Merge branch 'asset_handle' into main 2023-03-25 13:20:40 +01:00
Simon Lübeß 81ae5f1135 Updated submodules 2023-03-25 13:19:59 +01:00
Simon Lübeß 0ee2f5fa9e Merge branch 'asset_handle' into main 2023-03-25 13:15:56 +01:00
Simon Lübeß b76d4cd558 Merge remote-tracking branch 'origin/asset_handle' into asset_handle 2023-03-25 13:04:52 +01:00
Simon Lübeß 5893cfb74a Refactor 2023-03-25 13:04:02 +01:00
Simon Lübeß ed952155b6 Refactor 2023-03-25 00:41:34 +01:00
Simon Lübeß d54cdf43ee Simulation mode and pause/resume 2023-03-24 23:50:46 +01:00
Simon Lübeß f16fbc3984 Separated window for game and editor 2023-03-24 22:48:55 +01:00
Simon Lübeß 184480243f Collider rendering 2023-03-24 19:13:32 +01:00
Simon Lübeß fc1875ed96 Added Line batch rendering 2023-03-24 12:54:46 +01:00
Simon Lübeß 5733166b74 Fixed uint render targets always being cleared to zero 2023-03-19 12:49:12 +01:00
Simon Lübeß 2ba4b68e09 Split up sprite and circle renderer component 2023-03-19 12:19:22 +01:00
Simon Lübeß edcec02e94 Fixed AssetHandle serialization
- Serialize MeshComponents
- Fixed handling renamed files
2023-03-19 01:04:32 +01:00
Simon Lübeß c164aeecaa Copy scene when entering play mode 2023-03-18 23:30:57 +01:00
Simon Lübeß 793aa40975 Add up button und split scrolling in content browser
- Add Parent to TreeNode
- Start of Rename handling
2023-03-18 19:59:56 +01:00
Simon Lübeß 50714976e9 Start of async asset loading
- Refactored content manager and asset loaders
- Asset placeholder
- Error asset
2023-03-18 18:59:30 +01:00
Simon Lübeß 7b6662cbc4 Fixed Textures in Materials 2023-03-16 23:32:02 +01:00
Simon Lübeß cfa046d2ea Refactored EditorContentManager 2023-03-16 23:31:19 +01:00
Simon Lübeß b22f73a156 Handles barely work now, mostly no crashes 2023-03-16 17:57:23 +01:00
Simon Lübeß c3fb9bbd5d More asset handles 2023-03-13 20:35:36 +01:00
Simon Lübeß c22d122921 Start of asset handles 2023-03-13 20:35:30 +01:00
Simon Lübeß ad14c9f6ed AssetHandle Code snippets for design reference 2023-03-13 15:56:31 +01:00
Simon Lübeß 2ce357cd12 Basic material serialisation 2023-03-05 16:38:50 +01:00
Simon Lübeß 2324ae852d Moved material editing from component window to asset editor
- EditorContentManager now returns null if asset wasn't found (instead of crashing)
- FixUp asset identifier when dragging from asset browser
- Lock current asset in properties editor
2023-01-08 20:31:43 +01:00
Simon Lübeß d3d284256c Fixed WorldEnumerator crashes if one of the components doesn't exist 2023-01-08 20:29:06 +01:00
Simon Lübeß e38373dccf Serialize Mesh and MeshRenderer in scene + fixed Light serialization 2023-01-08 19:31:01 +01:00
Simon Lübeß b5ca86d8de Fixed scope of full path 2023-01-08 16:48:38 +01:00
Simon Lübeß 4589030da6 Load effects via content manager + virtual InitContentManager in App 2023-01-08 00:17:04 +01:00
Simon Lübeß 3da60355df Model and Material loading via content manager 2023-01-07 12:15:14 +01:00
Simon Lübeß ee30920b56 Crappy hot reloading of textures and Properties editor for textures 2023-01-03 22:21:26 +01:00
Simon Lübeß 427323744b Fixed Sampler State filters + Documentation 2023-01-03 22:18:43 +01:00
Simon Lübeß 9d97579857 More content browser stuff
- Seperate AssetHierarchy from EditorContentManager
- Make files selectable and context menu
2023-01-02 20:00:48 +01:00
Simon Lübeß fdf680508d Don't recreate the entire asset tree 2023-01-01 18:25:36 +01:00
Simon Lübeß 0b3f242082 Added Submodule "Beef.Linq" 2023-01-01 18:18:27 +01:00
Simon Lübeß 502cee47e7 EditorContentManager Part 2 2023-01-01 16:53:58 +01:00
Simon Lübeß c389a77274 EditorContentManager Part 1 2023-01-01 16:53:45 +01:00
Simon Lübeß dffd43a36f RenderAPI changes and removed Context parameter from Effect and Material 2022-11-27 17:18:16 +01:00
Simon Lübeß d47ac23e1b Raw Input and some ImGuiExtension changes 2022-11-26 15:24:33 +01:00
Simon Lübeß 8f22cbb8bc Fixed circle rendering and added 2D circle collider 2022-11-26 12:17:31 +01:00
Simon Lübeß 0155a38ae6 UUID 2022-11-16 13:09:26 +01:00
Simon Lübeß a42544f171 2D Physics 2022-10-08 16:56:15 +02:00
Simon Lübeß 202083930a Play Button 2022-10-06 16:33:33 +02:00
Simon Lübeß 6958d27c30 Fixed editor camera for real 2022-09-29 16:39:58 +02:00
Simon Lübeß f8544c8f64 Updated imgui 2022-09-28 22:02:37 +02:00
Simon Lübeß e95c5731b6 Basic Model drag'n'drop 2022-09-27 20:24:03 +02:00
Simon Lübeß 3ec537762a Overload '->' operator for TreeNode 2022-09-27 00:01:05 +02:00
Simon Lübeß e035832ab0 Fixed mouse wrapping when scene viewport is inactive 2022-09-27 00:00:17 +02:00
Simon Lübeß 0f1eddad5f Updated submodule DirectX 2022-09-07 18:28:40 +02:00
Simon Lübeß d2dca12d0c Use corrent RefCounter 2022-08-19 20:01:05 +02:00
Simon Lübeß 0588a93ec4 Use ACES tone mapping 2022-08-18 14:03:33 +02:00
Simon Lübeß 42e386a142 Fixed component name 2022-08-18 13:51:40 +02:00
Simon Lübeß 21c8d839ef Fixed mouse picking 2022-08-18 13:51:12 +02:00
Simon Lübeß bc1f466d18 Drag drop Texture 2022-08-13 13:47:58 +02:00
Simon Lübeß 8495c6db28 Drag Texture 2022-07-26 08:00:17 +02:00
Simon Lübeß bff4418b84 Content browser 2022-07-25 17:03:28 +02:00
Simon Lübeß 0339ae4422 Adjust to fix in beef mixins 2022-06-15 15:31:44 +02:00
Simon Lübeß eb03eca4dd Manual constant buffer binding 2022-06-13 14:10:54 +02:00
Simon Lübeß a926ef4af2 Updated gltf 2022-06-13 13:26:04 +02:00
Simon Lübeß 866353a157 Refactored Effects + start of EngineBuffers (I hate it) 2022-06-07 13:12:03 +02:00
Simon Lübeß a80018e80c Removed redundant Point struct and SceneViewport improvements
- Keyboard shortcuts for Gizmo control
- Improved mousepick-blocking
2022-06-02 12:17:57 +02:00
Simon Lübeß e41645e12a Composit Target and gamma correct rendering 2022-05-31 22:41:20 +02:00
Simon Lübeß 8db2ce1d05 Mouse picking 2022-05-30 14:06:52 +02:00
Simon Lübeß 47fdce0a7e Triangle fullscreen quad 2022-05-28 15:53:35 +02:00
Simon Lübeß d212576719 Render EntityIDs (breaks post processing) 2022-05-28 15:42:48 +02:00
Simon Lübeß 164d420a25 DX11: Automatically validate input layouts against vertex shaders 2022-05-26 11:27:02 +02:00
Simon Lübeß 28f1fad464 RenderTargetGroup GetData, Shader uint support 2022-05-25 22:00:11 +02:00
Simon Lübeß 1418063d68 RenderTargetGroup 2022-05-20 18:37:59 +02:00
Simon Lübeß 4cd0bff91d Fixed editorcamera stuttering, Added editor icons 2022-05-18 14:12:26 +02:00
Simon Lübeß 5d8a4ad3a7 Editor camera and Editor/Runtime scene update separation 2022-05-17 19:06:28 +02:00
Simon Lübeß ccea61fb79 Updated bon 2022-05-16 19:23:45 +02:00
Simon Lübeß de3da8ded8 Gizmo angle snapping 2022-05-16 10:11:33 +02:00
Simon Lübeß 62bb5baac9 Gizmo improvements 2022-05-15 14:36:07 +02:00
Simon Lübeß 3956080520 Start of serializaation
- Allow enumerating over unregistered components
- Refactored Editor a bit
2022-05-14 23:01:08 +02:00
Simon Lübeß 1d3d30f88d Desketchified DX11 shader binding 2022-05-13 15:13:09 +02:00
Simon Lübeß b1a1268319 Terrible postprocessing and start of Editor GUI for lights 2022-05-11 22:49:36 +02:00
Simon Lübeß 56e92a7d67 Added Lights 2022-05-11 11:39:59 +02:00
Simon Lübeß f4c9dd8ade MeshRendererComponentEditor
- Explicit conversion from VectorX to float[X]
- Expose "Columns" and "Rows" properties of BufferVariable
- Effects: VariableDescriptors
2022-05-10 22:29:40 +02:00
Simon Lübeß 2e0cc289df Material.GetVariable and (maybe) fixed SetVariable for Matrix3x3 2022-05-10 22:06:07 +02:00
Simon Lübeß 336e52fbac Fix Modelloader 2022-05-10 11:48:16 +02:00
Simon Lübeß f527af13c3 EnsureTypeMatch speedup 2022-05-09 22:58:22 +02:00
Simon Lübeß fe0d5fa529 More profiling 2022-05-09 22:53:48 +02:00
Simon Lübeß b37b1b4bf9 UnbindTexture, PBR changes, Test scene 2022-05-09 22:11:46 +02:00
Simon Lübeß 3c2c37b270 Shader #include + Remved unused Dx11Effect 2022-05-09 18:19:24 +02:00
Simon Lübeß dc235399c8 Start of PBR 2022-05-09 16:45:16 +02:00
Simon Lübeß 2817c5b1a1 Start of 3d renderer integration 2022-05-04 18:38:59 +02:00
Simon Lübeß 412d0ea965 Fixed release build and automatic compiling of CPP Helper 2022-05-04 18:34:56 +02:00
Simon Lübeß 9e23ac0fcf Removed dangling DXTK-project dependencie 2022-05-04 18:33:43 +02:00
Simon Lübeß a43572817d Vector tweaks 2022-05-04 17:46:15 +02:00
Simon Lübeß 805423a64e Rendertarget inherits from texture 2022-05-04 14:53:31 +02:00
569 changed files with 67380 additions and 5348 deletions
+7
View File
@@ -5,3 +5,10 @@ build/
recovery/
vendor/directx
imgui.ini
GlitchyEditor/settings.bon
GlitchyEditor/MonoDebugger.log
# Ignore files in build-directory of ScriptCore
GlitchyEditor/Resources/Scripts/*
.cache
+13 -1
View File
@@ -24,4 +24,16 @@
url = https://github.com/EinScott/bon.git
[submodule "GlitchyEngineHelper/vendor/DirectXTK"]
path = GlitchyEngineHelper/vendor/DirectXTK
url = https://github.com/microsoft/DirectXTK.git
url = https://github.com/microsoft/DirectXTK.git
[submodule "GlitchyEngine/vendor/box2D"]
path = GlitchyEngine/vendor/box2D
url = https://github.com/aharabada/box2d-beef.git
[submodule "GlitchyEngine/vendor/Beef.Linq"]
path = GlitchyEngine/vendor/Beef.Linq
url = https://github.com/aharabada/Beef.Linq.git
[submodule "vendor/ImGui.NET"]
path = vendor/ImGui.NET
url = https://github.com/aharabada/ImGui.NET.git
[submodule "GlitchyEngine/vendor/Ultralight-beef"]
path = GlitchyEngine/vendor/Ultralight-beef
url = https://github.com/aharabada/Ultralight-beef.git
+5 -2
View File
@@ -1,6 +1,9 @@
FileVersion = 1
Projects = {Sandbox = {Path = "Sandbox"}, GlitchyEngine = {Path = "GlitchyEngine"}, GlitchLog = {Path = "GlitchLog"}, DirectX = {Path = "GlitchyEngine/vendor/directx/DirectX"}, DirectXTK = {Path = "GlitchyEngine/vendor/DirectXTK/DirectXTK-beef"}, LodePng = {Path = "vendor/lodepng-beef/lodepng-beef"}, FreeType = {Path = "GlitchyEngine/vendor/freetype"}, cgltf-beef = {Path = "GlitchyEngine/vendor/gltf/cgltf-beef"}, GlitchyEditor = {Path = "GlitchyEditor"}, msdfgen-beef = {Path = "GlitchyEngine/vendor/msdfgen/msdfgen-beef"}, ImGui = {Path = "GlitchyEngine/vendor/imgui/ImGui"}, ImGuiImplDX11 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplDX11"}, ImGuiImplWin32 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplWin32"}, ImGuizmo = {Path = "GlitchyEngine/vendor/imgui/ImGuizmo"}, GlitchyEngineHelper = {Path = "GlitchyEngineHelper"}, bon = {Path = "GlitchyEngine/vendor/bon"}}
WorkspaceFolders = {GlitchyEngine = ["GlitchyEngine", "GlitchLog", "GlitchyEngineHelper"], "GlitchyEngine/Dependencies" = ["cgltf-beef", "DirectX", "DirectXTK", "FreeType", "ImGui", "ImGuiImplDX11", "ImGuiImplWin32", "ImGuizmo", "LodePng", "msdfgen-beef", "bon"]}
Projects = {GlitchyEngine = {Path = "GlitchyEngine"}, GlitchLog = {Path = "GlitchLog"}, DirectX = {Path = "GlitchyEngine/vendor/directx/DirectX"}, LodePng = {Path = "vendor/lodepng-beef/lodepng-beef"}, FreeType = {Path = "GlitchyEngine/vendor/freetype"}, cgltf-beef = {Path = "GlitchyEngine/vendor/gltf/cgltf-beef"}, GlitchyEditor = {Path = "GlitchyEditor"}, msdfgen-beef = {Path = "GlitchyEngine/vendor/msdfgen/msdfgen-beef"}, ImGui = {Path = "GlitchyEngine/vendor/imgui/ImGui"}, ImGuiImplDX11 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplDX11"}, ImGuiImplWin32 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplWin32"}, ImGuizmo = {Path = "GlitchyEngine/vendor/imgui/ImGuizmo"}, GlitchyEngineHelper = {Path = "GlitchyEngineHelper"}, bon = {Path = "GlitchyEngine/vendor/bon"}, box2d-beef = {Path = "GlitchyEngine/vendor/box2D"}, "Beef.Linq" = {Path = "GlitchyEngine/vendor/Beef.Linq/src"}, ScriptCore = {Path = "ScriptCore"}, Ultralight = {Path = "GlitchyEngine/vendor/Ultralight-beef"}, EditorUI = {Path = "GlitchyEditor/EditorUI"}}
WorkspaceFolders = {GlitchyEngine = ["GlitchyEngine", "GlitchLog", "GlitchyEngineHelper", "ScriptCore"], "GlitchyEngine/Dependencies" = ["cgltf-beef", "DirectX", "FreeType", "ImGui", "ImGuiImplDX11", "ImGuiImplWin32", "ImGuizmo", "LodePng", "msdfgen-beef", "bon", "box2d-beef", "Beef.Linq"], EditorDependencies = ["Ultralight"]}
[Workspace]
StartupProject = "GlitchyEditor"
[Configs.Debug.Win64]
AllocStackTraceDepth = 12
@@ -0,0 +1,92 @@
///
/// Loading and usage of an asset.
///
// Shows the usage of the Content Manager.
// An asset is loaded with Content.LoadAsset(AssetName)
// Loading an asset returns an AssetHandle.
// Usually you want to hold on to the AssetHandle.
// If you need the actual asset you can use Content.GetAsset<AssetType>(AssetHandle) to retrieve the actual asset.
/*
* Only hold on to AssetHandle.
* Do NOT hold actual Assets! The Asset might get invalidated
* (e.g. reloading after the source-file changed).
*/
AssetHandle _lineEffect;
void Start()
{
/*
* Loading an asset returns a handle to that asset.
*/
_lineEffect = Content.LoadAsset("Shaders\\LineEffect.hlsl");
}
void Update()
{
// Use case 1:
{
// Retrieve the actual asset. Note that this Asset is only guaranteed to persist
// for the current frame.
Effect fx = Content.GetAsset<Effect>(_lineEffect);
// Note: Assets are ref counted, however since they are not inteded to be held GetAsset
// does NOT increment the reference counter so you usually should NOT decrement it.
// The exception is when you manually hold on to an asset (see Example below)
// Use asset
fx.Variables["ViewProjection"].SetData(viewProjection * transform);
fx.Variables["Color"].SetData(color);
fx.ApplyChanges();
fx.Bind();
}
// Use case 2:
{
// Retrieve the actual asset.
Effect fx = _lineEffect.Get<Effect>();
// ...
// Same as case 1
}
}
///
/// Holding on to an actual asset.
///
// Shows the usage of the Content Manager when you hold a reference to the actual Asset instead of the handle.
// This should usually not be done. Eventhough it is technically fine, it has the implication, that if the
// content manager decides to reload the asset the changes will not be reflected in the held reference
// (which they would if you used GetAsset before every usage.)
// Also the content manager can't unload the asset because the reference counter wouldn't be zero.
// Though there currently is no way for the content manager to unload an asset unless it is specifically told to do so.
/*
* Field to hold the asset.
*/
Effect _lineEffect;
void Start()
{
// Load the Asset.
AssetHandle handle = Content.LoadAsset("Shaders\\LineEffect.hlsl");
// Get the actual asset.
_lineEffect = Content.GetAsset<Effect>(handle); // Alternative: _lineEffect = handle.Get<Effect>();
// Increment the reference counter so that the asset doesn't get unloaded.
_lineEffect.AddRef();
}
void Destroy()
{
// Make sure to release the asset once you don't need it anymore. Otherwise it will leak.
_lineEffect.Release();
}
void Update()
{
_lineEffect.Variables["ViewProjection"].SetData(viewProjection * transform);
_lineEffect.Variables["Color"].SetData(color);
_lineEffect.ApplyChanges();
_lineEffect.Bind();
}
@@ -0,0 +1,44 @@
///
/// This shows the usage of a smart/typed Asset Handle.
///
// In the basic usage-patterns the user has two options:
// Either he/she holds a handle and has to query for the actual asset every time
// or he/she hold the actual asset and loses reloading capabilities.
// The idea of the auto asset is to provide a way that can provide both.
AssetHandle<Effect> _lineEffect;
void Start()
{
/*
* Loading an asset returns a handle to that asset.
* The asset handle is implicitly converted to a smart AssetHandle.
*/
_lineEffect = Content.LoadAsset("Shaders\\LineEffect.hlsl");
}
void Update()
{
// Use case 1 (Convenience)
{
_lineEffect.Variables["ViewProjection"].SetData(viewProjection * transform);
_lineEffect.Variables["Color"].SetData(color);
_lineEffect.ApplyChanges();
_lineEffect.Bind();
}
// Use case 2 (Technically more efficient)
{
Effect fx = _lineEffect.Get();
fx.Variables["ViewProjection"].SetData(viewProjection * transform);
fx.Variables["Color"].SetData(color);
fx.ApplyChanges();
fx.Bind();
}
}
//
// Auto Assets use comp time to expose all the fields, Methods and properties of the actual asset.
// They will automatically check if the asset for the handle changed and update accordingly.
// This means it is more convenient to use than both basic patterns and has all benefits of both.
//
+3
View File
@@ -0,0 +1,3 @@
# Design Code Examples
This directory (and its subdirectories) contains non functional code snippets showing the intended usage of certain systems of the engine.
-28
View File
@@ -5,34 +5,6 @@ using internal GlitchLog;
namespace GlitchLog
{
public abstract class Logger
{
protected LogLevel _logLevel;
public LogLevel Level
{
get => _logLevel;
set => _logLevel = value;
}
public abstract String Name {get; set;}
public abstract void Trace(StringView format, params Object[] args);
public abstract void Info(StringView format, params Object[] args);
public abstract void Warning(StringView format, params Object[] args);
public abstract void Error(StringView format, params Object[] args);
public abstract void Critical(StringView format, params Object[] args);
public abstract void Assert(bool condition, String error = Compiler.CallerExpression[0], String filePath = Compiler.CallerFilePath, int line = Compiler.CallerLineNum);
#if !DEBUG
[SkipCall]
#endif
public abstract void AssertDebug(bool condition, String error = Compiler.CallerExpression[0], String filePath = Compiler.CallerFilePath, int line = Compiler.CallerLineNum);
public abstract void Log(LogLevel level, StringView format, params Object[] args);
}
public class DebugLogger : Logger
{
// {l} = log level (first parameter)
+31
View File
@@ -0,0 +1,31 @@
using System;
namespace GlitchLog;
public abstract class Logger
{
protected LogLevel _logLevel;
public LogLevel Level
{
get => _logLevel;
set => _logLevel = value;
}
public abstract String Name {get; set;}
public abstract void Trace(StringView format, params Object[] args);
public abstract void Info(StringView format, params Object[] args);
public abstract void Warning(StringView format, params Object[] args);
public abstract void Error(StringView format, params Object[] args);
public abstract void Critical(StringView format, params Object[] args);
public abstract void Assert(bool condition, String error = Compiler.CallerExpression[0], String filePath = Compiler.CallerFilePath, int line = Compiler.CallerLineNum);
#if !DEBUG
[SkipCall]
#endif
public abstract void AssertDebug(bool condition, String error = Compiler.CallerExpression[0], String filePath = Compiler.CallerFilePath, int line = Compiler.CallerLineNum);
public abstract void Log(LogLevel level, StringView format, params Object[] args);
}
+15 -1
View File
@@ -1,7 +1,21 @@
FileVersion = 1
Dependencies = {corlib = "*", GlitchLog = "*", GlitchyEngine = "*"}
Dependencies = {corlib = "*", GlitchLog = "*", GlitchyEngine = "*", Ultralight = "*", EditorUI = "*"}
[Project]
Name = "GlitchyEditor"
TargetType = "BeefGUIApplication"
StartupObject = "GlitchyEngine.Program"
ProcessorMacros = ["GE_EDITOR_IMGUI_DEMO"]
[Configs.Debug.Win64]
PostBuildCmds = ["CopyFilesIfNewer(\"$(WorkspaceDir)/bin/vswhere.exe\", \"$(TargetDir)\")"]
DebugCommandArguments = "\"D:\\Development\\Git\\SingleStateToOrbit\""
[Configs.Release.Win64]
PostBuildCmds = ["CopyFilesIfNewer(\"$(WorkspaceDir)/bin/vswhere.exe\", \"$(TargetDir)\")"]
[Configs.Paranoid.Win64]
PostBuildCmds = ["CopyFilesIfNewer(\"$(WorkspaceDir)/bin/vswhere.exe\", \"$(TargetDir)\")"]
[Configs.Test.Win64]
PostBuildCmds = ["CopyFilesIfNewer(\"$(WorkspaceDir)/bin/vswhere.exe\", \"$(TargetDir)\")"]
+26
View File
@@ -0,0 +1,26 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo
+13
View File
@@ -0,0 +1,13 @@
FileVersion = 1
[Project]
Name = "EditorUI"
TargetType = "BeefLib"
StartupObject = "EditorUI.Program"
[Configs.Debug.Win64]
BuildKind = "StaticLib"
BuildCommandsOnCompile = "IfFilesChanged"
BuildCommandsOnRun = "IfFilesChanged"
PreBuildCmds = ["npm run build:debug"]
PostBuildCmds = ["CopyToDependents(\"$(ProjectDir)/dist\")"]
+50
View File
@@ -0,0 +1,50 @@
# React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
- Configure the top-level `parserOptions` property like this:
```js
export default tseslint.config({
languageOptions: {
// other options...
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
},
})
```
- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked`
- Optionally add `...tseslint.configs.stylisticTypeChecked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config:
```js
// eslint.config.js
import react from 'eslint-plugin-react'
export default tseslint.config({
// Set the react version
settings: { react: { version: '18.3' } },
plugins: {
// Add the react plugin
react,
},
rules: {
// other rules...
// Enable its recommended rules
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
},
})
```
+39
View File
@@ -0,0 +1,39 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'
export default tseslint.config(
{ignores: ['dist']},
{
extends: [js.configs.recommended, ...tseslint.configs.recommended],
files: ['**/*.{ts,tsx}'],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname
}
},
plugins: {
'react-hooks': reactHooks,
'react-refresh': reactRefresh,
},
rules: {
...reactHooks.configs.recommended.rules,
'react-refresh/only-export-components': [
'warn',
{allowConstantExport: true},
],
"@typescript-eslint/no-unused-vars": ["warn", {
"vars": "all",
"args": "all",
"caughtErrors": "all",
"ignoreRestSiblings": false,
"reportUsedIgnorePattern": false
}],
},
},
)
+13
View File
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/x-icon" href="/src/assets/GlitchyEngineTransparent.png">
<title>Glitchy Engine</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
+36
View File
@@ -0,0 +1,36 @@
{
"name": "glitchy-editor-ui",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"build:debug": "tsc -b && vite --config vite.config.debug.ts build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"@rollup/plugin-typescript": "^12.1.1",
"dockview-react": "^1.17.2",
"eslint-plugin-react": "^7.37.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"use-immer": "^0.10.0"
},
"devDependencies": {
"@eslint/js": "^9.11.1",
"@types/node": "^22.9.0",
"@types/react": "^18.3.10",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.2",
"eslint": "^9.11.1",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.12",
"globals": "^15.9.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.7.0",
"vite": "^5.4.8",
"vite-plugin-eslint": "^1.8.1"
}
}
File diff suppressed because it is too large Load Diff
Binary file not shown.
View File
+6
View File
@@ -0,0 +1,6 @@
import './App.css'
import MainWindow from "./Windows/MainWindow.tsx";
export default function App() {
return <MainWindow/>;
}
@@ -0,0 +1,31 @@
import {RefObject, useEffect} from "react";
/**
* Calls the specified callback when the user clicks somewhere outside the referenced HTML-Element.
* @param ref The element.
* @param callback The callback.
* @param addEventListener If true, the event listener will be registered.
*/
export const useClickOutside = (
ref: RefObject<HTMLElement | undefined>,
callback: () => void,
addEventListener = true,
) => {
useEffect(() => {
const handleClick = (event: MouseEvent) => {
if (ref.current && !ref.current.contains(event.target as HTMLElement))
{
callback();
}
}
if (addEventListener)
{
document.addEventListener('click', handleClick);
}
return () => {
document.removeEventListener('click', handleClick);
}
})
}
@@ -0,0 +1,94 @@
import {
DockviewReact,
DockviewReadyEvent,
IDockviewPanelProps,
} from 'dockview';
import {ChangeEvent, ReactElement, useState} from "react";
import EntityHierarchyWindow from "../Windows/EntityHierarchyWindow.tsx";
import CursorTestWindow from "../Windows/CursorTestWindow.tsx";
const components = {
default: DefaultWindow,
entityHierarchy: EntityHierarchyWindow,
editPanel: CursorTestWindow
};
function DefaultWindow(props: IDockviewPanelProps<{ myValue: string }>): ReactElement
{
const [title, setTitle] = useState<string>(props.api.title ?? '');
const onChange = (event: ChangeEvent<HTMLInputElement>) => {
setTitle(event.target.value);
};
const onClick = () => {
props.api.setTitle(title);
};
return (
<div style={{ padding: '20px', color: 'white' }}>
<div>
<span style={{ color: 'grey' }}>{'props.api.title='}</span>
<span>{`${props.api.title}`}</span>
</div>
<input value={title} onChange={onChange} />
<button onClick={onClick}>Change</button>
</div>
);
}
export default function Dock({ theme } : { theme?: string})
{
const onReady = (event: DockviewReadyEvent) => {
const entityHierarchyPanel = event.api.addPanel({
id: 'entity_hierarchy_panel',
component: 'entityHierarchy',
title: 'Entity Hierarchy'
});
const editPanel = event.api.addPanel({
id: 'edit_scene',
component: 'editPanel',
title: 'Edit',
position: { referencePanel: entityHierarchyPanel, direction: "right" }
});
/*const playPanel =*/ event.api.addPanel({
id: 'play_scene',
component: 'default',
title: 'Play',
position: { referencePanel: editPanel }
});
/*const propertiesPanel =*/ event.api.addPanel({
id: 'properties_panel',
component: 'default',
title: 'Properties',
position: { referencePanel: editPanel, direction: "right" }
});
const logPanel = event.api.addPanel({
id: 'log_panel',
component: 'default',
title: 'Log',
position: { direction: "below" }
});
/*const assetBrowserPanel =*/ event.api.addPanel({
id: 'asset_browser_panel',
component: 'default',
title: 'Assets',
position: { referencePanel: logPanel }
});
};
return (
<DockviewReact
components={components}
onReady={onReady}
className={`dock ${theme || 'dockview-theme-vs'}`}
/>
);
}
@@ -0,0 +1,10 @@
import {MouseEventHandler, ReactElement} from "react";
export function IconCheckButton({isChecked, iconChecked, iconUnchecked, onClick} : {isChecked: boolean, iconChecked: string, iconUnchecked: string, onClick: MouseEventHandler }) : ReactElement
{
return (
<div onClick={onClick}>
<img src={isChecked ? iconChecked : iconUnchecked} alt="" />
</div>
);
}
@@ -0,0 +1,127 @@
.menu-bar
{
width: 100%;
background-color: var(--menu-bar-background-color);
grid-area: menubar;
display: flex;
justify-content: start;
list-style: none;
white-space: nowrap;
align-items: center;
--menu-item-height: 1.5em;
}
/* Remove indentation from lists for menu */
.menu-bar, .sub-menu {
padding-inline-start: 0;
}
.menu-item
{
/* Doesn't change our position, but does something to it, so that
following absolutes are relative to us? */
position: relative;
height: var(--menu-item-height);
}
.menu-item__content
{
display: flex;
justify-content: space-between;
}
.menu-item__hotkey
{
color: var(--menu-bar-hotkey-color);
justify-self: flex-end;
margin-left: 2em;
}
/* If menu-item has a submenu, make space for the arrow */
.menu-item a:has(+.sub-menu)
{
padding-right: 1em;
margin-right: auto;
}
/* Show arrow for submenus */
.menu-item a:has(+.sub-menu)::after
{
content: "⯆";
position: absolute;
right: 0;
top: 0;
transition-duration: var(--small-transition-duration);
}
/* If it is a nested submenu, forget the char above and use this one instead! */
.sub-menu .menu-item a:has(+.sub-menu)::after
{
content: "⯈";
}
.menu-item a:has(+.sub-menu.open)::after
{
rotate: 180deg;
}
.menu-item a
{
/* Make the a fill the entire width of menu-item */
display: block;
text-decoration: none;
color: var(--font-color-primary);
height: 100%;
align-content: center;
/*padding: 5px 5px;*/
}
.menu-item a:hover
{
background-color: var(--menu-bar-background-color-hover);
}
.menu-item a:active
{
background-color: var(--menu-bar-background-color-click);
}
.sub-menu
{
min-width: 120px;
/* Hide submenu by default */
display: none;
overflow: visible;
overflow-anchor: none;
position: fixed;
background-color: var(--menu-bar-background-color-click);
list-style: none;
z-index: 10;
height: min-content;
}
/* Show submenu */
.sub-menu.open
{
display: revert;
scale: 100% 100%;
}
.sub-menu .menu-item .sub-menu
{
translate: 0 calc(var(--menu-item-height) * -1);
left: 100%;
}
.sub-menu li
{
width: 100%;
}
@@ -0,0 +1,81 @@
import {createContext, PropsWithChildren, useContext, useRef, useState} from "react";
import "./Menu.css"
import {useClickOutside} from "../Callbacks/UseClickOutside.tsx";
export const OpenMenuContext = createContext<{openMenu: string[], currentParentMenu: string[], onOpenMenu: (clickedMenu: string[]) => void}>({openMenu: [], currentParentMenu: [], onOpenMenu: () => {}});
export function MenuBar({children}: PropsWithChildren)
{
const ref = useRef(null);
const [openMenu, setOpenMenu] = useState<string[]>([]);
function handleClickOutside()
{
setOpenMenu([]);
}
useClickOutside(ref, handleClickOutside, openMenu.length > 0);
function handleOpenSubmenu(clickedMenu: string[])
{
setOpenMenu(clickedMenu);
}
return (
<ul ref={ref} className="menu-bar">
<OpenMenuContext.Provider value={{openMenu, currentParentMenu: [], onOpenMenu: handleOpenSubmenu}}>
{children}
</OpenMenuContext.Provider>
</ul>
);
}
export function MenuItem({ text, hotkey, onClick, children } : { text: string, hotkey?: string, onClick?: () => void} & PropsWithChildren)
{
const {openMenu, currentParentMenu, onOpenMenu: setOpenMenu} = useContext(OpenMenuContext);
const isOpen = openMenu[currentParentMenu.length] == text;
const hasSubmenu = children !== undefined;
const currentMenu = [...currentParentMenu, text];
function handleClick()
{
if (hasSubmenu)
{
setOpenMenu(isOpen ? currentParentMenu : currentMenu);
}
if (onClick)
{
onClick();
}
}
return (
<li className="menu-item">
<a href="#" onClick={handleClick}>
<div className="menu-item__content">
<div>{text}</div>
{hotkey && <div className="menu-item__hotkey">{hotkey}</div>}
</div>
</a>
{children && (
<ul className={`sub-menu ${isOpen ? "open" : ""}`}>
<OpenMenuContext.Provider
value={{openMenu, currentParentMenu: currentMenu, onOpenMenu: setOpenMenu}}>
{children}
</OpenMenuContext.Provider>
</ul>
)}
</li>
);
}
export function MenuDivider()
{
return <hr/>;
}
@@ -0,0 +1,95 @@
.backdrop
{
position: absolute;
width: 100vw;
height: 100vh;
background-color: #00000050;
z-index: 10;
animation: blur-in 1s forwards;
}
@keyframes blur-in {
from {
backdrop-filter: blur(0px);
}
to {
backdrop-filter: blur(3px);
}
}
@property --angle {
syntax: "<angle>";
initial-value: 0deg;
inherits: true;
}
@keyframes spin {
from {
--angle: 0deg;
}
to {
--angle: 360deg;
}
}
.card
{
position: absolute;
padding: 1em;
left: 50%;
top: 50%;
translate: -50% -50%;
margin: auto auto;
width: 300px;
height: 300px;
background-color: gray;
border-radius: 30px;
z-index: 100;
transform-style: preserve-3d;
animation: 3s spin linear infinite;
}
.card::before, .card::after
{
content: '';
position: absolute;
width: 100%;
height: 100%;
left: 50%;
top: 50%;
translate: -50% -50%;
transform: translateZ(-1px);
padding: 3px;
border-radius: 30px;
z-index: -10;
background-image: conic-gradient(from var(--angle), #ff4545, #edd056, #00ff99, #006aff, #ff0095, #ff4545);
}
.card::before
{
filter: blur(10px);
}
.content
{
width: 100%;
height: 100%;
}
@@ -0,0 +1,24 @@
import {ReactElement} from "react";
import "./StartupCard.css"
export function StartupCard(): ReactElement
{
return (
<div className="backdrop">
<div className="card">
<div className="content">
<h1>Glitchy Engine</h1>
<h2>Projects:</h2>
<button>Create New</button>
<h3>Recent projects:</h3>
<ul>
<li>Bli</li>
<li>Bla</li>
<li>Blub</li>
</ul>
</div>
</div>
</div>
);
}
@@ -0,0 +1,11 @@
//
// This file exists so that vite build will only happen, if a file in the src-directory changed
//
using System;
namespace EditorUI;
[AlwaysInclude]
struct EditorUIPlaceholder
{
}
+103
View File
@@ -0,0 +1,103 @@
import {Entity, EntityId} from "./Entity.ts";
export interface IEngineGlue
{
// Titlebar Events
handleClickCloseWindow(): void;
handleClickMaximizeWindow(): void;
handleClickMinimizeWindow(): void;
handleHoverCloseWindow(hover: boolean): void;
handleHoverMaximizeWindow(hover: boolean): void;
handleHoverMinimizeWindow(hover: boolean): void;
handleHoverNonClientArea(hover: boolean): void;
onClickCreateEmptyEntity(): void;
setEntityVisibility(entityId: EntityId, isVisible: boolean): void;
requestEntityHierarchyUpdate(): void;
onUpdateEntities?: (entities: Entity[]) => void;
}
function logNotImplemented(functionName: string)
{
console.log(`${functionName} not implemented.`)
}
class DevEngineGlue implements IEngineGlue {
handleClickCloseWindow(): void
{
logNotImplemented("handleClickCloseWindow");
}
handleClickMaximizeWindow(): void
{
logNotImplemented("handleClickMaximizeWindow");
}
handleClickMinimizeWindow(): void
{
logNotImplemented("handleClickMinimizeWindow");
}
handleHoverCloseWindow(hover: boolean): void
{
logNotImplemented("handleHoverCloseWindow");
console.log(`Hover ${hover}`)
}
handleHoverMaximizeWindow(hover: boolean): void
{
logNotImplemented("handleHoverMaximizeWindow");
console.log(`Hover ${hover}`)
}
handleHoverMinimizeWindow(hover: boolean): void
{
logNotImplemented("handleHoverMinimizeWindow");
console.log(`Hover ${hover}`)
}
handleHoverNonClientArea(hover: boolean): void
{
logNotImplemented("handleHoverNonClientArea");
console.log(`Hover ${hover}`)
}
onClickCreateEmptyEntity(): void
{
logNotImplemented("onClickCreateEmptyEntity");
}
setEntityVisibility(entityId: EntityId, isVisible: boolean): void
{
logNotImplemented("onClickCreateEmptyEntity");
console.log(`entityId ${entityId} isVisible ${isVisible}`)
}
requestEntityHierarchyUpdate(): void
{
logNotImplemented("requestEntityHierarchyUpdate");
}
private callFromEngine_updateEntities(entities: Entity[]): void
{
console.log("Yeah!")
if (EngineGlue.onUpdateEntities)
{
EngineGlue.onUpdateEntities(entities);
}
else
{
logNotImplemented("onUpdateEntities");
}
}
}
declare global
{
interface Window
{
EngineGlue: IEngineGlue;
}
}
if (typeof window.EngineGlue === 'undefined')
{
window.EngineGlue = new DevEngineGlue();
}
export const EngineGlue: IEngineGlue = window.EngineGlue;
+16
View File
@@ -0,0 +1,16 @@
export type EntityId = string;
export class Entity
{
name: string;
id: EntityId;
visible: boolean = true;
children: EntityId[];
constructor(name: string, id: EntityId, children: EntityId[] = [])
{
this.name = name;
this.id = id;
this.children = children;
}
}
@@ -0,0 +1,53 @@
.auto { cursor: auto; }
.default { cursor: default; }
.none { cursor: none; }
.context-menu { cursor: context-menu; }
.help { cursor: help; }
.pointer { cursor: pointer; }
.progress { cursor: progress; }
.wait { cursor: wait; }
.cell { cursor: cell; }
.crosshair { cursor: crosshair; }
.text { cursor: text; }
.vertical-text { cursor: vertical-text; }
.alias { cursor: alias; }
.copy { cursor: copy; }
.move { cursor: move; }
.no-drop { cursor: no-drop; }
.not-allowed { cursor: not-allowed; }
.all-scroll { cursor: all-scroll; }
.col-resize { cursor: col-resize; }
.row-resize { cursor: row-resize; }
.n-resize { cursor: n-resize; }
.e-resize { cursor: e-resize; }
.s-resize { cursor: s-resize; }
.w-resize { cursor: w-resize; }
.ns-resize { cursor: ns-resize; }
.ew-resize { cursor: ew-resize; }
.ne-resize { cursor: ne-resize; }
.nw-resize { cursor: nw-resize; }
.se-resize { cursor: se-resize; }
.sw-resize { cursor: sw-resize; }
.nesw-resize { cursor: nesw-resize; }
.nwse-resize { cursor: nwse-resize; }
.zoom-in { cursor: zoom-in; }
.zoom-out { cursor: zoom-out; }
.custom { cursor: url('Normal Select.cur'), auto; }
h1 {
color: #f06d06;
}
.cursors {
display: flex;
flex-wrap: wrap;
}
.cursors div
{
width: 100px;
height: 20px;
margin: 5px;
background-color: blue;
}
@@ -0,0 +1,50 @@
import {IDockviewPanelProps} from "dockview";
import "./CursorTestWindow.css"
export default function CursorTestWindow(props: IDockviewPanelProps)
{
return (
<>
<h1>CSS Cursors</h1>
<div className="cursors">
<div className="auto">auto</div>
<div className="default">default</div>
<div className="none">none</div>
<div className="context-menu">context-menu</div>
<div className="help">help</div>
<div className="pointer">pointer</div>
<div className="progress">progress</div>
<div className="wait">wait</div>
<div className="cell">cell</div>
<div className="crosshair">crosshair</div>
<div className="text">text</div>
<div className="vertical-text">vertical-text</div>
<div className="alias">alias</div>
<div className="copy">copy</div>
<div className="move">move</div>
<div className="no-drop">no-drop</div>
<div className="not-allowed">not-allowed</div>
<div className="all-scroll">all-scroll</div>
<div className="col-resize">col-resize</div>
<div className="row-resize">row-resize</div>
<div className="n-resize">n-resize</div>
<div className="s-resize">s-resize</div>
<div className="e-resize">e-resize</div>
<div className="w-resize">w-resize</div>
<div className="ns-resize">ns-resize</div>
<div className="ew-resize">ew-resize</div>
<div className="ne-resize">ne-resize</div>
<div className="nw-resize">nw-resize</div>
<div className="se-resize">se-resize</div>
<div className="sw-resize">sw-resize</div>
<div className="nesw-resize">nesw-resize</div>
<div className="nwse-resize">nwse-resize</div>
<div className="zoom-in">zoom-in</div>
<div className="zoom-out">zoom-out</div>
<div className="custom">custom</div>
</div>
</>
);
}
@@ -0,0 +1,50 @@
.filterEntities
{
margin-left: auto;
margin-right: 5px;
}
.tree-view__item
{
position: relative;
}
.tree-view__item__text
{
margin-right: 1em;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
position: relative;
}
/*li > ul {*/
/* margin-left: 10px;*/
/*}*/
.tree-view__item.selected
{
background-color: var(--tree-view-item-background-color-selected);
}
.tree-view__item:hover
{
background-color: var(--menu-bar-background-color-hover);
}
.tree-view__item:active
{
background-color: var(--menu-bar-background-color-click);
}
.tree-view__item img
{
/*display: block;*/
position: absolute;
right: 0;
top: 0;
width: 1em;
height: 1em;
filter: invert();
}
@@ -0,0 +1,251 @@
import {IDockviewPanelProps} from "dockview";
import {MenuBar, MenuItem} from "../Components/Menu.tsx";
import "./EntityHierarchyWindow.css";
import React, {MouseEvent, MouseEventHandler, ReactElement, useEffect, useState} from "react";
import IconVisible from "../assets/Icons/AntDesign/eye-visible.svg";
import IconInvisible from "../assets/Icons/AntDesign/eye-invisible.svg";
import {Updater, useImmer} from "use-immer";
import {EngineGlue} from "../EngineGlue";
import {enableMapSet} from "immer"
import {Entity, EntityId} from "../Entity.ts";
import {IconCheckButton} from "../Components/IconCheckButton.tsx";
enableMapSet()
type EntityMap = {
selectedIds: Set<EntityId>;
entities: Map<EntityId, Entity>;
//[id: EntityId]: Entity;
};
const entityHierarchy: EntityMap = {
selectedIds: new Set<EntityId>(),
entities: new Map<EntityId, Entity>([
["0", new Entity("Root", "0", ["1", "2"])],
["1", new Entity("Entity 1", "1", [])],
["2", new Entity("Entity 2", "2", ["3"])],
["3", new Entity("Entity 3 in 2", "3", [])]
])
// // 0 is hardcoded to be the root. The editor must provide this "pseudo"-entity.
// 0: new Entity("Root", 0, [1, 2]),
// 1: new Entity("Entity 1", 1, []),
// 2: new Entity("Entity 2", 2, [3]),
// 3: new Entity("Entity 3 in 2", 3, [])
};
export default function EntityHierarchyWindow(props: IDockviewPanelProps)
{
const [entities, updateEntities] = useImmer(entityHierarchy);
const [filterText, setFilterText] = useState("");
useEffect(() => {
EngineGlue.onUpdateEntities = (entities: Entity[]) => {
updateEntities(draft => {
try
{
for (const entity of entities)
{
// console.log(`${entity.id}: "${entity.name ?? "deleted"}",
// ${entity.visible ? "Visible" : "Invisible"}, ${entity.children.length} Children: [${entity.children}]`)
if (entity.name === "undefined")
{
draft.entities.delete(entity.id);
//delete draft[entity.id];
draft.selectedIds.delete(entity.id);
}
else
{
draft.entities.set(entity.id, entity);
//draft[entity.id] = entity;
}
}
}
catch (e)
{
console.log(`Failed to update entities: ${e}`);
}
});
};
EngineGlue.requestEntityHierarchyUpdate();
return () => {
delete EngineGlue.onUpdateEntities;
};
}, [updateEntities]);
return (
<>
<EntityMenuBar searchString={filterText} onFilterTextChanged={setFilterText} />
<EntityTree items={entities} updateItems={updateEntities} entityFilter={filterText}/>
</>
);
}
function EntityTreeItem({item, allEntities, updateEntities, showAsTree}: {
item: Entity,
allEntities: EntityMap, updateEntities: Updater<EntityMap>, showAsTree: boolean}) : ReactElement
{
//const [isOpen, setOpen] = useState(false);
const isSelected = allEntities.selectedIds.has(item.id);
//const isVisible = allEntities[item.id].visible;
function handleClick(event: MouseEvent)
{
console.log("Clicked" + item.name);
updateEntities(draft => {
if (isSelected)
{
draft.selectedIds.delete(item.id);
}
else
{
draft.selectedIds.add(item.id);
}
});
event.stopPropagation();
}
function toggleVisibility(event: MouseEvent)
{
event.stopPropagation();
// updateEntities(draft => {
// draft[item.id].visible = !draft[item.id].visible;
// });
//event.stopPropagation();
}
return (
<li>
<div className={"tree-view__item " + (isSelected ? "selected" : "")} onClick={handleClick}>
<div className="tree-view__item__text">
{item.name}
</div>
<VisibilityToggle item={item} onClick={toggleVisibility} updateEntities={updateEntities} />
</div>
{
showAsTree && item.children.length > 0 &&
<ul>
{
item.children.map((childId) => {
const entity = allEntities.entities.get(childId);
if (entity === undefined)
return;
return <EntityTreeItem key={entity.id} item={entity} allEntities={allEntities} updateEntities={updateEntities} showAsTree={showAsTree}/>;
})
}
</ul>
}
</li>
);
}
function VisibilityToggle({item, onClick, updateEntities} : {item: Entity, onClick: MouseEventHandler, updateEntities: Updater<EntityMap>}) {
function clickHandler(event: MouseEvent)
{
updateEntities(draft => {
const entity = draft.entities.get(item.id)
if (entity !== undefined)
{
entity.visible = !entity.visible;
EngineGlue.setEntityVisibility(entity.id, entity.visible);
}
});
onClick(event);
event.stopPropagation();
}
return <IconCheckButton isChecked={item.visible} onClick={clickHandler} iconChecked={IconVisible} iconUnchecked={IconInvisible}/>
}
function EntityTree({items, updateItems, entityFilter}: { items: EntityMap, updateItems: Updater<EntityMap>, entityFilter: string })
{
const rootEntity = items.entities.get("0");
if (entityFilter.length == 0)
{
return (
<ul className="tree-view">
{
rootEntity && rootEntity.children.map((childId) => {
const entity = items.entities.get(childId);
if (entity === undefined)
return;
return <EntityTreeItem key={entity.id} item={entity} allEntities={items} updateEntities={updateItems} showAsTree={true} />;
})
}
</ul>
);
}
else
{
return (
<ul className="tree-view">
{
Array.from(items.entities).filter(([, entity]) => {
return entity.name.indexOf(entityFilter) != -1
}).map(([, entity]) => {
return <EntityTreeItem key={entity.id} item={entity} allEntities={items}
updateEntities={updateItems} showAsTree={false}/>;
})
}
</ul>
);
}
}
function EntityMenuBar({searchString, onFilterTextChanged}: {
searchString: string,
onFilterTextChanged: (s: string) => void
})
{
return <MenuBar>
<MenuItem text="Create">
<MenuItem text="Empty Entity" onClick={window.EngineGlue.onClickCreateEmptyEntity}/>
<MenuItem text="Parent Entity">
<MenuItem text="Test 1 (lang)">
<MenuItem text="Du">
<MenuItem text="Übertreibst">
<MenuItem text="Völlig"/>
<MenuItem text="Du Hund!"/>
</MenuItem>
</MenuItem>
</MenuItem>
<MenuItem text="Test 2">
<MenuItem text="Ach komm,"/>
</MenuItem>
<MenuItem text="Test 3">
<MenuItem text="Hör auf!"/>
</MenuItem>
</MenuItem>
<MenuItem text="Child Entity"/>
</MenuItem>
<MenuItem text="Delete">
<MenuItem text="Selected"/>
<MenuItem text="All"/>
</MenuItem>
<MenuItem text="Copy">
</MenuItem>
<input className="filterEntities" placeholder="Filter entities..." content={searchString}
onChange={(e) => onFilterTextChanged(e.target.value)}/>
</MenuBar>;
}
@@ -0,0 +1,87 @@
.jep
{
display: grid;
grid-template-rows: min-content 1fr;
grid-template-areas:
"titlebar"
"dock";
width: 100vw;
height: 100vh;
}
.dock
{
grid-area: dock;
overflow: hidden;
}
.title-bar
{
grid-area: titlebar;
background-color: var(--menu-bar-background-color);
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: 1fr 1fr;
grid-template-areas:
"icon title"
"icon menubar";
align-items: center;
}
.title-bar__icon
{
grid-area: icon;
aspect-ratio : 1 / 1;
height: 100%;
/*height: 2em;*/
/*width: 2em;*/
background-image: url(/src/assets/GlitchyEngineTransparent.png);
background-size: contain;
mask: radial-gradient(white 65%, transparent 75%);
margin-right: 0.5em;
}
.title-bar__title
{
display: flex;
grid-area: title;
height: 2em;
align-items: center;
}
.engine-name
{
font-weight: bold;
margin-right: 1em;
}
.title-bar__button
{
grid-area: title;
height: 100%;
width: 47px;
background-color: transparent;
border: none;
color: white;
}
.title-bar__button:hover
{
background-color: gray;
}
.title-bar__button.minimize
{
margin-left: auto;
}
.title-bar__button.close:hover
{
background-color: red;
}
@@ -0,0 +1,102 @@
import "./MainWindow.css"
import Dock from "../Components/Dock.tsx";
import {MenuBar, MenuDivider, MenuItem} from "../Components/Menu.tsx";
import {ReactElement, useEffect, useRef} from "react";
import '../EngineGlue.ts'
import {EngineGlue} from "../EngineGlue.ts";
import {StartupCard} from "../Components/StartupCard.tsx";
//something = 'testing';
export default function MainWindow() {
const projectName = "Mein Geiles Projekt";
const fileName = "DefaultScene.scene";
return (
<div className="jep">
<TitleBar projectName={projectName} fileName={fileName}/>
<Dock/>
</div>
);
}
function TitleBar({ projectName, fileName } : {projectName: string, fileName: string}): ReactElement
{
// {false ? "🗗" : "🗖"}
return (
<div className="title-bar">
<div className="title-bar__icon"/>
<div className="title-bar__title"
onMouseEnter={() => EngineGlue.handleHoverNonClientArea(true)}
onMouseLeave={() => EngineGlue.handleHoverNonClientArea(false)}>
<div>
<span className="engine-name">Glitchy Engine</span> {projectName} - {fileName}
</div>
<button className="title-bar__button minimize"
onClick={() => EngineGlue.handleClickMinimizeWindow()}
onMouseOver={() => EngineGlue.handleHoverMinimizeWindow(true)}
onMouseLeave={() => EngineGlue.handleHoverMinimizeWindow(false)}>🗕</button>
<button className="title-bar__button maximize"
onClick={() => EngineGlue.handleClickMaximizeWindow()}
onMouseOver={() => EngineGlue.handleHoverMaximizeWindow(true)}
onMouseLeave={() => EngineGlue.handleHoverMaximizeWindow(false)}>🗖</button>
<button className="title-bar__button close"
onClick={() => EngineGlue.handleClickCloseWindow()}
onMouseOver={() => EngineGlue.handleHoverCloseWindow(true)}
onMouseLeave={() => EngineGlue.handleHoverCloseWindow(false)}>🗙</button>
</div>
<MainMenuBar/>
</div>
);
}
function MainMenuBar(): ReactElement
{
return (
<MenuBar>
<MenuItem text="File" onClick={() => {
console.log("Test")
}}>
<MenuItem text="New Scene..." hotkey="Ctrl + N" onClick={() => window.open("file:///index.html")}/>
<MenuItem text="Open Scene..." hotkey="Ctrl + O"/>
<MenuItem text="Open recent Scene">
<MenuItem text="1. Bli"/>
<MenuItem text="2. Bla"/>
<MenuItem text="3. Blub"/>
</MenuItem>
<MenuDivider/>
<MenuItem text="Save Scene" hotkey="Ctrl + S"/>
<MenuItem text="Save Scene as..." hotkey="Ctrl + Shift + S"/>
<MenuDivider/>
<MenuItem text="Create new Project..."/>
<MenuItem text="Open Project..."/>
<MenuItem text="Open recent Project">
<MenuItem text="1. Bli"/>
<MenuItem text="2. Bla"/>
<MenuItem text="3. Blub"/>
</MenuItem>
<MenuDivider/>
<MenuItem text="Settings..."/>
<MenuDivider/>
<MenuItem text="Exit" onClick={EngineGlue.handleClickCloseWindow} />
</MenuItem>
<MenuItem text="View">
<MenuItem text="Asset Browser"/>
<MenuItem text="Scene"/>
<MenuItem text="Entity Hierarchy"/>
<MenuItem text="Game"/>
<MenuItem text="Inspector"/>
<MenuItem text="Asset Viewer"/>
<MenuItem text="Log"/>
</MenuItem>
<MenuItem text="Tools">
<MenuItem text="Reload Script"/>
<label>
<input type="checkbox"/>
Show ImGui Demo
</label>
</MenuItem>
</MenuBar>
);
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,5 @@
<?xml version="1.0" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" class="icon">
<path d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 0 0 0-51.5zm-63.57-320.64L836 122.88a8 8 0 0 0-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 0 0 0 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 0 0 0 11.31L155.17 889a8 8 0 0 0 11.31 0l712.15-712.12a8 8 0 0 0 0-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 0 0-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 0 1 146.2-106.69L401.31 546.2A112 112 0 0 1 396 512z"/><path d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 0 0 227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 0 1-112 112z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,92 @@
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION AND CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,57 @@
/* Variable fonts usage:
:root { font-family: "Inter", sans-serif; }
@supports (font-variation-settings: normal) {
:root { font-family: "InterVariable", sans-serif; font-optical-sizing: auto; }
} */
@font-face {
font-family: InterVariable;
font-style: normal;
font-weight: 100 900;
font-display: swap;
src: url("InterVariable.woff2") format("woff2");
}
@font-face {
font-family: InterVariable;
font-style: italic;
font-weight: 100 900;
font-display: swap;
src: url("InterVariable-Italic.woff2") format("woff2");
}
/* static fonts */
@font-face { font-family: "Inter"; font-style: normal; font-weight: 100; font-display: swap; src: url("Inter-Thin.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 100; font-display: swap; src: url("Inter-ThinItalic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 200; font-display: swap; src: url("Inter-ExtraLight.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 200; font-display: swap; src: url("Inter-ExtraLightItalic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 300; font-display: swap; src: url("Inter-Light.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 300; font-display: swap; src: url("Inter-LightItalic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 400; font-display: swap; src: url("Inter-Regular.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 400; font-display: swap; src: url("Inter-Italic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 500; font-display: swap; src: url("Inter-Medium.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 500; font-display: swap; src: url("Inter-MediumItalic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 600; font-display: swap; src: url("Inter-SemiBold.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 600; font-display: swap; src: url("Inter-SemiBoldItalic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 700; font-display: swap; src: url("Inter-Bold.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 700; font-display: swap; src: url("Inter-BoldItalic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 800; font-display: swap; src: url("Inter-ExtraBold.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 800; font-display: swap; src: url("Inter-ExtraBoldItalic.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 900; font-display: swap; src: url("Inter-Black.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 900; font-display: swap; src: url("Inter-BlackItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 100; font-display: swap; src: url("InterDisplay-Thin.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 100; font-display: swap; src: url("InterDisplay-ThinItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 200; font-display: swap; src: url("InterDisplay-ExtraLight.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 200; font-display: swap; src: url("InterDisplay-ExtraLightItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 300; font-display: swap; src: url("InterDisplay-Light.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 300; font-display: swap; src: url("InterDisplay-LightItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 400; font-display: swap; src: url("InterDisplay-Regular.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 400; font-display: swap; src: url("InterDisplay-Italic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 500; font-display: swap; src: url("InterDisplay-Medium.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 500; font-display: swap; src: url("InterDisplay-MediumItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 600; font-display: swap; src: url("InterDisplay-SemiBold.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 600; font-display: swap; src: url("InterDisplay-SemiBoldItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 700; font-display: swap; src: url("InterDisplay-Bold.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 700; font-display: swap; src: url("InterDisplay-BoldItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 800; font-display: swap; src: url("InterDisplay-ExtraBold.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 800; font-display: swap; src: url("InterDisplay-ExtraBoldItalic.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 900; font-display: swap; src: url("InterDisplay-Black.woff2") format("woff2"); }
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 900; font-display: swap; src: url("InterDisplay-BlackItalic.woff2") format("woff2"); }
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,5 @@
<?xml version="1.0" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" class="icon">
<path d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 0 0 0-51.5zm-63.57-320.64L836 122.88a8 8 0 0 0-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 0 0 0 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 0 0 0 11.31L155.17 889a8 8 0 0 0 11.31 0l712.15-712.12a8 8 0 0 0 0-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 0 0-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 0 1 146.2-106.69L401.31 546.2A112 112 0 0 1 396 512z"/><path d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 0 0 227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 0 1-112 112z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,5 @@
<?xml version="1.0" standalone="no"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" class="icon">
<path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 0 0 0 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"/>
</svg>

After

Width:  |  Height:  |  Size: 741 B

+73
View File
@@ -0,0 +1,73 @@
@import "assets/Fonts/Inter/inter.css";
@import '../node_modules/dockview-react/dist/styles/dockview.css';
*
{
margin: 0;
padding: 0;
user-select: none;
-webkit-user-select: none;
/*cursor: default;*/
}
/* Fix indentation of nested lists */
ul, ol {
padding-inline-start: 40px;
}
/* Variable Declaration for themes */
:root
{
--font-color-primary: white;
/* Menu Bar */
--menu-bar-background-color: #404040;
--menu-bar-background-color-hover: #808080;
--menu-bar-background-color-click: #606060;
--menu-bar-hotkey-color: #A0A0A0;
--tree-view-item-background-color-selected: #323275;
--small-transition-duration: 0.1s;
--text-box-background-color: #2c2c2c;
--text-box-border-color: #a5a5a5;
--text-box-border-color-focus: #007acc;
--text-box-border-color-disabled: #4e4e4e;
}
:root
{
font-family: "Inter", sans-serif;
/* Disable selection by default. But for some reason webkit does it differently than chorme...*/
user-select: none;
-webkit-user-select: none;
cursor: default;
color: var(--font-color-primary);
}
@supports (font-variation-settings: normal)
{
:root
{
font-family: "InterVariable", sans-serif; font-optical-sizing: auto;
}
}
input[type=text], input
{
background-color: var(--text-box-background-color);
color: var(--font-color-primary);
border: 2px solid var(--text-box-border-color);
border-radius: 3px;
padding: 1px 2px;
transition: border-color var(--small-transition-duration);
}
input[type=text]:focus, input:focus
{
outline: none;
border-color: var(--text-box-border-color-focus);
}
+14
View File
@@ -0,0 +1,14 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import './assets/Fonts/Inter/inter.css'
import './index.css'
import 'dockview/dist/styles/dockview.css';
// Ultralight 1.4 = Safari 16.4.1 / WebKit 615.1.18.100.1 (March 2023)
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />
+24
View File
@@ -0,0 +1,24 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true
},
"include": ["src"]
}
+7
View File
@@ -0,0 +1,7 @@
{
"files": [],
"references": [
{ "path": "./tsconfig.app.json" },
{ "path": "./tsconfig.node.json" }
]
}
+22
View File
@@ -0,0 +1,22 @@
{
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2023"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true
},
"include": ["vite.config.ts"]
}
@@ -0,0 +1,25 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig(({ mode }) => {
const isDebug = mode === 'debug'
return {
plugins: [react()],
base: "./",
build: {
target: "es2015",
minify: false,
terserOptions: undefined,
rollupOptions: {
preserveModules: true,
output: {
dir: 'dist',
entryFileNames: '[name].js',
chunkFileNames: '[name].js',
assetFileNames: '[name].[ext]'
}
}
}
}
})
+17
View File
@@ -0,0 +1,17 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
base: "./",
build:
{
target: "es2015",
terserOptions: {
mangle: {
reserved: ['EngineGlue']
}
}
}
})
+1
View File
@@ -0,0 +1 @@
project_user.bon
Binary file not shown.
@@ -0,0 +1,5 @@
{
AssetLoader = "ModelAssetLoader",
Config = (GlitchyEditor.Assets.ModelAssetLoaderConfig){}/* No reflection data for GlitchyEditor.Assets.ModelAssetLoaderConfig. Add [BonTarget] or force it */,
AssetHandle = 141014598923215615
}
@@ -0,0 +1,5 @@
{
AssetLoader = "ModelAssetLoader",
Config = (GlitchyEditor.Assets.ModelAssetLoaderConfig){}/* No reflection data for GlitchyEditor.Assets.ModelAssetLoaderConfig. Add [BonTarget] or force it */,
AssetHandle = 11221639476224465119
}
@@ -0,0 +1,119 @@
{
Name = "Scene name here pls!!!",
Entities = [
{
Id = 8726995825602656358,
NameComponent = {
Name = "Camera"
},
TransformComponent = {
Position = {
X = 0,
Y = 2,
Z = -5
},
Rotation = {
X = 0,
Y = 0.21643962,
Z = 0,
W = 0.976296008
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0.436332315,
Z = 0
}
},
CameraComponent = {
Primary = true,
ProjectionType = .InfinitePerspective,
PerspectiveFovY = 1.30899692,
PerspectiveNearPlane = 0.100000001,
PerspectiveFarPlane = 10000,
OrthographicHeight = 10,
OrthographicNearPlane = 0,
OrthographicFarPlane = 10,
AspectRatio = 1.83772814,
FixedAspectRatio = false
}
},
{
Id = 5254899955475338567,
NameComponent = {
Name = "Light"
},
TransformComponent = {
Position = {
X = -3,
Y = 4,
Z = -1.5
},
Rotation = {
X = 0.239775807,
Y = 0.61432755,
Z = 0.0315670744,
W = 0.751074195
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0.3490659,
Y = 1.3089968,
Z = 0.34906587
}
},
LightComponent = {
LightType = .Directional,
Illuminance = 10,
Color = {
R = 1,
G = 0.949999988,
B = 0.800000012
}
}
},
{
Id = 10018854473822844403,
NameComponent = {
Name = "Entity"
},
TransformComponent = {
Position = {
X = 0,
Y = 0,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
MeshComponent = {
Mesh = 141014598923215615
},
MeshRendererComponent = {
Material = 15093501654975430075
}
}
]
}
@@ -0,0 +1,224 @@
{
Name = "Scene name here pls!!!",
Entities = [
{
Id = 5169765174113462770,
NameComponent = {
Name = "Sphere"
},
TransformComponent = {
Position = {
X = 0,
Y = 0.5,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
MeshComponent = {
Mesh = "Assets/Models/sphere.glb"
},
MeshRendererComponent = {
Material = "Assets/Textures/TestMaterial.mat"
}
},
{
Id = 17158420331978163131,
NameComponent = {
Name = "Light"
},
TransformComponent = {
Position = {
X = -1,
Y = 4,
Z = -4
},
Rotation = {
X = 0.614328027,
Y = 0.23977606,
Z = 0.0315669999,
W = 0.751073778
},
Scale = {
X = 0.999998808,
Y = 1,
Z = 1.00000095
},
EditorEulerRotation = {
X = 1.30899811,
Y = 0.349065989,
Z = 0.349065989
}
},
LightComponent = {
LightType = .Directional,
Illuminance = 10,
Color = {
R = 1,
G = 0.991771996,
B = 0.74086231
}
}
},
{
Id = 5556050645816939548,
NameComponent = {
Name = "Plane"
},
TransformComponent = {
Position = {
X = 0,
Y = 0,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 10,
Y = 1,
Z = 10
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
MeshComponent = {
Mesh = "Assets/Models/plane.glb"
},
MeshRendererComponent = {
Material = "Assets/Textures/TestMaterial.mat"
}
},
{
Id = 3947673900993587516,
NameComponent = {
Name = "Camera"
},
TransformComponent = {
Position = {
X = 0,
Y = 2,
Z = -5
},
Rotation = {
X = 0.216440007,
Y = 0,
Z = 0,
W = 0.976296008
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0.436332017,
Y = 0,
Z = 0
}
},
CameraComponent = {
Primary = true,
ProjectionType = .InfinitePerspective,
PerspectiveFovY = 1.30899692,
PerspectiveNearPlane = 0.100000001,
PerspectiveFarPlane = 10000,
OrthographicHeight = 10,
OrthographicNearPlane = 0,
OrthographicFarPlane = 10,
AspectRatio = 1.87453413,
FixedAspectRatio = false
}
},
{
Id = 420718992779301759,
NameComponent = {
Name = "Entity"
},
TransformComponent = {
Position = {
X = 3,
Y = 0.501076996,
Z = -0.669378757
},
Rotation = {
X = 0.18301262,
Y = -0.683013558,
Z = 0.683012187,
W = 0.183013007
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 1.57079458,
Y = -2.61799288,
Z = 0
}
},
MeshComponent = {
Mesh = ""
},
MeshRendererComponent = {
Material = ""
}
},
{
Id = 8080288871271083510,
NameComponent = {
Name = "Rocket"
},
TransformComponent = {
Position = {
X = 2.37353563,
Y = 0.629615188,
Z = -1.34831977
},
Rotation = {
X = 0.270598024,
Y = -0.65328151,
Z = 0.65328151,
W = 0.270598054
},
Scale = {
X = 0.999999821,
Y = 0.999999762,
Z = 0.999999702
},
EditorEulerRotation = {
X = 1.57079649,
Y = -2.35619426,
Z = 8.94069601e-08
}
},
MeshComponent = {
Mesh = "Assets/Models/plane.glb"
},
MeshRendererComponent = {
Material = "Assets/Textures/RocketMaterial.mat"
}
}
]
}
@@ -0,0 +1,212 @@
{
Name = "Scene name here pls!!!",
Entities = [
{
Id = 6000868443984780499,
NameComponent = {
Name = "Child"
},
SpriterRendererComponent = {
Color = {
R = 1,
G = 0.388184,
B = 0.090109,
A = 1
},
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
ParentId = 820806682740348099,
Position = {
X = 0,
Y = 0.75,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 0.5,
Y = 0.5,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
}
},
{
Id = 820806682740348099,
NameComponent = {
Name = "Quad"
},
SpriterRendererComponent = {
Color = {
R = 0,
G = 0.551178,
B = 0.328787,
A = 1
},
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = 0,
Y = 2,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
Rigidbody2D = {
BodyType = .Dynamic,
FixedRotation = false
},
BoxCollider2D = {
Offset = {
X = 0,
Y = 0
},
Size = {
X = 0.5,
Y = 0.5
},
Density = 1,
Friction = 0.5,
Restitution = 0,
RestitutionThreshold = 0.5
}
},
{
Id = 15398726361722237419,
NameComponent = {
Name = "Floor"
},
SpriterRendererComponent = {
Color = {
R = 1,
G = 0.941886,
B = 0.401485,
A = 1
},
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = 0,
Y = -0.5,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 10,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
Rigidbody2D = {
BodyType = .Static,
FixedRotation = false
},
BoxCollider2D = {
Offset = {
X = 0,
Y = 0
},
Size = {
X = 0.5,
Y = 0.5
},
Density = 1,
Friction = 0.5,
Restitution = 0,
RestitutionThreshold = 0.5
}
},
{
Id = 1491484622542812645,
NameComponent = {
Name = "Camera"
},
TransformComponent = {
Position = {
X = 0,
Y = 1,
Z = -5
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
CameraComponent = {
Primary = true,
ProjectionType = .InfinitePerspective,
PerspectiveFovY = 1.308997,
PerspectiveNearPlane = 0.1,
PerspectiveFarPlane = 10000,
OrthographicHeight = 10,
OrthographicNearPlane = 0,
OrthographicFarPlane = 10,
AspectRatio = 2.116827,
FixedAspectRatio = false
}
}
]
}
@@ -0,0 +1,505 @@
{
Name = "Scene name here pls!!!",
Entities = [
{
Id = 820806682740348099,
NameComponent = {
Name = "Quad"
},
SpriteRendererComponent = {
Color = {
R = 0,
G = 0.55117774,
B = 0.32878688,
A = 1
},
Sprite = "Assets/Textures/TestMat/rustediron2_albedo.png",
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = -0.72789681,
Y = 2,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
Rigidbody2D = {
BodyType = .Dynamic,
FixedRotation = false
},
BoxCollider2D = {
Offset = {
X = 0,
Y = 0
},
Size = {
X = 0.5,
Y = 0.5
},
Density = 1,
Friction = 0.5,
Restitution = 0,
RestitutionThreshold = 0.5
}
},
{
Id = 15398726361722237419,
NameComponent = {
Name = "Floor"
},
SpriteRendererComponent = {
Color = {
R = 1,
G = 0.941887021,
B = 0.401484489,
A = 1
},
Sprite = "",
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = 0,
Y = -0.5,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 10,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
Rigidbody2D = {
BodyType = .Static,
FixedRotation = false
},
BoxCollider2D = {
Offset = {
X = 0,
Y = 0
},
Size = {
X = 0.5,
Y = 0.5
},
Density = 1,
Friction = 0.5,
Restitution = 0,
RestitutionThreshold = 0.5
}
},
{
Id = 1491484622542812645,
NameComponent = {
Name = "Camera"
},
TransformComponent = {
Position = {
X = 0,
Y = 1,
Z = -5
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
CameraComponent = {
Primary = true,
ProjectionType = .InfinitePerspective,
PerspectiveFovY = 1.30899692,
PerspectiveNearPlane = 0.100000001,
PerspectiveFarPlane = 10000,
OrthographicHeight = 10,
OrthographicNearPlane = 0,
OrthographicFarPlane = 10,
AspectRatio = 2.05582929,
FixedAspectRatio = false
},
ScriptComponent = {
ScriptClass = "Sandbox.Camera",
Fields = [
DistanceFromPlayer = (Float)-7,
DontFollowRadius = (Float)3
] }
},
{
Id = 15710354273720487680,
NameComponent = {
Name = "Player"
},
CircleRendererComponent = {
Color = {
R = 1,
G = 0,
B = 0,
A = 1
},
InnerRadius = 0.300000012,
Sprite = "",
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = -0.121203206,
Y = 0.660161078,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
Rigidbody2D = {
BodyType = .Dynamic,
FixedRotation = false
},
CircleCollider2D = {
Offset = {
X = 0,
Y = 0
},
Radius = 0.5,
Density = 1,
Friction = 0.5,
Restitution = 0,
RestitutionThreshold = 0.5
},
ScriptComponent = {
ScriptClass = "Sandbox.MyTestEntity",
Fields = [
_rigidBody = (Component)15710354273720487680,
TheEntity = (Entity)0,
JumpForce = (Float)200,
MoveForce = (Float)148,
MyNumber = (Int)22,
Camera = (Entity)1491484622542812645
] }
},
{
Id = 935640822766280888,
NameComponent = {
Name = "Light"
},
TransformComponent = {
Position = {
X = 3.88327599,
Y = 0,
Z = -0.808795214
},
Rotation = {
X = 0.497987002,
Y = -0.103420995,
Z = 0.155380026,
W = 0.846859217
},
Scale = {
X = 0.999997795,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 1.09089541,
Y = -0.340793997,
Z = 0.160857871
}
},
LightComponent = {
LightType = .Directional,
Illuminance = 12.8999996,
Color = {
R = 0.985467017,
G = 1,
B = 0.569977939
}
}
},
{
Id = 721949523193525565,
NameComponent = {
Name = "Sphere"
},
TransformComponent = {
Position = {
X = 0,
Y = 0,
Z = 2.56930423
},
Rotation = {
X = 0,
Y = 0,
Z = 0,
W = 1
},
Scale = {
X = 1,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0
}
},
MeshComponent = {
Mesh = "Assets/Models/sphere.glb"
},
MeshRendererComponent = {
Material = "Assets/Textures/TestMaterial.mat"
}
},
{
Id = 2241063100006479259,
NameComponent = {
Name = "Floor 2"
},
SpriteRendererComponent = {
Color = {
R = 0.425658971,
G = 0.855207443,
B = 0.0558161177,
A = 1
},
Sprite = "",
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = 6.74610233,
Y = -2.03225946,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = -0.331792623,
W = 0.94335258
},
Scale = {
X = 5.29557419,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = -0.676406503
}
},
Rigidbody2D = {
BodyType = .Static,
FixedRotation = false
},
BoxCollider2D = {
Offset = {
X = 0,
Y = 0
},
Size = {
X = 0.5,
Y = 0.5
},
Density = 1,
Friction = 0.5,
Restitution = 0,
RestitutionThreshold = 0.5
}
},
{
Id = 5126705881069187728,
NameComponent = {
Name = "Floor 3"
},
SpriteRendererComponent = {
Color = {
R = 0.666117013,
G = 0.0600316115,
B = 1,
A = 1
},
Sprite = "",
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = 15.2321281,
Y = -1.98709273,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0.134986058,
W = 0.990847468
},
Scale = {
X = 13.9764528,
Y = 1,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0.270798802
}
},
Rigidbody2D = {
BodyType = .Static,
FixedRotation = false
},
BoxCollider2D = {
Offset = {
X = 0,
Y = 0
},
Size = {
X = 0.5,
Y = 0.5
},
Density = 1,
Friction = 0.5,
Restitution = 0.800000012,
RestitutionThreshold = 0.5
}
},
{
Id = 6861260438693901700,
NameComponent = {
Name = "Floor 4"
},
SpriteRendererComponent = {
Color = {
R = 0.176544309,
G = 0.666713238,
B = 0.687030852,
A = 1
},
Sprite = "",
UvTransform = {
X = 0,
Y = 0,
Z = 1,
W = 1
}
},
TransformComponent = {
Position = {
X = -6.27842855,
Y = 2.62550163,
Z = 0
},
Rotation = {
X = 0,
Y = 0,
Z = 0.187087879,
W = 0.982343197
},
Scale = {
X = 0.999999464,
Y = 6.49634314,
Z = 1
},
EditorEulerRotation = {
X = 0,
Y = 0,
Z = 0.376393616
}
},
Rigidbody2D = {
BodyType = .Static,
FixedRotation = false
},
BoxCollider2D = {
Offset = {
X = 0,
Y = 0
},
Size = {
X = 0.5,
Y = 0.5
},
Density = 1,
Friction = 0.5,
Restitution = 0.899999857,
RestitutionThreshold = 0.5
}
}
]
}
@@ -0,0 +1,398 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml

Some files were not shown because too many files have changed in this diff Show More