package io.github.minecraftgui.models.network.packets;
import io.github.minecraftgui.controllers.MainController;
import io.github.minecraftgui.models.components.*;
import io.github.minecraftgui.models.network.NetworkInterface;
import io.github.minecraftgui.models.shapes.*;
import org.json.JSONObject;
/**
* Created by Samuel on 2015-12-06.
*/
public class PacketCreateComponent extends PacketIn {
public PacketCreateComponent(JSONObject jsonObject, MainController mainController, NetworkInterface networkInterface) {
super(jsonObject, mainController, networkInterface);
String parentId = jsonObject.getString(NetworkInterface.PARENT_ID);
Component component = generateComponent(jsonObject.getJSONObject(NetworkInterface.COMPONENT));
if(component != null)
mainController.addComponent(parentId, component);
}
private Component generateComponent(JSONObject comp){
String componentId = comp.getString(NetworkInterface.COMPONENT_ID);
String type = comp.getString(NetworkInterface.TYPE);
Class<? extends Shape> shape = getShapeClassByName(comp.getString(NetworkInterface.SHAPE));
switch (type){
case NetworkInterface.CHECKBOX: return new CheckBox(componentId, getShapeClassByName(comp.getString(NetworkInterface.SHAPE_ON_VALUE_FALSE)), getShapeClassByName(comp.getString(NetworkInterface.SHAPE_ON_VALUE_TRUE)));
case NetworkInterface.DIV: return new Div(componentId, shape);
case NetworkInterface.INPUT: return new Input(componentId, (Class<? extends Rectangle>) shape);
case NetworkInterface.PROGRESS_BAR_VERTICAL: return new ProgressBar.Vertical(componentId, (Class<? extends Rectangle>) shape, (Class<? extends Rectangle>) getShapeClassByName(comp.getString(NetworkInterface.SHAPE_ON_PROGRESS)));
case NetworkInterface.PROGRESS_BAR_HORIZONTAL: return new ProgressBar.Horizontal(componentId, (Class<? extends Rectangle>) shape, (Class<? extends Rectangle>) getShapeClassByName(comp.getString(NetworkInterface.SHAPE_ON_PROGRESS)));
case NetworkInterface.LIST: return new List(componentId, (Class<? extends Rectangle>) shape, generateComponent(comp.getJSONObject(NetworkInterface.BUTTON_LIST_BEFORE)), generateComponent(comp.getJSONObject(NetworkInterface.BUTTON_LIST_AFTER)));
case NetworkInterface.PARAGRAPH: return new Paragraph(componentId, (Class<? extends Rectangle>) shape, generateComponent(comp.getJSONObject(NetworkInterface.BUTTON_LINE_BEFORE)), generateComponent(comp.getJSONObject(NetworkInterface.BUTTON_LINE_AFTER)));
case NetworkInterface.SLIDER_VERTICAL: return new Slider.Vertical(componentId, (Class<? extends Rectangle>) shape, (Class<? extends Rectangle>) getShapeClassByName(comp.getString(NetworkInterface.SHAPE_ON_PROGRESS)), generateComponent(comp.getJSONObject(NetworkInterface.SLIDER_BUTTON)));
case NetworkInterface.SLIDER_HORIZONTAL: return new Slider.Horizontal(componentId, (Class<? extends Rectangle>) shape, (Class<? extends Rectangle>) getShapeClassByName(comp.getString(NetworkInterface.SHAPE_ON_PROGRESS)), generateComponent(comp.getJSONObject(NetworkInterface.SLIDER_BUTTON)));
case NetworkInterface.TEXT_AREA: return new TextArea(componentId, (Class<? extends Rectangle>) shape, generateComponent(comp.getJSONObject(NetworkInterface.BUTTON_LINE_BEFORE)), generateComponent(comp.getJSONObject(NetworkInterface.BUTTON_LINE_AFTER)));
}
return null;
}
private Class<? extends Shape> getShapeClassByName(String shapeName){
switch (shapeName){
case NetworkInterface.ELLIPSE_COLOR: return EllipseColor.class;
case NetworkInterface.POLYGON_COLOR: return PolygonColor.class;
case NetworkInterface.RECTANGLE_COLOR: return RectangleColor.class;
case NetworkInterface.RECTANGLE_IMAGE: return RectangleImage.class;
default: return RectangleColor.class;
}
}
}