mini-cards/HowToWriteAComponent.md

66 lines
3.0 KiB
Markdown

# How to write a new component
This is a work in progress used for internal reference. It asumes you have some practice coding in
Java. Hopefully a more polished version will be written :)
## 1. Create a new Part class
Inside the [app/src/main/java/com/codigoparallevar/minicards/parts](app/src/main/java/com/codigoparallevar/minicards/parts)
directory, in the appropiate subdirectory, create a new Java class which `implements Part`.
Part as in `com.codigoparallevar.minicards.types.Part`.
Create a constructor for the class, probably you'll want information like the following:
* PartGrid `partGrid`: environment where the component will be placed.
* int `left`, `top`, `right`, `bottom`: Left(/top/right/bottom)-most coordinate of your component,
needed to draw the element.
## 2. Fill all the needed methods
Inside the class, instruct your IDE to implement the interface methods, each method responsibility
follows:
* `void moveEnd(int x, int y)`: Update the position of the component so it's centerd on this point.
* `void drop(int x, int y)`: Update the position of the component so it's centerd on this point.
This can be done just by calling moveEnd. The separation between drop and moveEnd might sound absurd
but it'll come handy on some occasions.
* `boolean containsPoint(int x, int y)`: True if a x,y coordinate is contained inside the component.
* `Moveable getMoveable()`: Just `return this`.
* `void unlink()`: Remove all input connections attached to the component.
* `void draw(ScrolledCanvas canvas, boolean devMode)`: Draw the component on the canvas.
* `int getLeft()`: Return the leftmost coordinate of the component.
* `int getRight()`: Return the rightmost coordinate of the component.
* `int getTop()`: Return the topmost coordinate of the component.
* `int getBottom()`: Return the bottommost coordinate of the component.
* `void touched()`: The user touched the component, do what you must.
* `List<InputConnector> getSignalInputConnectors()`: Return all the input connectors.
* `List<OutputConnector> getOutputConnectors()`: Return all the output connectors.
* `JSONObject serialize()`: Return a JSON-serialized version of the component.
* `void sendSignal(RoundInputConnector roundInputConnector)`: This will be removed, just ignore it.
* `String getId()`: Return an unique ID for the component.
* `String getConnectorId(InputConnector inputConnector)`: Return an unique ID for an input connector.
* `InputConnector getConnectorWithId(String inputConnectorId)`: Obtain the component ID with the given connector.
* `void resume()`: Called when the component is on an active card.
* `void pause()`: Called when the component card stops being active.
## 3. Add component to the parts holder
You'll need to give it a name and create a static `getInstantiator()` method inside your class. Check the ones working for examples.
## 4. Add deserialization method
Look for the `deserializeObject()` method on the `CardFile` class and add a condition to deserialize your class.