66 lines
3.0 KiB
Markdown
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.
|