1,495 Commits over 1,157 Days - 0.05cph!
Party deck: fix avatar sizing, give margin between add button and party friends - Fixes Facepunch/sbox-issues#2453
Whitelist System.Private.CoreLib/System.Diagnostics.ConditionalAttribute
Whitelist System.Private.CoreLib/System.Text.*
Whitelist System.ObjectModel/System.Collections.Specialized.*
Whitelist System.Private.CoreLib/System.IO.StreamReader.get_* and Close()
Project creator folder selector works first time when path already exists - Fixes Facepunch/sbox-issues#2454
Server list spelling
Clip project path text so it doesn't overlap the settings icon
Saftey checks around memcpy in CCompositeParentSpaceState::CopyBoneTransformWeights to prevent crash, additional asserts to catch when this stuff is bad
CQAttributeEditor_SoundPicker: use path instead of name for sound events
Create a resource reference on sounds in maps so custom sounds will get properly uploaded and loaded with the map
This will require you to reselect sounds in your maps to update to their full paths, asset name only is obsolete
Load entity GameData after ToolsDll.OnAddonsCompiled instead of tools.refresh - I think this was accidentally still working somehow, but now it'll hotload and all that shit again
Fix errors in local projects preventing base loading for tools ( Hammer entities, ModelDoc data, base resources ), remove hack from Sandbox.Engine and make Sandbox.Tools responsible for compiling base before local projects are added to the compile group
Add MapNode.Parent property
Fallback to default code editor if selected code editor is no longer installed
Add IEnumerable<MapNode> MapNode.Children
Add MapPath and MapPathNode to C# API
MapGroup and MapInstance init their handles correctly
Hammer: Fix entities from newly uploaded asset.party games not working
CQBuildMapDialog::GetMapLaunchCommand wraps map name in quotes
Make sure Global.Server gets set OnServerInfo so Global.GameTitle and shit is avaliable, fixes rich presence not working too
Hammer: Fix base entities appearing as if they only belonged to certain local games
Only create this package.base Compiler in tools mode once again (for Hammer / GameData), since local compilations are now consolidated with base code
Add MapNode.Copy() creates a copy of the node and adds it to the current mapdoc
Make Hammer entities correctly categorize local projects again
Add map nodes MapGroup and MapInstance, example usage of MapInstance:
```
new MapInstance()
{
Position = Vector3.Up * 128.0f,
Target = Selection.All.First(),
};
```
Don't overflow the Embed network table with too many small files - maybe this should be limited to html, css only?
Make base compiler part of ServerContext.CompileGroup in non tools mode too so local games successfully compile
Fix uploading addons that target games using legacy uploaded assembly path
Make our access tests work with new uploaded assembly path
Project references normalize and encode properly for XML in SolutionGenerator so Visual Studio doesn't cry when seeing an &
Fix project reference for tools addons on toolbase -> tools
Make the project folders match with titlecase
A bit more Addon -> Project
Fix tool addons not working from referencing wrong toolbase
Skip replicating global usings in codegen, they were causing compilation errors because they need to precede non-globals.. but they're globals so we can just not replicate them instead.
Add `hammer.mapview.contextmenu ( Menu, MapView )` event for tool addons to add options to the map view's context menu
Add Qt Menu.Icon
Create point entities from map view context menu, most useful is going to be recent entities
https://files.facepunch.com/matt/1b2111b1/sbox_bEtaFtYvtm.png
Remove my old remote package code, this is all handled by vmap metadata now
Simple static Selection API for Hammer for getting / setting selected map nodes
Stop duplicate "Navigate to Folder" in asset context menu when multiple asset browsers exist
What the fuck did I make this native pointer nullable for
Add Hammer specific asset context menu for selecting objects using assets and that sort of stuff
https://files.facepunch.com/matt/1b1911b1/sbox_9pAdMcU4JQ.png
Asset browser can find cloud sounds, SoundDropTarget supports async setting from package
Asset publishing widget doesn't stomp potential asset editor
Can publish sound and soundscape assets
Handle null thumbnails for uploaded assets, I think garry's already made the backend auto generate them if nothing is provided
Add SoundscapeDropTarget so you can drag and drop soundscapes into your maps
Replace rect definition picker with our own whilst I'm here
Add Asset.GetAdditionalRelatedFiles()
Upload hotspot .rect for a material asset, only for single assets and not games
AssetList: don't encode a `file:///` URI in DragData.Text keeping it consistent with all native tools, fixes Hammer not accepting models dragged from our asset browser
Replace asset picking with our own in more native situations
* Improved the native API for opening our AssetPicker so it's easier to swap out the old embedded asset browsers
* QAssetSelectionWidget ( property sheets ) and QEmbeddedAssetPicker ( Active material ) use our AssetPicker
* Limit the ability for the AssetPicker to select cloud assets, when called from native we only allowed it when the context asset is a vmap
Pass parent widget to AssetPicker from native so lifecycles can't get fucked up
Cleanup and docs before merge
Only allow cloud assets in AssetPicker called from native if the context asset is a vmap since that's the only format we currently save cloud asset information to
Native can focus on an initial asset in the AssetPicker
Pass down a title / settings key from native to asset picker
Can filter by multiple asset types
Pass down m_StartingViewType to our AssetPicker so native can decide if list / grid is better
Refactor the native code for opening our C# AssetPicker - make it easier to slot in for the other embedded asset browsers and easier to extend
QAssetSelectionWidget ( used in propertysheets to select assets ) uses C# AssetPicker
Hide these buttons in QEmbeddedAssetPicker, I'd be surprised if anyone misses them
CQEmbeddedAssetPicker opens C# AssetPicker
Drop targets don't need to be public
MapNode creation/deletion has to be done on main thread, add asserts
Null safety checks on map node shit
Update to .NET 6.0.10
nullptr checks for Hammer.ActiveMap
MapEntity / MapMesh constructors will default to active map doc if not specified
MapView wraps CMapView so we can use it in addon space
Add `[CanDrop( string AssetFileExtension )]` that support `IMapViewDropTarget.DragEnter( Asset ... )`, make it all accessible to addon space
Move MaterialDropTarget to addon space
Hammer: Add SoundDropTarget - creates snd_event_point for .sound assets
Make Asset.TryLoadGameResource<T> work on compiled assets w/o source files by implementing in EngineGlue::LoadJsonAsset for compiled files
Hook up the CMapView's CToolCamera so we can have the camera pos/angles and able to build rays from 2d coords
Hammer traces return their hit MapNode by managed handle so can do `if ( tr.MapNode is MapMesh mesh )` now
Add MapMesh.SetMaterial( Material )
Real simple drag handler for material packages - this code is all getting shit though time to rip it up
Refactored map view drop targets into an interface with attributes: `[CanDrop( Package.Type.Model )] class ModelDropTarget : IMapViewDropTarget`
Once I wrap CMapView I'll make this public and make it work with standard AssetType too, so you'd be able to create custom drop targets for your game resources.
Split Hammer save/load logic into different file and document all the internals so anyone other than me can know what the fuck is going on
Make Trace work against MapWorld
unfuck block tool to work with handles
Refactor & documentation on MapNode classes, make sure it all makes sense
Move these Hammer tools into their own folder
Simple test window for playing with the hierarchy of MapNode from addon layer
Move GetManagedHandle to common header to avoid ambiguity of when it's defined in interop and to avoid redefinition link errors
Temp comment out the BlockToolGlue.BuildGeometry - solve this in the morning
Remove unnecessary links in toolframework2 from fucking around with another solution
Add Hammer.ActiveMap
Unfuck map save / load code to use managed classes instead of native shit
Unfuck all of the MapViewDropTarget code so it now uses the handle managed classes - much much simpler
Fuck it, mapdoc interop back to Hammer only since that's all I want
Filthy hack for interopgen for GetManagedHandle within interop.hammer.h
Not as filthy hack to only init mapdoc managed handles from hammer.dll because I could end up spending weeks figuring out how to make it all work across various dlls when all I care about is Hammer anyway