+ Added lua writing functionality

This commit is contained in:
Matthew Cech
2019-09-11 23:10:36 -07:00
parent cf7bd68658
commit 4b8b125d05
8 changed files with 130 additions and 7 deletions
+13 -1
View File
@@ -1,5 +1,7 @@
package commands.dew; package commands.dew;
import commands.dew.core.data.*;
import commands.dew.core.impl.DewLuaCore;
import core.SubCommand; import core.SubCommand;
import core.SubCommandFormattable; import core.SubCommandFormattable;
import dataStructures.KittyChannel; import dataStructures.KittyChannel;
@@ -16,9 +18,19 @@ public class CommandDewStart extends SubCommand
super(roleLevel, contentRating); super(roleLevel, contentRating);
} }
private String asCodeBlock(String string)
{
return "```lua\n" + string + "```";
}
@Override @Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input) public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{ {
return new SubCommandFormattable ("weh"); String out = "";
out += asCodeBlock(DewLuaCore.toLua(new DewMap()));
out += asCodeBlock(DewLuaCore.toLua(new DewMovementInfo()));
return new SubCommandFormattable(out);
} }
} }
@@ -0,0 +1,6 @@
package commands.dew.core.api;
public interface IDewEntity
{
public String getUniqueID();
}
@@ -0,0 +1,19 @@
package commands.dew.core.api;
// Commands are standalone pieces of data that contain only structures.
// Each command is simplistic and represents an action in the game world.
// Format:
/*
return
{
name="SomeCommand",
data={
-- some object here --
}
}
*/
public interface IDewMessage<T>
{
public String getMessageName();
public T getData();
}
+1 -2
View File
@@ -1,7 +1,6 @@
package commands.dew.core.api; package commands.dew.core.api;
public interface IDewPlayer public interface IDewPlayer extends IDewEntity
{ {
public String getName(); public String getName();
public String getUniqueID();
} }
+1 -1
View File
@@ -6,5 +6,5 @@ public final class DewMap implements IDewLuaSerializable<DewMap>
{ {
public int mapWidth = 20; public int mapWidth = 20;
public int mapHeight = 20; public int mapHeight = 20;
public DewMapTile[][] map; public int[][] map;
} }
+4 -1
View File
@@ -1,8 +1,11 @@
package commands.dew.core.data; package commands.dew.core.data;
import commands.dew.core.api.IDewLuaSerializable;
public enum DewMapTile public enum DewMapTile
{ {
Default(0), Tree(1); // Assign multiples of 2 for flag purposes
Default(0), Grass(1), Tree(2);
private final int value; private final int value;
private DewMapTile(int value) private DewMapTile(int value)
@@ -0,0 +1,11 @@
package commands.dew.core.data;
import commands.dew.core.api.IDewLuaSerializable;
// Treat all data objects as structs for the purposes of this.
public class DewMovementInfo implements IDewLuaSerializable<DewMovementInfo>
{
public String entityID;
public int x;
public int y;
}
+74 -1
View File
@@ -7,7 +7,78 @@ import commands.dew.core.api.IDewLuaSerializable;
public class DewLuaCore implements IDewLuaCore public class DewLuaCore implements IDewLuaCore
{ {
public static void toLua(IDewLuaSerializable item) public static String toLua(IDewLuaSerializable<?> item)
{
return toLua(item, 1);
}
public static String toLua(IDewLuaSerializable<?> item, int tabs)
{
String out = "{";
Field[] fields = item.getClass().getDeclaredFields();
for(int i = 0; i < fields.length; ++i)
{
Field current = fields[i];
try
{
String line = "\n";
String fieldTypeRaw = current.getType().toString().toLowerCase();
int fieldLastDotIndex = fieldTypeRaw.lastIndexOf('.');
String fieldType = fieldLastDotIndex <= 0 ? fieldTypeRaw : fieldTypeRaw.substring(fieldLastDotIndex + 1);
for(int j = 0; j < tabs; ++j)
line += "\t";
line += current.getName() + "=";
switch(fieldType)
{
case "int":
line += "" + current.get(item);
break;
case "string":
String content = (String)current.get(item);
if(content == null)
line += "nil";
else if(content.length() == 0)
line += "\"\"";
else
line += "\"" + content + "\"";
break;
case "dewmaptile ":
line += "\"" + current.get(item).toString() + "\"";
break;
default:
System.out.print("Found a type we couldn't parse: Raw - " + fieldTypeRaw + " | Parsed - " + fieldType + "\n");
break;
}
// If we're not the last line, add a comma.
if(i != fields.length - 1)
{
line += ",";
}
out += line;
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
}
out += "\n}\n";
return out;
}
public static <T> IDewLuaSerializable<T> fromLua(String item)
{ {
for(Field field : item.getClass().getDeclaredFields()) for(Field field : item.getClass().getDeclaredFields())
{ {
@@ -20,5 +91,7 @@ public class DewLuaCore implements IDewLuaCore
e.printStackTrace(); e.printStackTrace();
} }
} }
return null;
} }
} }