package com.clearlyspam23.GLE;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.clearlyspam23.GLE.level.LayerDefinition;
import com.clearlyspam23.GLE.level.LayerTemplate;
import com.clearlyspam23.GLE.level.Level;
import com.clearlyspam23.GLE.template.CompressionFormat;
import com.clearlyspam23.GLE.template.CoordinateSystem;
import com.clearlyspam23.GLE.template.LevelSerializer;
import com.clearlyspam23.GLE.template.PLanguageOptions;
import com.clearlyspam23.GLE.template.ParameterMacro;
import com.clearlyspam23.GLE.util.Vector2;
public class Template {
//probably should change this later
public static final String defaultLocation = System.getProperty("user.dir");
//meta data
private String name = "";
private transient File templateFile = new File(defaultLocation);
private transient JAnGLEData data;
//Runtime data
private List<ParameterMacro> runtimeCommand = new ArrayList<ParameterMacro>();
@SuppressWarnings("rawtypes")
private PLanguageOptions usedPLanguage;
private Object pLanguageData;
//General Data
private CoordinateSystem coordinateSystem;
private LevelSerializer serializer;
private CompressionFormat compression;
private String extension;
private boolean useCustomExtension = false;
private boolean useDefaultDirectory = true;
private boolean allowsRun = false;
private Vector2 defaultSize = new Vector2();
//Layer data
private List<LayerTemplate> layerTemplates = new ArrayList<LayerTemplate>();
@SuppressWarnings("rawtypes")
private List<PropertyTemplate> activeProperties = new ArrayList<PropertyTemplate>();
@SuppressWarnings("rawtypes")
private Map<LayerDefinition, Map<String, Object>> templateData = new HashMap<LayerDefinition, Map<String, Object>>();
public Template(){
}
public void addParameter(ParameterMacro macro)
{
runtimeCommand.add(macro);
}
public List<String> getParameterMacros()
{
List<String> ans = new ArrayList<String>();
for(ParameterMacro m : runtimeCommand)
ans.add(m.getRawText());
return ans;
}
public void clearParameters(){
}
public void addLayerTemplate(LayerTemplate temp)
{
temp.setTemplate(this);
layerTemplates.add(temp);
}
public List<LayerTemplate> getLayers(){
return layerTemplates;
}
public void setLayers(List<LayerTemplate> list){
layerTemplates = list;
}
public String getRuntimeCall(JAnGLEData data)
{
if(runtimeCommand.isEmpty())
return "";
String ans = runtimeCommand.get(0).getRuntimeText(data);
for(int i = 1; i < runtimeCommand.size(); i++)
ans += " " + runtimeCommand.get(1).getRuntimeText(data);
return ans;
}
public CoordinateSystem getCoordinateSystem() {
return coordinateSystem;
}
public void setCoordinateSystem(CoordinateSystem coordinateSystem) {
this.coordinateSystem = coordinateSystem;
}
public Level generateLevel()
{
Level l = new Level(this);
return l;
}
public LevelSerializer getSerializer() {
return serializer;
}
public void setSerializer(LevelSerializer serializer) {
this.serializer = serializer;
}
@SuppressWarnings("rawtypes")
public List<PropertyTemplate> getActiveProperties() {
return activeProperties;
}
@SuppressWarnings("rawtypes")
public void addProperty(PropertyTemplate tmp) {
activeProperties.add(tmp);
}
@SuppressWarnings("rawtypes")
public void setActiveProperties(List<PropertyTemplate> props){
activeProperties = props;
}
public String getTemplateName() {
return name;
}
public void setTemplateName(String templateName) {
this.name = templateName;
}
public File getTemplateFile() {
return templateFile;
}
public void setTemplateFile(File templateFile) {
this.templateFile = templateFile;
}
public PLanguageOptions<?> getUsedPLanguage() {
return usedPLanguage;
}
public void setUsedPLanguage(PLanguageOptions<?> usedPLanguage) {
this.usedPLanguage = usedPLanguage;
}
public Object getpLanguageData() {
return pLanguageData;
}
public void setpLanguageData(Object pLanguageData) {
this.pLanguageData = pLanguageData;
}
public String getExtension() {
return extension;
}
public void setExtension(String extension) {
this.extension = extension;
}
public CompressionFormat getCompression() {
return compression;
}
public void setCompression(CompressionFormat compression) {
this.compression = compression;
}
public boolean isUsingCustomExtension() {
return useCustomExtension;
}
public void useCustomExtension(boolean useCustom) {
useCustomExtension = useCustom;
}
public boolean isUsingDefaultDirectory() {
return useDefaultDirectory;
}
public void useDefaultDirectory(boolean useDefaultDirectory) {
this.useDefaultDirectory = useDefaultDirectory;
}
public LayerTemplate getLayerTemplate(String name){
for(LayerTemplate t : layerTemplates)
if(t.getName().equals(name))
return t;
return null;
}
@SuppressWarnings("rawtypes")
public PropertyTemplate getPropertyTemplate(String key) {
for(PropertyTemplate t : activeProperties)
if(t.getName().equals(key))
return t;
return null;
}
@SuppressWarnings("rawtypes")
public void putTemplateData(LayerDefinition def, String name, Object data){
if(!templateData.containsKey(def)){
templateData.put(def, new HashMap<String, Object>());
}
templateData.get(def).put(name, data);
}
@SuppressWarnings("rawtypes")
public Object getTemplateData(LayerDefinition def, String name){
return templateData.get(def).get(name);
}
public Vector2 getDefaultSize() {
return defaultSize;
}
public void setDefaultSize(Vector2 defaultSize) {
this.defaultSize = defaultSize;
}
@SuppressWarnings("rawtypes")
public Map<LayerDefinition, Map<String, Object>> getTemplateData() {
return templateData;
}
@SuppressWarnings("rawtypes")
public void setTemplateData(
Map<LayerDefinition, Map<String, Object>> templateData) {
this.templateData = templateData;
}
public JAnGLEData getData() {
return data;
}
public void setData(JAnGLEData data) {
this.data = data;
}
public boolean save(){
return data.saveTemplate(this);
}
public boolean allowsRun() {
return allowsRun;
}
public void setAllowsRun(boolean allowsRun) {
this.allowsRun = allowsRun;
}
}