Editable Entities
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.
Simple enough?
Data Tables
The rest of the magic happens in ENT:SetupDataTables - where you're hopefully already defining your network variables for you entity. It probably looks something like this right now.
So all you need to do is add options to the end of each of these.
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 directly from Hammer I/O.
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 toGeneral
)readonly
- a boolean initializing the contents as read only value, which can be copied, but not modified.
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 to0
)max
- The maximum value (defaults to1
)
Int
Identical to Float but only lets you choose integers.
VectorColor
This provides the client with a color selector - which is represented by a Vector. Each color component'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.
Hooks
CanEditVariable
CanEditVariable is called serverside before a variable has been edited. Here you can add checks for its validity and stop the edit if needed.
VariableEdited
VariableEdited is called serverside after a variable of an Entity has been edited.
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.