186 lines
5.6 KiB
Markdown
186 lines
5.6 KiB
Markdown
# Yugine Editor
|
|
|
|
The main editor view is made up of objects. Each object can have a
|
|
number of components attached to it. When an object is selected, its
|
|
name, position, and list of components are listed.
|
|
|
|
The editor edits either entities or components. When it is started, there is no edited level.
|
|
|
|
## Basic controls
|
|
|Ctrl-Z|Undo|
|
|
|Ctrl-Shift-Z|Redo|
|
|
|Ctrl-A|Select all|
|
|
|Ctrl-S|Save|
|
|
|Ctrl-N|New|
|
|
|Ctrl-O|Open level|
|
|
|Ctrl-X|Cut|
|
|
|Ctrl-C|Copy|
|
|
|Ctrl-V|Paste|
|
|
|Alt-O|Add level to current level|
|
|
|Alt-A|or Alt-P Add a prefab|
|
|
|Ctrl-I|Objects on the level|
|
|
|Ctrl-E|Asset viewer. When on a component like a sprite, serves to select that sprite's texture|
|
|
|Ctrl-[|Downsize grid|
|
|
|Ctrl-]|Upsize grid|
|
|
|Backtick|REPL|
|
|
|Ctrl-[1-9]|to set camera positions|
|
|
|[1-9]|to recall camera positions|
|
|
|0|Set camera to home view|
|
|
|ESC|quit|
|
|
|Alt-1|Normal view|
|
|
|Alt-2|Wireframe view|
|
|
|Shift-Middle|Set editor cursor to mouse position (Cursor affects how objects rotate)|
|
|
|Shift-Ctrl-Middle|Set cursor to object selection|
|
|
|Shift-Right|Remove cursor|
|
|
|
|
## Editor Mode select
|
|
|
|
|Alt-F1|Basic mode|
|
|
|Alt-F2|Brush mode|
|
|
- Clicking will place what is on clipboard
|
|
|
|
## Object controls
|
|
|
|
|G|Translate|
|
|
|Alt-G|Snap objects to cursor|
|
|
|S|Scale|
|
|
|R|Rotate|
|
|
|Ctrl-P|Save object changes to prefab|
|
|
|Ctrl-shift-P|Save object changes as a unique prefab ("Parent")|
|
|
|Ctrl-shift-T|Save object changes to a side prefab ("Type")|
|
|
|Ctrl-J|Bake name to expose to level script|
|
|
|Alt-J|Remove baked name|
|
|
|Ctrl-Y|Show obj chain|
|
|
|Alt-Y|Start prototype explorer|
|
|
|Ctrl-U|Revert object or component to match prototype|
|
|
|Alt-U|Make object unique. If a level, allows setting of internal object position and rotation.|
|
|
|Ctrl-shift-G|Save group as a level|
|
|
|Arrows|Translate 1 px|
|
|
|Shift-Arrows|Translate 10 px|
|
|
|Tab|Select component|
|
|
|F|Zoom to object(s)|
|
|
|Ctrl-F|Focus on a selected sublevel. Edit and save it in place.|
|
|
|Ctrl-Shift-F|Go up one level in the editing chain.|
|
|
|M|Flip horizontally|
|
|
|Ctrl-M|Flip vertically|
|
|
|Ctrl-D|Duplicate|
|
|
|H|Hide|
|
|
|Ctrl-H|Unhide all|
|
|
|T|Lock|
|
|
|Alt-T|Unlock all|
|
|
|Q|Toggle component help|
|
|
|Ctrl-Shift-Alt-Click|Set object center|
|
|
|
|
## Mouse controls
|
|
|
|
|Left|Select|
|
|
|Middle|Quick grab|
|
|
|Right|Unselect|
|
|
|
|
## Level controls
|
|
|Ctrl-L|Open level script|
|
|
|
|
## Game controls
|
|
|F1|Debug draw|
|
|
|F2|Config menu|
|
|
|F3|Show bounding boxes|
|
|
|F4|Show gizmos|
|
|
|F5|Start|
|
|
|F6|Pause|
|
|
|F7|Stop|
|
|
|F10|Toggle slow motion|
|
|
|
|
== Components
|
|
Components all have their own set of controls. Many act similar to
|
|
objects. If a component has a position attribute, it will react as
|
|
expected to object grabbing; same with scaling, rotation, and so on.
|
|
|
|
If a component uses an asset, the asset viewer will serve to pick new
|
|
assets for it.
|
|
|
|
## Spline controls
|
|
|Ctrl-click|Add a point|
|
|
|Shift-click|remove a point|
|
|
|+,-|Increase or decrease spline segments|
|
|
|Ctrl-+,-|Increase or decrease spline degrees. Put this to 1 for the spline to go point to point|
|
|
|Alt-B,V|Increase or decrease spline thickness|
|
|
|
|
.Collider controls
|
|
|Alt-S|Toggle sensor|
|
|
|
|
## Yugine Programming
|
|
|
|
### Object functions
|
|
|
|
* start(): Called when the object is created, before the first update is ran
|
|
* update(dt): Called once per frame
|
|
* physupdate(dt): Called once per physics calculation
|
|
* stop(): Called when the object is killed
|
|
* collide(hit): Called when this object collides with another. If on a collider, specific to that collider
|
|
- hit.hit: Gameobject ID of what's being hit
|
|
- hit.velocity: Velocity of impact
|
|
- hit.normal: Normal of impact
|
|
|
|
### Colliders
|
|
Colliders visually look different based on their status. Objects can
|
|
be in one of three states
|
|
|
|
- Dynamic: respond to physics
|
|
- Kinematic: modeled with infinite momentum. An "unstoppable force"
|
|
controlled by a user.
|
|
- Static: modeled with infinite mass. An "immovable object" that
|
|
shouldn't move.
|
|
|
|
Objects can then have colliders on them, each collider being a sensor,
|
|
or solid. Sensors respond to collision signals, while solid ones also
|
|
do not let objects through.
|
|
|
|
|
|
|
|
### Input
|
|
Input works by adding functions to an object, and then "controlling"
|
|
them. The format for a function is "input_[key]_[action]". [Action]
|
|
can be any of
|
|
|
|
- down: Called once per frame the key is down
|
|
- pressed: Called when the key is pressed
|
|
- released: called when the key is released
|
|
|
|
For example, "input_p_pressed()" will be called when p is pressed, and not again
|
|
until it is released and pressed again.
|
|
|
|
### Your game
|
|
|
|
When the engine runs, it executes config.js, and then game.js. A
|
|
window should be created in config.js, and custom code for prototypes
|
|
should be executed.
|
|
|
|
game.js is the place to open your first level.
|
|
|
|
### Levels
|
|
|
|
A level is a collection of objects. A level has a script associated
|
|
with it. The script is ran when the level is loaded.
|
|
|
|
Levels can be added to other levels. Each is independent and unique.
|
|
In this way, complicated behavior can easily be added up. For example,
|
|
a world might have a door that opens with a lever. The door and lever
|
|
can be saved off as their own level, and the level script can contain
|
|
the code that causes the door to open when the lever is thrown. Then,
|
|
as many door-lever levels can be added to your game as you want.
|
|
|
|
The two primary ways to add objects to the game are World.spawn, and
|
|
Level.add. World.spawn creates a single object in the world, Level.add
|
|
adds an entire level, along with its script.
|
|
|
|
Levels also can be checked for "completion". A level can be loaded
|
|
over many frames, and only have all of its contents appear once it's
|
|
finished loading. World.spawn is immediate.
|
|
|
|
Level.clear removes the level from the game world.
|
|
|
|
.Level scripting
|
|
Each level has a script which is ran when the level is loaded, or the
|
|
game is played. A single object declared in it called "scene" can be
|
|
used to expose itself to the rest of the game.
|