Garry's Mod Wiki

Revision Difference

Editable_Entities#515652

<cat>Dev.Lua</cat>⤶ Making an entity editable is a lot easier than you would think. To edit an entity in realtime in sandbox mode (or your own gamemode if you have it enabled), you simply hold C (context menu) and right click on the entity. A submenu appears, and choosing properties will show a window like the one below.⤶ ⤶ ⤶ ⤶ # Mark it as editable⤶ ⤶ The first thing to do is to mark it as editable.⤶ ⤶ ⤶ ```⤶ ENT.Editable = true⤶ ```⤶ ⤶ ⤶ Simple enough?⤶ ⤶ # Data Tables⤶ ⤶ The rest of the magic happens in - where you're hopefully already defining your network variables for you entity. It probably looks something like this right now.⤶ ⤶ ⤶ ```⤶ function ENT:SetupDataTables()⤶ ⤶ self:NetworkVar( "Float", 0, "FogStart" )⤶ self:NetworkVar( "Float", 1, "FogEnd" )⤶ self:NetworkVar( "Float", 2, "Density" )⤶ self:NetworkVar( "Vector", 0, "FogColor" )⤶ ⤶ end⤶ ```⤶ ⤶ ⤶ So all you need to do is add options to the end of each of these.⤶ ⤶ ⤶ ```⤶ function ENT:SetupDataTables()⤶ ⤶ self:NetworkVar( "Float", 0, "FogStart", { KeyName = "fogstart", Edit = { type = "Float", order = 1, min = 0, max = 1000000 } } )⤶ self:NetworkVar( "Float", 1, "FogEnd", { KeyName = "fogend", Edit = { type = "Float", order = 2, min = 0, max = 1000000 } } )⤶ self:NetworkVar( "Float", 2, "Density", { KeyName = "density", Edit = { type = "Float", order = 3, min = 0, max = 1 } } )⤶ self:NetworkVar( "Vector", 0, "FogColor", { KeyName = "fogcolor", Edit = { type = "VectorColor", order = 4 } } )⤶ ⤶ end⤶ ```⤶ ⤶ ⤶ This might seem a bit complicated, but it's simple really.⤶ ⤶ We have a table with:⤶ ⤶ ## KeyName⤶ ⤶ This defines the key-value name of this variable. This is the standard way in Source to handle networked entity variables, and is required for editing to work. As a bonus, it will also allow map-makers to create maps containing your entity and set these variables.⤶ ⤶ ## Edit ⤶ ⤶ This is a subtable describing how to edit this variable. The actual contents of this table differs with each type of variable, and are described below.⤶ ⤶ # Types⤶ ⤶ These variables are shared between all "edit types":⤶ ⤶ * **title** - a string - the title to show to the left of the control. If unset it will default to the control name. This must be unique to each item.⤶ * **order** - a number - will display the lowest orders first.⤶ * **category** - a string - controls are grouped by category (defaults to "Main")⤶ ⤶ ## Generic⤶ ⤶ A simple text box.⤶ ⤶ * **waitforenter** - boolean, whether the value should be updated in real-time as the user types, or only when they press enter. (default: false)⤶ ⤶ ## Boolean⤶ ⤶ This type is a simple checkbox. There's no other settings in here apart from the shared values.⤶ ⤶ ## Float⤶ ⤶ This provides the client with a number slider.⤶ ⤶ * **min** - The minimum value (defaults to 0)⤶ * **max** - The maximum value (defaults to 1)⤶ ⤶ ## Int⤶ ⤶ Identical to **Float** but only lets you choose integers.⤶ ⤶ ## VectorColor⤶ ⤶ This provides the client with a colour selector - which is represented by a Vector. Each colour's range is between 0-1.⤶ ⤶ ## Combo⤶ ⤶ This is a ComboBox.⤶ ⤶ * text = the default selection. (default: "Select...")⤶ * values = a key/value table of available options in the ComboBox. Keys are the identifier string, values are the associated actual values. Required.⤶ ⤶ # Advanced⤶ ⤶ The property editors are modular, and are defined in lua/vgui/ - each starting with prop_*.⤶ ⤶ Creating your own should be quite simple by looking at these files.⤶ ⤶ ⤶ ⤶