(info) This AI is still in early stages of development.

Code Conventions

EggPlant adheres to the following code conventions...

 

One API per Include

Due to the amount of code in EggPlant, APIs have been separated out in to multiple JS includes. Wherever possible, there is only one API per include.

Files are named based on the API they contain or extend. For example, Map.Sector.js adds a Sector API to the Map API.

API Sandboxes

Each API is defined in a self-running named closure (a "sandbox"), for example:

void (function SomeAPI() {
   // API defined here
})();

Naming the closure helps generate better error messages, voiding it's return value helps avoid the closure appearing on the global scope should a typo be made within the code.

Dependency checking

Using features in Util.js, each API performs dependency checks at the start of it's sandbox and only registers itself available at the end of the sandbox. For example:

void (function SomeAPI() {
  var self = {
    file: "Process.js",
    ver : 0.3
  }

  var dependencies = {
    "Util.js": 0.8,
    "Diag.js": 0.1
  }

  uNeeds(self, dependencies);
  // API defined here
 
  uProvide(self);
})();

Named functions

Wherever possible all functions are named, even if they are assigned to named object properties, to improve error reporting.

For example:

var foo = {};
 
foo.bar = function bar() {
  // do stuff
}

Filter and Sort routines

The following naming conventions are used for array filters and sort routines:

Array methodNaming conventionExample
array.filter(fn)toWhatevertasks = tasks.filter(toTaskRuntime)
array.sort(fn)byWhatevertasks.sort(byTaskRuntime)

Commonly used JS methods

EggPlant makes extensive use of the following common JS methods which you should familiarise yourself with before making any code alterations:

Use Process API

The Process API is used extensively, with practically all code execution being called from within processes. This helps significantly reduce game lag and also allows use of the extensive range of diagnostics.

Any non-process custom events are used to trigger a process or at the very least void the global timeRemaining property as soon as possible.