Improve documentation with examples

This commit is contained in:
NGnius 2019-11-05 16:32:52 -05:00
parent 9fcbaa0e6e
commit 181597cd2f
2 changed files with 75 additions and 5 deletions

View file

@ -9,16 +9,23 @@ You should download the latest release and extract it to the Gamecraft folder.
To patch, drag `Gamecraft.exe` onto `IPA.exe`. You will need to redo this step whenever Gamecraft is updated. To patch, drag `Gamecraft.exe` onto `IPA.exe`. You will need to redo this step whenever Gamecraft is updated.
2. Extract the ExtraCommands zip into Gamecraft's `Plugins\` folder (GCIPA should have created this automatically in the previous step). You should see `0Harmony.dll` and `ExtraCommands.dll` in the `Plugins\` folder. If those files are in another folder in `Plugins\` it will not work. 2. Extract the ExtraCommands zip into Gamecraft's `Plugins\` folder (GCIPA should have created this automatically in the previous step). You should see `0Harmony.dll` and `ExtraCommands.dll` in the `Plugins\` folder. If those files are in another folder in `Plugins\` it will not work.
3. Launch Gamecraft. 3. Launch Gamecraft.
You can check the log file `%APPDATA%\..\LocalLow\FreeJam\RobocraftX\Player.log` to confirm. You can check the log file `%APPDATA%\..\LocalLow\FreeJam\Gamecraft\Player.log` to confirm.
You should be able to see a message near the top showing how many plugins have been loaded and their names. You should be able to see a message near the top showing how many plugins have been loaded and their names.
## Development ## Development
Interested in making your own mod? Interested in adding your own commands?
Clone this repository and modify the C# classes in `extracommands\`. Clone this repository and create a C# class file in `extracommands\`.
Patch Gamecraft with [GCIPA](#installation) A template command is provided in `ExampleCommandEngine.cs` which you can copy to get started.
Build the solution and copy `bin\Debug\net45\extracommands.dll` and `bin\Debug\net45\0Harmony.dll` into Gamecraft's `Plugins\` folder. It's recommended that you create a symbolic link named `ref` in the root directory of this project linked to the folder containing Gamecraft `.dll` files.
### Testing
Patch Gamecraft with [GCIPA](#installation).
Create a symbolic link named `ref` in the root directory of this project linked to the folder containing Gamecraft `.dll` files (to resolve dependencies).
Build the solution and copy `bin\Debug\net45\extracommands.dll` and `bin\Debug\net45\0Harmony.dll` into Gamecraft's `Plugins\` folder.
Load a game and try out your command in the command line interface in Gamecraft.
### External Documentation
More information about the IPlugin and IEnhancedPlugin interface can be found [on the IPA repository](https://github.com/Eusth/IPA). More information about the IPlugin and IEnhancedPlugin interface can be found [on the IPA repository](https://github.com/Eusth/IPA).
More information about Harmony can be found [on the Harmony wiki](https://github.com/pardeike/Harmony/wiki). More information about Harmony can be found [on the Harmony wiki](https://github.com/pardeike/Harmony/wiki).

View file

@ -0,0 +1,63 @@
using System;
using RobocraftX.GUI.CommandLine;
using RobocraftX.Multiplayer;
using RobocraftX.StateSync;
using RobocraftX.Character;
using Svelto.ECS;
using Unity.Entities;
using UnityEngine;
using uREPL;
using Svelto.Context;
using RobocraftX;
// checklist of things to rename to make this command your own:
// [ ] namespace ExtraCommands.Example -> namespace ExtraCommands.[your command's namespace]
// [ ] class ExampleCommandEngine : CustomCommandEngine -> class [your command name]CommandEngine : CustomCommandEngine
// [ ] public ExampleCommandEngine(UnityContext<... -> public [your command name]CommandEngine(UnityContext<...
// [ ] CustomCommandUtility.Register("[your command name]", [your command name]Command, "[your command description]")
// [ ] private void ExampleCommand() -> private void [your command name]Command()
// [ ] CustomCommandUtility.Unregister("[your command name]")
//
// For aesthetics, I'd recommend using PascalCase (first letter in every word is uppercase; spaces are illegal*)
// * You can use spaces in your command description, but nowhere else. The description should be written like a normal English sentence.
namespace ExtraCommands.Example
{
// !!! Uncomment the line below this !!!
// [CustomCommand("Example")]
class ExampleCommandEngine : CustomCommandEngine
{
// This class is a custom implementation of CustomCommandEngine specific to this command
// You can use Svelto.ECS.IEntityDB entitiesDB to query game entities or one of the protected variables for other things
// More documentation on Svelto.ECS: https://github.com/sebas77/Svelto.ECS
// Unfortunately the documentation is severely lacking and out of date; you may have better luck decompiling Svelto.ECS.dll
// See CustomCommandEngine.cs for more information on the super class
public ExampleCommandEngine(UnityContext<FullGameCompositionRoot> ctxHolder, EnginesRoot enginesRoot, World physW, Action reloadGame, MultiplayerInitParameters mpParams) : base(ctxHolder, enginesRoot, physW, reloadGame, mpParams)
{
}
// Ready() is called when the command is registered in-game (this happens whenever you load a game)
public override void Ready()
{
// CustomCommandUtility.Register has multiple overloads depending on how many parameters you want to pass to your command
// See CustomCommandUtility.cs for more information
CustomCommandUtility.Register("Example", ExampleCommand, "This is an example command which does nothing!");
}
// ExampleCommand() is called whenever the command is executed. This can accept up to three parameters
// Please rename this, but don't forget to change the name in CustomCommandUtility.Register as well
private void ExampleCommand()
{
// command operations go here
}
// Dispose() is called when the command is unregistered in-game (this happens whenever you leave a game)
public override void Dispose()
{
// You must unregister the command so it doesn't waste memory and so
// it can be re-registered next time
CustomCommandUtility.Unregister("Example");
}
}
}