AddToggler, add boolean wires, make ColorBox accept boolean.
This commit is contained in:
parent
7a8d92cb95
commit
2ea0515bba
@ -12,16 +12,17 @@ import android.view.MotionEvent;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.motion.MotionMode;
|
import com.codigoparallevar.minicards.motion.MotionMode;
|
||||||
import com.codigoparallevar.minicards.types.PartConnection;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.PartConnection;
|
||||||
import com.codigoparallevar.minicards.types.PartGrid;
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
import com.codigoparallevar.minicards.types.Position;
|
import com.codigoparallevar.minicards.types.Position;
|
||||||
import com.codigoparallevar.minicards.types.Selectable;
|
import com.codigoparallevar.minicards.types.Selectable;
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
import com.codigoparallevar.minicards.types.Tuple4;
|
import com.codigoparallevar.minicards.types.Tuple4;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -312,7 +313,7 @@ class CanvasView extends View implements PartGrid {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Then with input ones
|
// Then with input ones
|
||||||
for (InputConnector inputConnector : part.getSignalInputConnectors()){
|
for (InputConnector inputConnector : part.getInputConnectors()){
|
||||||
if (inputConnector.containsPoint(x, y)){
|
if (inputConnector.containsPoint(x, y)){
|
||||||
return inputConnector;
|
return inputConnector;
|
||||||
}
|
}
|
||||||
@ -330,9 +331,38 @@ class CanvasView extends View implements PartGrid {
|
|||||||
final Part part = parts.get(i);
|
final Part part = parts.get(i);
|
||||||
|
|
||||||
// Then with input ones
|
// Then with input ones
|
||||||
for (SignalInputConnector inputConnector : part.getSignalInputConnectors()){
|
for (InputConnector inputConnector : part.getInputConnectors()){
|
||||||
|
if (!(inputConnector instanceof SignalInputConnector)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
SignalInputConnector signalInputConnector = (SignalInputConnector) inputConnector;
|
||||||
if (inputConnector.containsPoint(x, y)){
|
if (inputConnector.containsPoint(x, y)){
|
||||||
return inputConnector;
|
return signalInputConnector;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nullable
|
||||||
|
public BooleanInputConnector getBooleanInputConnectorOn(int x, int y) {
|
||||||
|
// If no part was found, do the same for connectors
|
||||||
|
for (int i = parts.size() - 1; i >= 0; i--){
|
||||||
|
final Part part = parts.get(i);
|
||||||
|
|
||||||
|
// Then with input ones
|
||||||
|
for (InputConnector inputConnector : part.getInputConnectors()){
|
||||||
|
if (!(inputConnector instanceof BooleanInputConnector)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
BooleanInputConnector booleanInputConnector = (BooleanInputConnector) inputConnector;
|
||||||
|
|
||||||
|
if (booleanInputConnector.containsPoint(x, y)){
|
||||||
|
return booleanInputConnector;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
||||||
import com.codigoparallevar.minicards.parts.logic.Ticker;
|
import com.codigoparallevar.minicards.parts.logic.Ticker;
|
||||||
|
import com.codigoparallevar.minicards.parts.logic.Toggle;
|
||||||
import com.codigoparallevar.minicards.parts.samples.ColorBox;
|
import com.codigoparallevar.minicards.parts.samples.ColorBox;
|
||||||
import com.codigoparallevar.minicards.parts.samples.Placeholder;
|
import com.codigoparallevar.minicards.parts.samples.Placeholder;
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
@ -137,8 +138,10 @@ public class CardFile {
|
|||||||
public static void createDefaultCards(File cardsDir) throws IOException {
|
public static void createDefaultCards(File cardsDir) throws IOException {
|
||||||
// Create a button and a color box, and connect them
|
// Create a button and a color box, and connect them
|
||||||
RoundButton button = new RoundButton(new StubPartGrid(), 200, 400, 80, 100);
|
RoundButton button = new RoundButton(new StubPartGrid(), 200, 400, 80, 100);
|
||||||
|
Toggle toggle = new Toggle(new StubPartGrid(), 350, 450, 450, 550);
|
||||||
ColorBox box = new ColorBox(new StubPartGrid(), 500, 350, 600, 450);
|
ColorBox box = new ColorBox(new StubPartGrid(), 500, 350, 600, 450);
|
||||||
button.getPressedOutputConnector().connectTo(box.getToggleInputConnector());
|
button.getPressedOutputConnector().connectTo(toggle.getToggleInputConnector());
|
||||||
|
toggle.getToggleOutputConnector().connectTo(box.getStateInputConnector());
|
||||||
|
|
||||||
CardFile buttonAndColorBoxCard = (new CardFile(cardsDir.getAbsolutePath())
|
CardFile buttonAndColorBoxCard = (new CardFile(cardsDir.getAbsolutePath())
|
||||||
.addPart(button)
|
.addPart(button)
|
||||||
@ -266,6 +269,13 @@ public class CardFile {
|
|||||||
|
|
||||||
return buttonInfo;
|
return buttonInfo;
|
||||||
}
|
}
|
||||||
|
else if (type.equals(Toggle.class.getName())){
|
||||||
|
Tuple2<Part, List<PartConnection>> buttonInfo = Toggle.deserialize(
|
||||||
|
grid,
|
||||||
|
jsonObject.getJSONObject("_data"));
|
||||||
|
|
||||||
|
return buttonInfo;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
throw new JSONException("Expected known class, found " + type);
|
throw new JSONException("Expected known class, found " + type);
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
||||||
import com.codigoparallevar.minicards.parts.logic.Ticker;
|
import com.codigoparallevar.minicards.parts.logic.Ticker;
|
||||||
|
import com.codigoparallevar.minicards.parts.logic.Toggle;
|
||||||
import com.codigoparallevar.minicards.parts.samples.ColorBox;
|
import com.codigoparallevar.minicards.parts.samples.ColorBox;
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
@ -20,9 +21,10 @@ class PartsHolder {
|
|||||||
|
|
||||||
private final static List<Tuple2<String, PartInstantiator>> BuiltInParts =
|
private final static List<Tuple2<String, PartInstantiator>> BuiltInParts =
|
||||||
new Vector<Tuple2<String, PartInstantiator>>(){{
|
new Vector<Tuple2<String, PartInstantiator>>(){{
|
||||||
add(new Tuple2<String, PartInstantiator>("Round button", RoundButton.getInstantiator()));
|
add(new Tuple2<>("Round button", RoundButton.getInstantiator()));
|
||||||
add(new Tuple2<String, PartInstantiator>("Ticker", Ticker.getInstantiator()));
|
add(new Tuple2<>("Ticker", Ticker.getInstantiator()));
|
||||||
add(new Tuple2<String, PartInstantiator>("Red/Green box", ColorBox.getInstantiator()));
|
add(new Tuple2<>("Red/Green box", ColorBox.getInstantiator()));
|
||||||
|
add(new Tuple2<>("Toggle", Toggle.getInstantiator()));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
public PartsHolder(Context context) {
|
public PartsHolder(Context context) {
|
||||||
|
@ -41,4 +41,19 @@ public class ScrolledCanvas {
|
|||||||
offsetPath.offset(-xOrig, -yOrig);
|
offsetPath.offset(-xOrig, -yOrig);
|
||||||
canvas.drawPath(offsetPath, paint);
|
canvas.drawPath(offsetPath, paint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void drawCenteredText(String text, int x, int y, Paint paint) {
|
||||||
|
paint.setTextAlign(Paint.Align.LEFT);
|
||||||
|
Rect r = new Rect();
|
||||||
|
|
||||||
|
paint.getTextBounds(text, 0, text.length(), r);
|
||||||
|
x = x + (int) (r.width() / 2f - r.left);
|
||||||
|
y = y + (int) (r.height() / 2f - r.bottom);
|
||||||
|
drawText(text, x, y, paint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawText(String text, int x, int y, Paint paint) {
|
||||||
|
canvas.drawText(text, x - xOrig, y - yOrig, paint);
|
||||||
|
}
|
||||||
}
|
}
|
@ -3,6 +3,7 @@ package com.codigoparallevar.minicards;
|
|||||||
import com.codigoparallevar.minicards.types.PartGrid;
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
import com.codigoparallevar.minicards.types.Selectable;
|
import com.codigoparallevar.minicards.types.Selectable;
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
|
|
||||||
class StubPartGrid implements PartGrid {
|
class StubPartGrid implements PartGrid {
|
||||||
@ -16,6 +17,11 @@ class StubPartGrid implements PartGrid {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BooleanInputConnector getBooleanInputConnectorOn(int x, int y) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Tuple2<Integer, Integer> getCenteredOn() {
|
public Tuple2<Integer, Integer> getCenteredOn() {
|
||||||
return null;
|
return null;
|
||||||
|
@ -6,16 +6,16 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.codigoparallevar.minicards.PartInstantiator;
|
import com.codigoparallevar.minicards.PartInstantiator;
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.parts.connectors.RoundOutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
import com.codigoparallevar.minicards.types.PartConnection;
|
import com.codigoparallevar.minicards.types.PartConnection;
|
||||||
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.Moveable;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.wireData.Signal;
|
||||||
import com.codigoparallevar.minicards.types.PartGrid;
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
import com.codigoparallevar.minicards.types.RoundInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.RoundOutputConnector;
|
|
||||||
import com.codigoparallevar.minicards.utils.Serializations;
|
import com.codigoparallevar.minicards.utils.Serializations;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
@ -152,11 +152,11 @@ public class RoundButton implements Part {
|
|||||||
public void touched() {
|
public void touched() {
|
||||||
Log.d("RoundButton", "Round button touched");
|
Log.d("RoundButton", "Round button touched");
|
||||||
|
|
||||||
_pressedOutputConnector.sendSignal();
|
_pressedOutputConnector.send(new Signal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SignalInputConnector> getSignalInputConnectors() {
|
public List<InputConnector> getInputConnectors() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,7 +192,7 @@ public class RoundButton implements Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSignal(RoundInputConnector roundInputConnector) {
|
public void send(InputConnector roundInputConnector, WireDataType signal) {
|
||||||
// @TODO: REMOVE THE NEED FOR THIS
|
// @TODO: REMOVE THE NEED FOR THIS
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ public class RoundButton implements Part {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unlink() {
|
public void unlink() {
|
||||||
for (InputConnector input : getSignalInputConnectors()) {
|
for (InputConnector input : getInputConnectors()) {
|
||||||
input.unlink();
|
input.unlink();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,98 @@
|
|||||||
|
package com.codigoparallevar.minicards.parts.connectors;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.Wiring.Wire;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class BooleanRoundInputConnector implements BooleanInputConnector {
|
||||||
|
private final Part _part;
|
||||||
|
private int _xposition;
|
||||||
|
private int _yposition;
|
||||||
|
private final int _radius;
|
||||||
|
private final List<Wire> _attachments = new LinkedList<>();
|
||||||
|
|
||||||
|
public BooleanRoundInputConnector(Part part,
|
||||||
|
int inputConnectorCenterX, int inputConnectorCenterY,
|
||||||
|
int inputConnectorRadius) {
|
||||||
|
_part = part;
|
||||||
|
_xposition = inputConnectorCenterX;
|
||||||
|
_yposition = inputConnectorCenterY;
|
||||||
|
_radius = inputConnectorRadius;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsPoint(int x, int y) {
|
||||||
|
return ((Math.abs(x - _xposition) <= _radius)
|
||||||
|
&& (Math.abs(y - _yposition) <= _radius));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Moveable getMoveable() {
|
||||||
|
return new Wire(this, _xposition, _yposition);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlink() {
|
||||||
|
for (Wire wire : _attachments) {
|
||||||
|
wire.unlink();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePosition(int x, int y) {
|
||||||
|
_xposition = x;
|
||||||
|
_yposition = y;
|
||||||
|
|
||||||
|
for (Wire wire : _attachments){
|
||||||
|
wire.moveEnd(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getX() {
|
||||||
|
return _xposition;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getY() {
|
||||||
|
return _yposition;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void send(BooleanSignal signal) {
|
||||||
|
_part.send(this, signal);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getAttachment(Wire<BooleanSignal, BooleanInputConnector> wire) {
|
||||||
|
_attachments.add(wire);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Part getPart() {
|
||||||
|
return _part;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return _part.getConnectorId(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drop(Wire wire) {
|
||||||
|
Log.d("InputConnector", "Dropped wire " + wire);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlinkWire(Wire wire) {
|
||||||
|
_attachments.remove(wire);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,158 @@
|
|||||||
|
package com.codigoparallevar.minicards.parts.connectors;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.types.Drawable;
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.Wiring.BooleanWire;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.output.BooleanOutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class BooleanRoundOutputConnector implements Drawable, BooleanOutputConnector {
|
||||||
|
private PartGrid _partGrid;
|
||||||
|
private int _centerX;
|
||||||
|
private int _centerY;
|
||||||
|
private final int _radius;
|
||||||
|
private final Part _part;
|
||||||
|
private BooleanWire _currentWire = null;
|
||||||
|
private final List<BooleanWire> _wires;
|
||||||
|
private final HashSet<InputConnector> _connections;
|
||||||
|
|
||||||
|
public BooleanRoundOutputConnector(Part part, PartGrid partGrid, int centerX, int centerY, int radius) {
|
||||||
|
_part = part;
|
||||||
|
_partGrid = partGrid;
|
||||||
|
_centerX = centerX;
|
||||||
|
_centerY = centerY;
|
||||||
|
_radius = radius;
|
||||||
|
_wires = new LinkedList<>();
|
||||||
|
_connections = new HashSet<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsPoint(int x, int y) {
|
||||||
|
return ((Math.abs(x - _centerX) <= _radius)
|
||||||
|
&& (Math.abs(y - _centerY) <= _radius));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Moveable getMoveable() {
|
||||||
|
if (_currentWire == null) {
|
||||||
|
startWire();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _currentWire;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlink() {}
|
||||||
|
|
||||||
|
private void startWire() {
|
||||||
|
_currentWire = new BooleanWire(this, _centerX, _centerY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drop(BooleanWire wire) {
|
||||||
|
|
||||||
|
if (wire == _currentWire){
|
||||||
|
_currentWire = null;
|
||||||
|
|
||||||
|
BooleanInputConnector resultPoint = _partGrid.getBooleanInputConnectorOn(
|
||||||
|
wire.getXEnd(), wire.getYEnd());
|
||||||
|
|
||||||
|
Log.d("RoundOutputConnector", "Dropped wire on " + resultPoint);
|
||||||
|
|
||||||
|
// Not connected
|
||||||
|
if (resultPoint == null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Already connected
|
||||||
|
if (_connections.contains(resultPoint)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_connections.add(resultPoint);
|
||||||
|
|
||||||
|
wire.attachTo(resultPoint);
|
||||||
|
_wires.add(wire);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Log.w("RoundOutputConnector",
|
||||||
|
"Asked to drop non matching wire "
|
||||||
|
+ "(expected " + _currentWire + ", got " + wire + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlinkWire(BooleanWire wire) {
|
||||||
|
_wires.remove(wire);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawWires(ScrolledCanvas canvas, boolean devMode) {
|
||||||
|
for (BooleanWire wire : _wires) {
|
||||||
|
wire.draw(canvas, devMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_currentWire != null) {
|
||||||
|
_currentWire.draw(canvas, devMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePosition(int x, int y) {
|
||||||
|
_centerX = x;
|
||||||
|
_centerY = y;
|
||||||
|
|
||||||
|
for (BooleanWire wire : _wires){
|
||||||
|
wire.moveStart(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Tuple2<String, String>> getConnectionEndpoints() {
|
||||||
|
List<Tuple2<String, String>> endpointIds = new LinkedList<>();
|
||||||
|
|
||||||
|
for (BooleanWire wire : _wires) {
|
||||||
|
InputConnector inputConnector = wire.getAttachedTo();
|
||||||
|
Part endPart = inputConnector.getPart();
|
||||||
|
endpointIds.add(new Tuple2<>(inputConnector.getId(), endPart.get_id()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return endpointIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void connectTo(BooleanInputConnector inputConnector) {
|
||||||
|
if (_connections.contains(inputConnector)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_connections.add(inputConnector);
|
||||||
|
|
||||||
|
BooleanWire wire = new BooleanWire(this, _centerX, _centerY);
|
||||||
|
wire.attachTo(inputConnector);
|
||||||
|
_wires.add(wire);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(ScrolledCanvas canvas, boolean devMode) {
|
||||||
|
// TODO: Complete this part
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send(BooleanSignal signal) {
|
||||||
|
for (BooleanWire wire : _wires){
|
||||||
|
wire.send(signal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,10 @@
|
|||||||
package com.codigoparallevar.minicards.types;
|
package com.codigoparallevar.minicards.parts.connectors;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.Wiring.Wire;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.wireData.Signal;
|
import com.codigoparallevar.minicards.types.wireData.Signal;
|
||||||
|
|
||||||
@ -63,8 +66,8 @@ public class RoundInputConnector implements SignalInputConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSignal() {
|
public void send(Signal signal) {
|
||||||
_part.sendSignal(this);
|
_part.send(this, signal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,11 +1,18 @@
|
|||||||
package com.codigoparallevar.minicards.types;
|
package com.codigoparallevar.minicards.parts.connectors;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.types.Drawable;
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.Wiring.SignalWire;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.output.SignalOutputConnector;
|
import com.codigoparallevar.minicards.types.connectors.output.SignalOutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.Signal;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
@ -143,9 +150,9 @@ public class RoundOutputConnector implements Drawable, SignalOutputConnector {
|
|||||||
// TODO: Complete this part
|
// TODO: Complete this part
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendSignal() {
|
public void send(Signal signal) {
|
||||||
for (SignalWire wire : _wires){
|
for (SignalWire wire : _wires){
|
||||||
wire.sendSignal();
|
wire.send(signal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,16 +7,16 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.codigoparallevar.minicards.PartInstantiator;
|
import com.codigoparallevar.minicards.PartInstantiator;
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.parts.connectors.RoundOutputConnector;
|
||||||
import com.codigoparallevar.minicards.types.Moveable;
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
import com.codigoparallevar.minicards.types.PartConnection;
|
import com.codigoparallevar.minicards.types.PartConnection;
|
||||||
import com.codigoparallevar.minicards.types.PartGrid;
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
import com.codigoparallevar.minicards.types.RoundInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.RoundOutputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.Signal;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
import com.codigoparallevar.minicards.utils.Serializations;
|
import com.codigoparallevar.minicards.utils.Serializations;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
@ -104,7 +104,7 @@ public class Ticker implements Part {
|
|||||||
public void unlink() {
|
public void unlink() {
|
||||||
pause();
|
pause();
|
||||||
|
|
||||||
for (InputConnector input : getSignalInputConnectors()) {
|
for (InputConnector input : getInputConnectors()) {
|
||||||
input.unlink();
|
input.unlink();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@ public class Ticker implements Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SignalInputConnector> getSignalInputConnectors() {
|
public List<InputConnector> getInputConnectors() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ public class Ticker implements Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSignal(RoundInputConnector roundInputConnector) {
|
public void send(InputConnector roundInputConnector, WireDataType signal) {
|
||||||
// @TODO: REMOVE THE NEED FOR THIS
|
// @TODO: REMOVE THE NEED FOR THIS
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ public class Ticker implements Part {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
while (Ticker.this._thread == Thread.currentThread()) {
|
while (Ticker.this._thread == Thread.currentThread()) {
|
||||||
Ticker.this._signalOutputConnector.sendSignal();
|
Ticker.this._signalOutputConnector.send(new Signal());
|
||||||
_partGrid.update();
|
_partGrid.update();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -0,0 +1,344 @@
|
|||||||
|
package com.codigoparallevar.minicards.parts.logic;
|
||||||
|
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.PartInstantiator;
|
||||||
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.parts.connectors.BooleanRoundOutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.parts.connectors.RoundInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
|
import com.codigoparallevar.minicards.types.PartConnection;
|
||||||
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
|
import com.codigoparallevar.minicards.utils.Serializations;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class Toggle implements Part {
|
||||||
|
private static final String TOGGLE_INPUT_CONNECTOR_ID = "toggle_input_connector";
|
||||||
|
private static final int DEFAULT_SIDE_SIZE = 100;
|
||||||
|
private final String _id;
|
||||||
|
private final PartGrid _partGrid;
|
||||||
|
private final BooleanRoundOutputConnector _stateOutputConnector;
|
||||||
|
private final LinkedList<OutputConnector> _outputConnectors;
|
||||||
|
private boolean _activated;
|
||||||
|
private int _left;
|
||||||
|
private int _top;
|
||||||
|
private int _right;
|
||||||
|
private int _bottom;
|
||||||
|
private List<InputConnector> inputConnectors;
|
||||||
|
private SignalInputConnector _toggleInputConnector;
|
||||||
|
|
||||||
|
private Toggle(String id, PartGrid partGrid, int left, int top, int right, int bottom) {
|
||||||
|
_id = id;
|
||||||
|
_partGrid = partGrid;
|
||||||
|
_left = left;
|
||||||
|
_top = top;
|
||||||
|
_right = right;
|
||||||
|
_bottom = bottom;
|
||||||
|
_activated = false;
|
||||||
|
|
||||||
|
// Input connector
|
||||||
|
_toggleInputConnector = new RoundInputConnector(
|
||||||
|
this,
|
||||||
|
getInputConnectorCenterX(),
|
||||||
|
getInputConnectorCenterY(),
|
||||||
|
getInputConnectRadius());
|
||||||
|
inputConnectors = new LinkedList<>();
|
||||||
|
inputConnectors.add(_toggleInputConnector);
|
||||||
|
|
||||||
|
// Output connector
|
||||||
|
// Create connectors
|
||||||
|
_stateOutputConnector = new BooleanRoundOutputConnector(
|
||||||
|
this,
|
||||||
|
_partGrid,
|
||||||
|
getOutputConnectorCenterX(), getOutputConnectorCenterY(),
|
||||||
|
getOutputConnectRadius());
|
||||||
|
|
||||||
|
_outputConnectors = new LinkedList<>();
|
||||||
|
_outputConnectors.add(_stateOutputConnector);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Toggle(PartGrid partGrid, int left, int top, int right, int bottom) {
|
||||||
|
this(UUID.randomUUID().toString(), partGrid, left, top, right, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int get_left() {
|
||||||
|
return _left;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int get_right() {
|
||||||
|
return _right;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int get_top() {
|
||||||
|
return _top;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int get_bottom() {
|
||||||
|
return _bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(ScrolledCanvas canvas, boolean devMode) {
|
||||||
|
|
||||||
|
if (devMode) {
|
||||||
|
drawConnector(canvas);
|
||||||
|
drawWires(canvas, devMode);
|
||||||
|
|
||||||
|
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
paint.setColor(Color.GRAY);
|
||||||
|
canvas.drawRect(
|
||||||
|
new Rect(_left, _top,
|
||||||
|
_right, _bottom),
|
||||||
|
paint);
|
||||||
|
|
||||||
|
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
textPaint.setColor(Color.GREEN);
|
||||||
|
textPaint.setTextSize(100);
|
||||||
|
String text = "0";
|
||||||
|
if (_activated) {
|
||||||
|
text = "1";
|
||||||
|
}
|
||||||
|
canvas.drawCenteredText(text,
|
||||||
|
(int) ((_left + _right) / 2f - DEFAULT_SIDE_SIZE * 0.4f),
|
||||||
|
(_top + _bottom) / 2,
|
||||||
|
textPaint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawConnector(ScrolledCanvas canvas) {
|
||||||
|
Paint inputConnectorPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
inputConnectorPaint.setColor(Color.YELLOW);
|
||||||
|
|
||||||
|
canvas.drawCircle(
|
||||||
|
getInputConnectorCenterX(), getInputConnectorCenterY(),
|
||||||
|
getInputConnectRadius(),
|
||||||
|
inputConnectorPaint);
|
||||||
|
|
||||||
|
Paint outputConnectorPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
outputConnectorPaint.setColor(Color.RED);
|
||||||
|
|
||||||
|
canvas.drawCircle(_right, getOutputConnectorCenterY(),
|
||||||
|
getOutputConnectRadius(),
|
||||||
|
outputConnectorPaint);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawWires(ScrolledCanvas canvas, boolean devMode) {
|
||||||
|
for (OutputConnector outputConnector : _outputConnectors){
|
||||||
|
outputConnector.drawWires(canvas, devMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void moveEnd(int x, int y) {
|
||||||
|
final int width = _right - _left;
|
||||||
|
final int height = _bottom - _top;
|
||||||
|
|
||||||
|
_left = x - width / 2;
|
||||||
|
_right = _left + width;
|
||||||
|
|
||||||
|
_top = y - height / 2;
|
||||||
|
_bottom = _top + height;
|
||||||
|
|
||||||
|
_toggleInputConnector.updatePosition(
|
||||||
|
getInputConnectorCenterX(),
|
||||||
|
getInputConnectorCenterY());
|
||||||
|
|
||||||
|
_stateOutputConnector.updatePosition(
|
||||||
|
getOutputConnectorCenterX(),
|
||||||
|
getOutputConnectorCenterY());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drop(int x, int y) {
|
||||||
|
moveEnd(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void touched() {
|
||||||
|
Log.d("Placeholder", "Placeholder touched");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<InputConnector> getInputConnectors() {
|
||||||
|
return inputConnectors;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<OutputConnector> getOutputConnectors() {
|
||||||
|
return _outputConnectors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SignalInputConnector getToggleInputConnector() {
|
||||||
|
return _toggleInputConnector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OutputConnector getToggleOutputConnector() {
|
||||||
|
return _stateOutputConnector;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONObject serialize() throws JSONException {
|
||||||
|
JSONObject serialized = new JSONObject();
|
||||||
|
|
||||||
|
serialized.put("id", _id);
|
||||||
|
serialized.put("left", _left);
|
||||||
|
serialized.put("top", _top);
|
||||||
|
serialized.put("right", _right);
|
||||||
|
serialized.put("bottom", _bottom);
|
||||||
|
|
||||||
|
serialized.put("on_state_output_connector",
|
||||||
|
Serializations.serialize(serializeConnectionEndpoints()));
|
||||||
|
|
||||||
|
return serialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, String>> serializeConnectionEndpoints() {
|
||||||
|
List<Map<String, String>> serializedData = new LinkedList<>();
|
||||||
|
|
||||||
|
for (Tuple2<String, String> endpoint : _stateOutputConnector.getConnectionEndpoints()){
|
||||||
|
serializedData.add(PartConnection.serialize(endpoint.item1, endpoint.item2));
|
||||||
|
}
|
||||||
|
|
||||||
|
return serializedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void send(InputConnector roundInputConnector, WireDataType signal) {
|
||||||
|
_activated = !_activated;
|
||||||
|
_stateOutputConnector.send(new BooleanSignal(_activated));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String get_id() {
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputConnector getConnectorWithId(String inputConnectorId) {
|
||||||
|
switch (inputConnectorId){
|
||||||
|
case Toggle.TOGGLE_INPUT_CONNECTOR_ID:
|
||||||
|
return _toggleInputConnector;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getConnectorId(InputConnector inputConnector) {
|
||||||
|
if (inputConnector == _toggleInputConnector){
|
||||||
|
return Toggle.TOGGLE_INPUT_CONNECTOR_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resume() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pause() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Tuple2<Part, List<PartConnection>> deserialize(PartGrid partGrid, JSONObject data) throws JSONException {
|
||||||
|
String id = data.getString("id");
|
||||||
|
int left = data.getInt("left");
|
||||||
|
int top = data.getInt("top");
|
||||||
|
int right = data.getInt("right");
|
||||||
|
int bottom = data.getInt("bottom");
|
||||||
|
|
||||||
|
Toggle toggle = new Toggle(id, partGrid, left, top, right, bottom);
|
||||||
|
|
||||||
|
List<PartConnection> connections = new LinkedList<>();
|
||||||
|
|
||||||
|
JSONArray connectorOuts = data.getJSONArray("on_state_output_connector");
|
||||||
|
for (int i = 0; i < connectorOuts.length(); i++) {
|
||||||
|
connections.add(PartConnection.deserialize(
|
||||||
|
toggle._stateOutputConnector,
|
||||||
|
connectorOuts.getJSONObject(i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Tuple2<Part, List<PartConnection>>(toggle, connections);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsPoint(int x, int y) {
|
||||||
|
return (x >= get_left()) && (x <= get_right())
|
||||||
|
&& (y >= get_top()) && (y <= get_bottom());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Moveable getMoveable() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unlink() {
|
||||||
|
for (InputConnector input : getInputConnectors()) {
|
||||||
|
input.unlink();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInputConnectorCenterX() {
|
||||||
|
return get_left();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getInputConnectRadius() {
|
||||||
|
return (get_right() - get_left()) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInputConnectorCenterY() {
|
||||||
|
return (get_top() + get_bottom()) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getOutputConnectorCenterX() {
|
||||||
|
return _right;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getOutputConnectorCenterY() {
|
||||||
|
return (_top + _bottom) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getOutputConnectRadius() {
|
||||||
|
return (_right - _left) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static PartInstantiator getInstantiator() {
|
||||||
|
final int halfSideSize = DEFAULT_SIDE_SIZE / 2;
|
||||||
|
return new PartInstantiator() {
|
||||||
|
@Override
|
||||||
|
protected Part instantiate(PartGrid grid, Tuple2<Integer, Integer> center) {
|
||||||
|
return new Toggle(grid,
|
||||||
|
center.item1 - halfSideSize, center.item2 - halfSideSize,
|
||||||
|
center.item1 + halfSideSize, center.item2 + halfSideSize);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -7,14 +7,16 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.codigoparallevar.minicards.PartInstantiator;
|
import com.codigoparallevar.minicards.PartInstantiator;
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.parts.connectors.BooleanRoundInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.Moveable;
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
import com.codigoparallevar.minicards.types.PartGrid;
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
import com.codigoparallevar.minicards.types.RoundInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -34,8 +36,8 @@ public class ColorBox implements Part {
|
|||||||
private int _top;
|
private int _top;
|
||||||
private int _right;
|
private int _right;
|
||||||
private int _bottom;
|
private int _bottom;
|
||||||
private List<SignalInputConnector> inputConnectors;
|
private List<InputConnector> inputConnectors;
|
||||||
private SignalInputConnector _toggleInputConnector;
|
private BooleanInputConnector _toggleInputConnector;
|
||||||
|
|
||||||
private ColorBox(String id, PartGrid partGrid, int left, int top, int right, int bottom) {
|
private ColorBox(String id, PartGrid partGrid, int left, int top, int right, int bottom) {
|
||||||
_id = id;
|
_id = id;
|
||||||
@ -46,7 +48,7 @@ public class ColorBox implements Part {
|
|||||||
_bottom = bottom;
|
_bottom = bottom;
|
||||||
_activated = false;
|
_activated = false;
|
||||||
|
|
||||||
_toggleInputConnector = new RoundInputConnector(
|
_toggleInputConnector = new BooleanRoundInputConnector(
|
||||||
this,
|
this,
|
||||||
getInputConnectorCenterX(),
|
getInputConnectorCenterX(),
|
||||||
getInputConnectorCenterY(),
|
getInputConnectorCenterY(),
|
||||||
@ -139,7 +141,7 @@ public class ColorBox implements Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SignalInputConnector> getSignalInputConnectors() {
|
public List<InputConnector> getInputConnectors() {
|
||||||
return inputConnectors;
|
return inputConnectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +150,7 @@ public class ColorBox implements Part {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SignalInputConnector getToggleInputConnector() {
|
public BooleanInputConnector getStateInputConnector() {
|
||||||
return _toggleInputConnector;
|
return _toggleInputConnector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,8 +168,10 @@ public class ColorBox implements Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSignal(RoundInputConnector roundInputConnector) {
|
public void send(InputConnector roundInputConnector, WireDataType signal) {
|
||||||
_activated = !_activated;
|
if (signal instanceof BooleanSignal) {
|
||||||
|
_activated = ((BooleanSignal) signal).value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -228,7 +232,7 @@ public class ColorBox implements Part {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unlink() {
|
public void unlink() {
|
||||||
for (InputConnector input : getSignalInputConnectors()) {
|
for (InputConnector input : getInputConnectors()) {
|
||||||
input.unlink();
|
input.unlink();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,12 @@ import android.graphics.Paint;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.Moveable;
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
import com.codigoparallevar.minicards.types.PartGrid;
|
import com.codigoparallevar.minicards.types.PartGrid;
|
||||||
import com.codigoparallevar.minicards.types.RoundInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -103,7 +102,7 @@ public class Placeholder implements Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SignalInputConnector> getSignalInputConnectors() {
|
public List<InputConnector> getInputConnectors() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +125,7 @@ public class Placeholder implements Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSignal(RoundInputConnector roundInputConnector) {
|
public void send(InputConnector roundInputConnector, WireDataType signal) {
|
||||||
// @TODO: REMOVE THE NEED FOR THIS
|
// @TODO: REMOVE THE NEED FOR THIS
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +177,7 @@ public class Placeholder implements Part {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unlink() {
|
public void unlink() {
|
||||||
for (InputConnector input : getSignalInputConnectors()) {
|
for (InputConnector input : getInputConnectors()) {
|
||||||
input.unlink();
|
input.unlink();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package com.codigoparallevar.minicards.types;
|
package com.codigoparallevar.minicards.types;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.Wiring.Wire;
|
||||||
|
|
||||||
public interface Dropper<T extends Wire> {
|
public interface Dropper<T extends Wire> {
|
||||||
void drop(T wire);
|
void drop(T wire);
|
||||||
void unlinkWire(T wire);
|
void unlinkWire(T wire);
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.codigoparallevar.minicards.types;
|
package com.codigoparallevar.minicards.types;
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
|
||||||
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -17,12 +17,12 @@ public interface Part extends Selectable, Moveable, Drawable {
|
|||||||
|
|
||||||
void touched();
|
void touched();
|
||||||
|
|
||||||
List<SignalInputConnector> getSignalInputConnectors();
|
List<InputConnector> getInputConnectors();
|
||||||
List<OutputConnector> getOutputConnectors();
|
List<OutputConnector> getOutputConnectors();
|
||||||
|
|
||||||
JSONObject serialize() throws JSONException;
|
JSONObject serialize() throws JSONException;
|
||||||
|
|
||||||
void sendSignal(RoundInputConnector roundInputConnector);
|
void send(InputConnector roundInputConnector, WireDataType signal);
|
||||||
|
|
||||||
String get_id();
|
String get_id();
|
||||||
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package com.codigoparallevar.minicards.types;
|
package com.codigoparallevar.minicards.types;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
|
|
||||||
public interface PartGrid {
|
public interface PartGrid {
|
||||||
Selectable getPartOn(int x, int y);
|
Selectable getPartOn(int x, int y);
|
||||||
|
|
||||||
SignalInputConnector getSignalInputConnectorOn(int x, int y);
|
SignalInputConnector getSignalInputConnectorOn(int x, int y);
|
||||||
|
BooleanInputConnector getBooleanInputConnectorOn(int x, int y);
|
||||||
|
|
||||||
Tuple2<Integer,Integer> getCenteredOn();
|
Tuple2<Integer,Integer> getCenteredOn();
|
||||||
|
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.codigoparallevar.minicards.types.connectors.Wiring;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.Drawable;
|
||||||
|
import com.codigoparallevar.minicards.types.Dropper;
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
|
||||||
|
|
||||||
|
public class BooleanWire extends Wire<BooleanSignal, BooleanInputConnector> implements Moveable, Drawable {
|
||||||
|
public BooleanWire(Dropper dropper, int xInit, int yInit) {
|
||||||
|
super(dropper, xInit, yInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send(BooleanSignal signal) {
|
||||||
|
if (_attachedTo != null) {
|
||||||
|
_attachedTo.send(signal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,8 @@
|
|||||||
package com.codigoparallevar.minicards.types;
|
package com.codigoparallevar.minicards.types.connectors.Wiring;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.Drawable;
|
||||||
|
import com.codigoparallevar.minicards.types.Dropper;
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.wireData.Signal;
|
import com.codigoparallevar.minicards.types.wireData.Signal;
|
||||||
|
|
||||||
@ -8,9 +11,9 @@ public class SignalWire extends Wire<Signal, SignalInputConnector> implements Mo
|
|||||||
super(dropper, xInit, yInit);
|
super(dropper, xInit, yInit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendSignal() {
|
public void send(Signal signal) {
|
||||||
if (_attachedTo != null) {
|
if (_attachedTo != null) {
|
||||||
_attachedTo.sendSignal();
|
_attachedTo.send(signal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package com.codigoparallevar.minicards.types;
|
package com.codigoparallevar.minicards.types.connectors.Wiring;
|
||||||
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Path;
|
import android.graphics.Path;
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.ScrolledCanvas;
|
import com.codigoparallevar.minicards.ScrolledCanvas;
|
||||||
|
import com.codigoparallevar.minicards.types.Drawable;
|
||||||
|
import com.codigoparallevar.minicards.types.Dropper;
|
||||||
|
import com.codigoparallevar.minicards.types.Moveable;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
|
|
@ -0,0 +1,6 @@
|
|||||||
|
package com.codigoparallevar.minicards.types.connectors.input;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
|
||||||
|
|
||||||
|
public interface BooleanInputConnector extends InputConnector<BooleanSignal, BooleanInputConnector> {
|
||||||
|
}
|
@ -3,7 +3,7 @@ package com.codigoparallevar.minicards.types.connectors.input;
|
|||||||
import com.codigoparallevar.minicards.types.Dropper;
|
import com.codigoparallevar.minicards.types.Dropper;
|
||||||
import com.codigoparallevar.minicards.types.Part;
|
import com.codigoparallevar.minicards.types.Part;
|
||||||
import com.codigoparallevar.minicards.types.Selectable;
|
import com.codigoparallevar.minicards.types.Selectable;
|
||||||
import com.codigoparallevar.minicards.types.Wire;
|
import com.codigoparallevar.minicards.types.connectors.Wiring.Wire;
|
||||||
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
|
|
||||||
public interface InputConnector<T extends WireDataType, T1 extends InputConnector<T, T1>>
|
public interface InputConnector<T extends WireDataType, T1 extends InputConnector<T, T1>>
|
||||||
@ -19,4 +19,6 @@ public interface InputConnector<T extends WireDataType, T1 extends InputConnecto
|
|||||||
Part getPart();
|
Part getPart();
|
||||||
|
|
||||||
String getId();
|
String getId();
|
||||||
|
|
||||||
|
void send(T data);
|
||||||
}
|
}
|
||||||
|
@ -3,5 +3,4 @@ package com.codigoparallevar.minicards.types.connectors.input;
|
|||||||
import com.codigoparallevar.minicards.types.wireData.Signal;
|
import com.codigoparallevar.minicards.types.wireData.Signal;
|
||||||
|
|
||||||
public interface SignalInputConnector extends InputConnector<Signal, SignalInputConnector> {
|
public interface SignalInputConnector extends InputConnector<Signal, SignalInputConnector> {
|
||||||
void sendSignal();
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.codigoparallevar.minicards.types.connectors.output;
|
||||||
|
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.Wiring.BooleanWire;
|
||||||
|
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
|
||||||
|
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
|
||||||
|
|
||||||
|
public interface BooleanOutputConnector extends OutputConnector<
|
||||||
|
BooleanSignal,
|
||||||
|
BooleanInputConnector,
|
||||||
|
BooleanWire> {
|
||||||
|
}
|
@ -4,7 +4,7 @@ import com.codigoparallevar.minicards.ScrolledCanvas;
|
|||||||
import com.codigoparallevar.minicards.types.Dropper;
|
import com.codigoparallevar.minicards.types.Dropper;
|
||||||
import com.codigoparallevar.minicards.types.Selectable;
|
import com.codigoparallevar.minicards.types.Selectable;
|
||||||
import com.codigoparallevar.minicards.types.Tuple2;
|
import com.codigoparallevar.minicards.types.Tuple2;
|
||||||
import com.codigoparallevar.minicards.types.Wire;
|
import com.codigoparallevar.minicards.types.connectors.Wiring.Wire;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
|
||||||
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
import com.codigoparallevar.minicards.types.wireData.WireDataType;
|
||||||
|
|
||||||
@ -21,4 +21,6 @@ public interface OutputConnector<T extends WireDataType,
|
|||||||
List<Tuple2<String, String>> getConnectionEndpoints();
|
List<Tuple2<String, String>> getConnectionEndpoints();
|
||||||
|
|
||||||
void connectTo(T1 inputConnector);
|
void connectTo(T1 inputConnector);
|
||||||
|
|
||||||
|
void send(T data);
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package com.codigoparallevar.minicards.types.connectors.output;
|
package com.codigoparallevar.minicards.types.connectors.output;
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.types.SignalWire;
|
import com.codigoparallevar.minicards.types.connectors.Wiring.SignalWire;
|
||||||
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
|
||||||
import com.codigoparallevar.minicards.types.wireData.Signal;
|
import com.codigoparallevar.minicards.types.wireData.Signal;
|
||||||
|
|
||||||
public interface SignalOutputConnector extends OutputConnector<Signal, SignalInputConnector, SignalWire> {
|
public interface SignalOutputConnector extends OutputConnector<Signal, SignalInputConnector, SignalWire> {
|
||||||
void sendSignal();
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.codigoparallevar.minicards.types.wireData;
|
||||||
|
|
||||||
|
public class BooleanSignal implements WireDataType {
|
||||||
|
public final boolean value;
|
||||||
|
|
||||||
|
public BooleanSignal(boolean value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user