public static LuaTable MakeLuaTable(NLua.Lua luaInterpreter, string tableName) { luaInterpreter.NewTable(tableName); LuaTable taskTable = luaInterpreter.GetTable(tableName); return(taskTable); }
protected LuaScript(Lua lua, TEntity entity, string tableName) { Lua = lua; Entity = entity; _table = Lua.GetTable(tableName); }
private static void PushVisibilityTable(NLua.Lua luaInterpreter) { luaInterpreter.NewTable("visibility"); LuaTable luaTable = luaInterpreter.GetTable("visibility"); luaTable["private"] = WorkshopItemVisibility.Private; luaTable["public"] = WorkshopItemVisibility.Public; }
private static void AddSetting(Lua lua, ModSetting setting) { var path = "settings.startup." + setting.Name; lua.NewTable(path); var table = lua.GetTable(path); table["value"] = setting.DefaultValue; }
private LuaTable getTable(string name) { if (!_isLoaded) { return(null); } return(_lua.GetTable(name)); }
public void SetTableStringField2 () { using (Lua lua = new Lua ()) { lua.DoString ("a={b={c=\"test\"}}"); LuaTable tab = lua.GetTable ("a"); tab ["b.c"] = "new test"; string str = lua.GetString ("a.b.c"); //Console.WriteLine("a.b.c="+str); Assert.AreEqual (str, "new test"); } }
public void SetTableNumericField2 () { using (Lua lua = new Lua ()) { lua.DoString ("a={b={c=2}}"); LuaTable tab = lua.GetTable ("a"); tab ["b.c"] = 3; double num = lua.GetNumber ("a.b.c"); //Console.WriteLine("a.b.c="+num); Assert.AreEqual (num, 3d); } }
public void GetTableStringField1 () { using (Lua lua = new Lua ()) { lua.DoString ("a={b={c=\"test\"}}"); LuaTable tab = lua.GetTable ("a.b"); string str = (string)tab ["c"]; //Console.WriteLine("a.b.c="+str); Assert.AreEqual (str, "test"); } }
public void GetAndSetTable () { using (Lua lua = new Lua ()) { lua.DoString ("a={b={c=2}}\nb={c=3}"); LuaTable tab = lua.GetTable ("b"); lua ["a.b"] = tab; double num = lua.GetNumber ("a.b.c"); //Console.WriteLine("a.b.c="+num); Assert.AreEqual (num, 3d); } }
public void GetTableNumericField1 () { using (Lua lua = new Lua ()) { lua.DoString ("a={b={c=2}}"); LuaTable tab = lua.GetTable ("a.b"); double num = (double)tab ["c"]; //Console.WriteLine("a.b.c="+num); Assert.AreEqual (num, 2d); } }
private void LoadSaveLua(){ System.Text.Encoding encodeType = System.Text.Encoding.ASCII; string loadedFileSave = ""; string MapPath = EnvPaths.GetMapsPath(); loadedFileSave = System.IO.File.ReadAllText(ScenarioData.SaveLua.Replace("/maps/", MapPath), encodeType); string loadedFileFunctions = LuaHelper.GetStructureText ("lua_variable_functions.lua"); //loadedFileFunctions = System.IO.File.ReadAllText(StructurePath + "lua_variable_functions.lua", encodeType); string loadedFileEndFunctions = LuaHelper.GetStructureText ("lua_variable_end_functions.lua"); //loadedFileEndFunctions = System.IO.File.ReadAllText(StructurePath + "lua_variable_end_functions.lua", encodeType); loadedFileSave = loadedFileFunctions + loadedFileSave + loadedFileEndFunctions; save = new Lua(); save.LoadCLRPackage(); try { save.DoString(loadedFileSave); } catch(NLua.Exceptions.LuaException e) { Debug.LogError(ParsingStructureData.FormatException(e), gameObject); HelperGui.MapLoaded = false; return; } // LoadArea ScenarioData.Area = new Rect(); if(save.GetTable("Scenario.Areas.AREA_1") != null && save.GetTable("Scenario.Areas.AREA_1").ToString() != "null"){ ScenarioData.DefaultArea = true; ScenarioData.Area.x = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[1].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.Area.y = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[2].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.Area.width = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[3].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.Area.height = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[4].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); UpdateArea(); } else{ ScenarioData.DefaultArea = false; HeightmapControler.TerrainMaterial.SetInt("_Area", ScenarioData.DefaultArea?1:0); MapElements.SetActive(false); HeightmapControler.TerrainMaterial.SetFloat("_AreaX", 0); HeightmapControler.TerrainMaterial.SetFloat("_AreaY", 0); HeightmapControler.TerrainMaterial.SetFloat("_AreaWidht", ScenarioData.Size.x / 10f); HeightmapControler.TerrainMaterial.SetFloat("_AreaHeight", ScenarioData.Size.y / 10f); } MapCenterPoint = Vector3.zero; MapCenterPoint.x = (ScenarioData.Size.x / 20); MapCenterPoint.z = -1 * (ScenarioData.Size.y / 20); // LoadMarkers #region Load Markers //int MarkersCount = save.GetTable("Scenario.MasterChain._MASTERCHAIN_.Markers").Values.Count; Mexes = new List<Mex>(); Hydros = new List<Hydro>(); ARMY_ = new List<Army>(); SiMarkers = new List<Marker>(); //LuaTable MasterChain = save.GetTable("Scenario.MasterChain._MASTERCHAIN_.Markers") as LuaTable; //string[] KeysArray = new string[MarkersCount]; //MasterChain.Keys.CopyTo(KeysArray, 0); LuaHelper.LHTable MarkersTable = new LuaHelper.LHTable(save.GetTable("Scenario.MasterChain._MASTERCHAIN_.Markers")); for(int m = 0; m < MarkersTable.Count; m++){ //LuaTable MarkerTab = MasterChain[KeysArray[m]] as LuaTable; LuaHelper.LHTable MarkerTable = new LuaHelper.LHTable(MarkersTable, MarkersTable.Keys[m]); Vector3 MarkerPosParsed = Vector3.zero; MarkerTable.GetVector3Value("position", out MarkerPosParsed); Vector3 MarkerRotParsed = Vector3.zero; MarkerTable.GetVector3Value("orientation", out MarkerRotParsed); string TypeOfMarker = MarkerTable.GetStringValue("type"); if(TypeOfMarker == "Mass"){ Mex newMex = new Mex(); newMex.name = MarkersTable.Keys[m]; newMex.position = HeightmapControler.MapPosInWorld(MarkerPosParsed); newMex.orientation = MarkerRotParsed; LuaHelper.ReadSpawnWithArmy(out newMex.SpawnWithArmy, MarkerTable); Mexes.Add(newMex); } else if(TypeOfMarker == "Hydrocarbon"){ Hydro NewHydro = new Hydro(); NewHydro.name = MarkersTable.Keys[m]; NewHydro.size = MarkerTable.GetFloatValue("size"); NewHydro.amount = MarkerTable.GetFloatValue("amount"); NewHydro.resource = MarkerTable.GetBoolValue("resource"); NewHydro.prop = MarkerTable.GetStringValue("prop"); NewHydro.color = MarkerTable.GetColorValue("color"); NewHydro.position = HeightmapControler.MapPosInWorld(MarkerPosParsed); NewHydro.orientation = MarkerRotParsed; LuaHelper.ReadSpawnWithArmy(out NewHydro.SpawnWithArmy, MarkerTable); Hydros.Add(NewHydro); } else if(MarkersTable.Keys[m].Contains("ARMY_")){ Army NewArmy = new Army(); NewArmy.name = MarkersTable.Keys[m]; NewArmy.Id = int.Parse(MarkersTable.Keys[m].Replace("ARMY_", "")); NewArmy.position = HeightmapControler.MapPosInWorld(MarkerPosParsed); NewArmy.orientation = MarkerRotParsed; ARMY_.Add(NewArmy); } else{ Marker NewMarker = new Marker(); NewMarker.name = MarkersTable.Keys[m]; NewMarker.position = HeightmapControler.MapPosInWorld(MarkerPosParsed); NewMarker.orientation = MarkerRotParsed; NewMarker.type = TypeOfMarker; NewMarker.prop = MarkerTable.GetStringValue("prop"); // HINT NewMarker.hintValue = MarkerTable.GetStringValue("hint"); NewMarker.hint = MarkerTable.GetBoolValue("hint"); // GRAPH NewMarker.graph = MarkerTable.GetStringValue("graph"); // adjacentTo NewMarker.adjacentTo = MarkerTable.GetStringValue("adjacentTo"); // Color if (!string.IsNullOrEmpty(MarkerTable.GetStringValue("color"))) { //Color MyColor = Color.white; //ColorUtility.TryParseHtmlString (MarkerTable.GetStringValue("color"), out MyColor); NewMarker.Kolor = MarkerTable.GetColorValue("color"); } else NewMarker.Kolor = Color.white; LuaHelper.ReadSpawnWithArmy(out NewMarker.SpawnWithArmy, MarkerTable); SiMarkers.Add(NewMarker); } } SortArmys(); MexTotalCount = Mexes.Count; HydrosTotalCount = Hydros.Count; SiTotalCount = SiMarkers.Count; #endregion #region Load Army Save SaveArmys = new List<SaveArmy> (); LuaHelper.LHTable ArmiesTable = new LuaHelper.LHTable(save.GetTable("Scenario.Armies")); for(int m = 0; m < ArmiesTable.Count; m++){ LuaHelper.LHTable ArmyTable = new LuaHelper.LHTable(ArmiesTable, ArmiesTable.Keys[m]); SaveArmy NewArmy = new SaveArmy(); NewArmy.Name = ArmiesTable.Keys[m]; AddSaveArmyMarker(NewArmy.Name); NewArmy.personality = ArmyTable.GetStringValue("personality"); NewArmy.plans = ArmyTable.GetStringValue("plans"); NewArmy.color = ArmyTable.GetIntValue("color"); NewArmy.faction = ArmyTable.GetIntValue("faction"); LuaHelper.LHTable EconomyTable = new LuaHelper.LHTable(ArmyTable, "Economy"); NewArmy.EconomyMass = EconomyTable.GetIntValue("mass"); NewArmy.EconomyEnergy = EconomyTable.GetIntValue("energy"); NewArmy.Alliances = ArmyTable.GetStringArrayValue("Alliances"); // Get units NewArmy.UnitsOrders = ""; NewArmy.UnitsPlatoon = ""; NewArmy.Units = new List<UnitGroup>(); LuaHelper.LHTable ArmyUnitsTable; ArmyTable.GetLuaArmyGroup("Units", out NewArmy.UnitsOrders, out NewArmy.UnitsPlatoon, out ArmyUnitsTable); for(int i = 0; i < ArmyUnitsTable.Count; i++){ UnitGroup NewUnitGroup = new UnitGroup(); NewUnitGroup.Name = ArmyUnitsTable.Keys[i]; LuaHelper.LHTable UnitsGroupTable; ArmyUnitsTable.GetLuaArmyGroup(ArmyUnitsTable.Keys[i], out NewUnitGroup.orders, out NewUnitGroup.platoon, out UnitsGroupTable); for(int u = 0; u < UnitsGroupTable.Count; u++){ Unit NewUnit = new Unit(); LuaHelper.LHTable UnitTable = new LuaHelper.LHTable(UnitsGroupTable, UnitsGroupTable.Keys[u]); NewUnit.Name = UnitsGroupTable.Keys[u]; NewUnit.type = UnitTable.GetStringValue("type"); NewUnit.orders = UnitTable.GetStringValue("orders"); NewUnit.platoon = UnitTable.GetStringValue("platoon"); UnitTable.GetVector3Value("Position", out NewUnit.Position); UnitTable.GetVector3Value("Orientation", out NewUnit.Orientation); NewUnitGroup.Units.Add(NewUnit); } NewArmy.Units.Add(NewUnitGroup); } SaveArmys.Add(NewArmy); } #endregion }
public static void LoadRecipes() { using (Lua lua = new Lua()) { List<String> luaFiles = getAllLuaFiles().ToList(); List<String> luaDirs = getAllModDirs().ToList(); //Add all these files to the Lua path variable foreach (String dir in luaDirs) { AddLuaPackagePath(lua, dir); //Prototype folder matches package hierarchy so this is enough. } AddLuaPackagePath(lua, Path.Combine(luaDirs[0], "lualib")); //Add lualib dir String dataloaderFile = luaFiles.Find(f => f.EndsWith("dataloader.lua")); String autoplaceFile = luaFiles.Find(f => f.EndsWith("autoplace_utils.lua")); List<String> itemFiles = luaFiles.Where(f => f.Contains("prototypes" + Path.DirectorySeparatorChar + "item")).ToList(); itemFiles.AddRange(luaFiles.Where(f => f.Contains("prototypes" + Path.DirectorySeparatorChar + "fluid")).ToList()); itemFiles.AddRange(luaFiles.Where(f => f.Contains("prototypes" + Path.DirectorySeparatorChar + "equipment")).ToList()); List<String> recipeFiles = luaFiles.Where(f => f.Contains("prototypes" + Path.DirectorySeparatorChar + "recipe")).ToList(); List<String> entityFiles = luaFiles.Where(f => f.Contains("prototypes" + Path.DirectorySeparatorChar + "entity")).ToList(); try { lua.DoFile(dataloaderFile); } catch (Exception e) { failedFiles[dataloaderFile] = e; return; //There's no way to load anything else without this file. } try { lua.DoFile(autoplaceFile); } catch (Exception e) { failedFiles[autoplaceFile] = e; } foreach (String f in itemFiles.Union(recipeFiles).Union(entityFiles)) { try { lua.DoFile(f); } catch (NLua.Exceptions.LuaScriptException e) { failedFiles[f] = e; } } foreach (String type in new List<String> { "item", "fluid", "capsule", "module", "ammo", "gun", "armor", "blueprint", "deconstruction-item" }) { InterpretItems(lua, type); } LuaTable recipeTable = lua.GetTable("data.raw")["recipe"] as LuaTable; if (recipeTable != null) { var recipeEnumerator = recipeTable.GetEnumerator(); while (recipeEnumerator.MoveNext()) { InterpretLuaRecipe(recipeEnumerator.Key as String, recipeEnumerator.Value as LuaTable); } } LuaTable assemblerTable = lua.GetTable("data.raw")["assembling-machine"] as LuaTable; if (assemblerTable != null) { var assemblerEnumerator = assemblerTable.GetEnumerator(); while (assemblerEnumerator.MoveNext()) { InterpretAssemblingMachine(assemblerEnumerator.Key as String, assemblerEnumerator.Value as LuaTable); } } LuaTable furnaceTable = lua.GetTable("data.raw")["furnace"] as LuaTable; if (furnaceTable != null) { var furnaceEnumerator = furnaceTable.GetEnumerator(); while (furnaceEnumerator.MoveNext()) { InterpretFurnace(furnaceEnumerator.Key as String, furnaceEnumerator.Value as LuaTable); } } LuaTable minerTable = lua.GetTable("data.raw")["mining-drill"] as LuaTable; if (minerTable != null) { var minerEnumerator = minerTable.GetEnumerator(); while (minerEnumerator.MoveNext()) { InterpretMiner(minerEnumerator.Key as String, minerEnumerator.Value as LuaTable); } } LuaTable resourceTable = lua.GetTable("data.raw")["resource"] as LuaTable; if (resourceTable != null) { var resourceEnumerator = resourceTable.GetEnumerator(); while (resourceEnumerator.MoveNext()) { InterpretResource(resourceEnumerator.Key as String, resourceEnumerator.Value as LuaTable); } } LuaTable moduleTable = lua.GetTable("data.raw")["module"] as LuaTable; if (moduleTable != null) { foreach (String moduleName in moduleTable.Keys) { InterpretModule(moduleName, moduleTable[moduleName] as LuaTable); } } UnknownIcon = LoadImage("UnknownIcon.png"); LoadLocaleFiles(); LoadItemNames("item-name"); LoadItemNames("fluid-name"); LoadItemNames("entity-name"); LoadItemNames("equipment-name"); LoadRecipeNames(); LoadEntityNames(); LoadModuleNames(); } }
private static void InterpretItems(Lua lua, String typeName) { LuaTable itemTable = lua.GetTable("data.raw")[typeName] as LuaTable; if (itemTable != null) { var enumerator = itemTable.GetEnumerator(); while (enumerator.MoveNext()) { InterpretLuaItem(enumerator.Key as String, enumerator.Value as LuaTable); } } }
public void SetTableObjectField1 () { using (Lua lua = new Lua ()) { lua.DoString ("a={b={c=\"test\"}}"); LuaTable tab = lua.GetTable ("a.b"); TestClass t1 = new TestClass (); t1.testval = 4; tab ["c"] = t1; TestClass t2 = (TestClass)lua ["a.b.c"]; //Console.WriteLine("a.b.c="+t2.testval); Assert.AreEqual (4, t2.testval); Assert.AreEqual (t1 , t2); } }
/// <summary> /// Create a building. /// </summary> /// <param name="key">The key of the building to create as defined in its .lua file</param> /// <param name="position">Position, in pixels, to create the building at</param> /// <returns></returns> public static Building CreateBuilding(string key, Vector2 position) { Building Output = new Building(); lua = new Lua(); lua.DoFile(GetPath(key)); if ((string)lua["type"] == "building") { Output.Name = (string)lua["name"]; Output.Description = (string)lua["description"]; //Output.Position = position; //Output.Rotation = (float)(double)lua["rotation"]; #region Drawables LuaTable drawables = lua.GetTable("drawableParts"); Output.BuildingParts = new List<DrawableBuildingPart>(drawables.Values.Count); foreach (LuaTable table in drawables.Values) { DrawableBuildingPart part = new DrawableBuildingPart(); part.Image = Art.LoadImage((string)table["imagePath"]); part.Alpha = (float)(double)table["alpha"]; part.Tint = LuaHelper.LuaToColor((LuaTable)table["tint"]); part.Offset = new Vector2((int)(double)table["offsetX"], (int)(double)table["offsetY"]); part.Rotation = (float)(double)table["rotation"]; Output.BuildingParts.Add(part); //part.Offset = new Vector2( } #endregion #region Physics Output.Body = BodyFactory.CreateBody(World); Output.Body.BodyType = BodyType.Dynamic; Output.Body.FixedRotation = true; Output.Body.Position = Physics.ToMetres(position); LuaTable physicsShapes = lua.GetTable("physicsShapes"); LuaTable rectangles = (LuaTable)physicsShapes["rectangles"]; foreach (LuaTable table in rectangles.Values) { Vector2 centre = new Vector2( Physics.ToMetres((float)(double)table["centreX"]), Physics.ToMetres((float)(double)table["centreY"]) ); float width = Physics.ToMetres((float)(double)table["width"]); float height = Physics.ToMetres((float)(double)table["height"]); //float rotation = (float)(double)table["rotation"]; //Body body = BodyFactory.CreateRectangle(World, width, height, 1, centre); Fixture fix = FixtureFactory.AttachRectangle(width, height, 1, centre, Output.Body); //Fixture fix = new Fixture( //FixtureFactory. //FixtureDef //fix. //body.Rotation = rotation; //Body } LuaTable circles = (LuaTable)physicsShapes["circles"]; foreach (LuaTable table in circles) { Vector2 centre = new Vector2( Physics.ToMetres((float)(double)table["centreX"]), Physics.ToMetres((float)(double)table["centreY"]) ); float radius = Physics.ToMetres((float)(double)table["radius"]); } #endregion } //lua. Buildings.Add(Output); return Output; }
private void LoadSaveLua(){ System.Text.Encoding encodeType = System.Text.Encoding.ASCII; string loadedFileSave = ""; string MapPath = PlayerPrefs.GetString("MapsPath", "maps/"); loadedFileSave = System.IO.File.ReadAllText(ScenarioData.SaveLua.Replace("/maps/", MapPath), encodeType); string loadedFileFunctions = ""; loadedFileFunctions = System.IO.File.ReadAllText(StructurePath + "lua_variable_functions.lua", encodeType); string loadedFileEndFunctions = ""; loadedFileEndFunctions = System.IO.File.ReadAllText(StructurePath + "lua_variable_end_functions.lua", encodeType); loadedFileSave = loadedFileFunctions + loadedFileSave + loadedFileEndFunctions; save = new Lua(); save.LoadCLRPackage(); try { save.DoString(loadedFileSave); } catch(NLua.Exceptions.LuaException e) { Debug.LogError(FormatException(e), gameObject); HelperGui.MapLoaded = false; return; } // LoadArea ScenarioData.Area = new Rect(); if(save.GetTable("Scenario.Areas.AREA_1") != null && save.GetTable("Scenario.Areas.AREA_1").ToString() != "null"){ ScenarioData.DefaultArea = true; ScenarioData.Area.x = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[1].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.Area.y = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[2].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.Area.width = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[3].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.Area.height = float.Parse(save.GetTable("Scenario.Areas.AREA_1.rectangle")[4].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); UpdateArea(); } else{ ScenarioData.DefaultArea = false; HeightmapControler.TerrainMaterial.SetInt("_Area", ScenarioData.DefaultArea?1:0); MapElements.SetActive(false); HeightmapControler.TerrainMaterial.SetFloat("_AreaX", 0); HeightmapControler.TerrainMaterial.SetFloat("_AreaY", 0); HeightmapControler.TerrainMaterial.SetFloat("_AreaWidht", ScenarioData.Size.x / 10f); HeightmapControler.TerrainMaterial.SetFloat("_AreaHeight", ScenarioData.Size.y / 10f); } MapCenterPoint = Vector3.zero; MapCenterPoint.x = (ScenarioData.Size.x / 20); MapCenterPoint.z = -1 * (ScenarioData.Size.y / 20); // LoadMarkers int MarkersCount = save.GetTable("Scenario.MasterChain._MASTERCHAIN_.Markers").Values.Count; int SpawnCount = 0; int MassCount = 0; int HydroCount = 0; int SiCount = 0; LuaTable MasterChain = save.GetTable("Scenario.MasterChain._MASTERCHAIN_.Markers") as LuaTable; Mexes = new List<Mex>(); Hydros = new List<Hydro>(); ARMY_ = new List<Army>(); SiMarkers = new List<Marker>(); for(int m = 0; m < MarkersCount; m++){ LuaTable MarkerTab = MasterChain[save.GetTable("AllKeyMarkers")[m + 1].ToString()] as LuaTable; LuaTable MarkerPos = MarkerTab["position"] as LuaTable; if(MarkerTab["type"].ToString() == "Mass"){ Mexes.Add(new Mex()); Mexes[MassCount].name = save.GetTable("AllKeyMarkers")[m + 1].ToString(); Mexes[MassCount].position.x = float.Parse(MarkerPos[1].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); Mexes[MassCount].position.y = float.Parse(MarkerPos[2].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); Mexes[MassCount].position.z = float.Parse(MarkerPos[3].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); Mexes[MassCount].SpawnWithArmy = armys.ARMY1; if(MarkerTab["position"].ToString() != null && MarkerTab["position"].ToString() != "null"){ switch(MarkerTab["position"].ToString()){ case "ARMY_1": Mexes[MassCount].SpawnWithArmy = armys.ARMY1; break; case "ARMY_2": Mexes[MassCount].SpawnWithArmy = armys.ARMY2; break; case "ARMY_3": Mexes[MassCount].SpawnWithArmy = armys.ARMY3; break; case "ARMY_4": Mexes[MassCount].SpawnWithArmy = armys.ARMY4; break; case "ARMY_5": Mexes[MassCount].SpawnWithArmy = armys.ARMY5; break; case "ARMY_6": Mexes[MassCount].SpawnWithArmy = armys.ARMY6; break; case "ARMY_7": Mexes[MassCount].SpawnWithArmy = armys.ARMY7; break; case "ARMY_8": Mexes[MassCount].SpawnWithArmy = armys.ARMY8; break; case "ARMY_9": Mexes[MassCount].SpawnWithArmy = armys.ARMY9; break; case "ARMY_10": Mexes[MassCount].SpawnWithArmy = armys.ARMY10; break; case "ARMY_11": Mexes[MassCount].SpawnWithArmy = armys.ARMY11; break; case "ARMY_12": Mexes[MassCount].SpawnWithArmy = armys.ARMY12; break; } } //GameObject NewMex = Instantiate(Prefabs[1], Vector3.zero, Quaternion.identity) as GameObject; //NewMex.name = Mexes[MassCount].name; //Mexes[MassCount].Mark = NewMex.transform; //Mexes[MassCount].Mark.parent = MarkersParent; Vector3 MexLocPos = HeightmapControler.MapPosInWorld(Mexes[MassCount].position); //Mexes[MassCount].Mark.localPosition = MexLocPos; Mexes[MassCount].position = MexLocPos; //Mexes[MassCount].Script = Mexes[MassCount].Mark.gameObject.GetComponent<MarkerScript>(); //Mexes[MassCount].Script.Typ = MarkerScript.MarkersTypes.Mex; //if(Water) Mexes[MassCount].Script.WaterLevel = ScenarioData.MaxHeight / 12.8f; //else Mexes[MassCount].Script.WaterLevel = 0; MassCount++; } else if(MarkerTab["type"].ToString() == "Hydrocarbon"){ Hydros.Add(new Hydro()); Hydros[HydroCount].name = save.GetTable("AllKeyMarkers")[m + 1].ToString(); Hydros[HydroCount].position.x = float.Parse(MarkerPos[1].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); Hydros[HydroCount].position.y = float.Parse(MarkerPos[2].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); Hydros[HydroCount].position.z = float.Parse(MarkerPos[3].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); Hydros[HydroCount].SpawnWithArmy = armys.ARMY1; if(MarkerTab["position"].ToString() != null && MarkerTab["position"].ToString() != "null"){ switch(MarkerTab["position"].ToString()){ case "ARMY_1": Hydros[HydroCount].SpawnWithArmy = armys.ARMY1; break; case "ARMY_2": Hydros[HydroCount].SpawnWithArmy = armys.ARMY2; break; case "ARMY_3": Hydros[HydroCount].SpawnWithArmy = armys.ARMY3; break; case "ARMY_4": Hydros[HydroCount].SpawnWithArmy = armys.ARMY4; break; case "ARMY_5": Hydros[HydroCount].SpawnWithArmy = armys.ARMY5; break; case "ARMY_6": Hydros[HydroCount].SpawnWithArmy = armys.ARMY6; break; case "ARMY_7": Hydros[HydroCount].SpawnWithArmy = armys.ARMY7; break; case "ARMY_8": Hydros[HydroCount].SpawnWithArmy = armys.ARMY8; break; case "ARMY_9": Hydros[HydroCount].SpawnWithArmy = armys.ARMY9; break; case "ARMY_10": Hydros[HydroCount].SpawnWithArmy = armys.ARMY10; break; case "ARMY_11": Hydros[HydroCount].SpawnWithArmy = armys.ARMY11; break; case "ARMY_12": Hydros[HydroCount].SpawnWithArmy = armys.ARMY12; break; } } //GameObject NewMex = Instantiate(Prefabs[2], Vector3.zero, Quaternion.identity) as GameObject; //NewMex.name = Hydros[HydroCount].name; //Hydros[HydroCount].Mark = NewMex.transform; //Hydros[HydroCount].Mark.parent = MarkersParent; Vector3 MexLocPos = HeightmapControler.MapPosInWorld(Hydros[HydroCount].position); Hydros[HydroCount].position = MexLocPos; //Hydros[HydroCount].Mark.localPosition = MexLocPos; //Hydros[HydroCount].Script = Hydros[HydroCount].Mark.gameObject.GetComponent<MarkerScript>(); //Hydros[HydroCount].Script.Typ = MarkerScript.MarkersTypes.Mex; //if(Water) Hydros[HydroCount].Script.WaterLevel = ScenarioData.MaxHeight / 12.8f; //else Hydros[HydroCount].Script.WaterLevel = 0; HydroCount++; } else if(save.GetTable("AllKeyMarkers")[m + 1].ToString().Contains("ARMY_")){ ARMY_.Add(new Army()); ARMY_[SpawnCount].name = save.GetTable("AllKeyMarkers")[m + 1].ToString(); //GameObject NewSpawn = Instantiate(Prefabs[0], Vector3.zero, Quaternion.identity) as GameObject; //ARMY_[SpawnCount].Mark = NewSpawn.transform; //ARMY_[SpawnCount].Mark.parent = MarkersParent; //Vector3 MexLocPos = Vector3.zero; //NewSpawn.name = ARMY_[SpawnCount].name; ARMY_[SpawnCount].position.x = float.Parse(MarkerPos[1].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ARMY_[SpawnCount].position.y = float.Parse(MarkerPos[2].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ARMY_[SpawnCount].position.z = float.Parse(MarkerPos[3].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); //MexLocPos.x = -1 * (ScenarioData.Size.x / 20) + 1 * (ARMY_[SpawnCount].position.x / ScenarioData.Size.x) * (ScenarioData.Size.x / 10); //MexLocPos.z = -1 * (ScenarioData.Size.y / 20) + 1 * (ARMY_[SpawnCount].position.z / ScenarioData.Size.y) * (ScenarioData.Size.y / 10); Vector3 MexLocPos = HeightmapControler.MapPosInWorld(ARMY_[SpawnCount].position); ARMY_[SpawnCount].position = MexLocPos; //ARMY_[SpawnCount].Mark.localPosition = MexLocPos; //ARMY_[SpawnCount].Script = ARMY_[SpawnCount].Mark.gameObject.GetComponent<MarkerScript>(); //ARMY_[SpawnCount].Script.Typ = MarkerScript.MarkersTypes.Army; //if(Water) ARMY_[SpawnCount].Script.WaterLevel = ScenarioData.MaxHeight / 12.8f; //else ARMY_[SpawnCount].Script.WaterLevel = 0; SpawnCount++; } else{ SiMarkers.Add(new Marker()); SiMarkers[SiCount].name = save.GetTable("AllKeyMarkers")[m + 1].ToString(); SiMarkers[SiCount].position.x = float.Parse(MarkerPos[1].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); SiMarkers[SiCount].position.y = float.Parse(MarkerPos[2].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); SiMarkers[SiCount].position.z = float.Parse(MarkerPos[3].ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); SiMarkers[SiCount].SpawnWithArmy = armys.ARMY1; if(MarkerTab["position"].ToString() != null && MarkerTab["position"].ToString() != "null"){ switch(MarkerTab["position"].ToString()){ case "ARMY_1": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY1; break; case "ARMY_2": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY2; break; case "ARMY_3": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY3; break; case "ARMY_4": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY4; break; case "ARMY_5": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY5; break; case "ARMY_6": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY6; break; case "ARMY_7": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY7; break; case "ARMY_8": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY8; break; case "ARMY_9": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY9; break; case "ARMY_10": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY10; break; case "ARMY_11": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY11; break; case "ARMY_12": SiMarkers[SiCount].SpawnWithArmy = armys.ARMY12; break; } } //GameObject NewMex; switch(MarkerTab["type"].ToString()){ case "Rally Point": //NewMex = Instantiate(Prefabs[3], Vector3.zero, Quaternion.identity) as GameObject; break; case "Combat Zone": //NewMex = Instantiate(Prefabs[4], Vector3.zero, Quaternion.identity) as GameObject; break; case "Defensive Point": //NewMex = Instantiate(Prefabs[5], Vector3.zero, Quaternion.identity) as GameObject; break; case "Naval Area": //NewMex = Instantiate(Prefabs[6], Vector3.zero, Quaternion.identity) as GameObject; break; default: //NewMex = Instantiate(Prefabs[5], Vector3.zero, Quaternion.identity) as GameObject; break; } SiMarkers[SiCount].type = MarkerTab["type"].ToString(); SiMarkers[SiCount].prop = MarkerTab["prop"].ToString(); //NewMex.name = SiMarkers[SiCount].name; //SiMarkers[SiCount].Mark = NewMex.transform; //SiMarkers[SiCount].Mark.parent = MarkersParent; Vector3 MexLocPos = HeightmapControler.MapPosInWorld(SiMarkers[SiCount].position); SiMarkers[SiCount].position = MexLocPos; //SiMarkers[SiCount].Mark.localPosition = MexLocPos; //SiMarkers[SiCount].Script = SiMarkers[SiCount].Mark.gameObject.GetComponent<MarkerScript>(); //SiMarkers[SiCount].Script.Typ = MarkerScript.MarkersTypes.Mex; //if(Water) SiMarkers[SiCount].Script.WaterLevel = ScenarioData.MaxHeight / 12.8f; //else SiMarkers[SiCount].Script.WaterLevel = 0; SiCount++; } } SortArmys(); }
private void LoadScenarioLua(){ System.Text.Encoding encodeType = System.Text.Encoding.ASCII; string MapPath = PlayerPrefs.GetString("MapsPath", "maps/"); string loadedFile = ""; Debug.Log("Load file:" + MapPath + FolderName + "/" + ScenarioFileName + ".lua"); string loc = MapPath + FolderName + "/" + ScenarioFileName + ".lua"; loadedFile = System.IO.File.ReadAllText(loc, encodeType); string loadedFileFunctions = ""; loadedFileFunctions = System.IO.File.ReadAllText(StructurePath + "lua_variable_functions.lua", encodeType); env = new Lua(); env.LoadCLRPackage(); try { env.DoString(loadedFileFunctions + loadedFile); } catch(NLua.Exceptions.LuaException e) { Debug.LogError(FormatException(e), gameObject); HelperGui.MapLoaded = false; return; } // Load Map Prop ScenarioData.MapName = env.GetTable("ScenarioInfo").RawGet("name").ToString(); ScenarioData.MapDesc = env.GetTable("ScenarioInfo").RawGet("description").ToString(); ScenarioData.Type = env.GetTable("ScenarioInfo").RawGet("type").ToString(); if(env.GetTable("ScenarioInfo").RawGet("map_version") != null && env.GetTable("ScenarioInfo").RawGet("map_version").ToString() != "null"){ ScenarioData.Version = float.Parse(env.GetTable("ScenarioInfo").RawGet("map_version").ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); } else{ ScenarioData.Version = 1; } if(env.GetTable("ScenarioInfo").RawGet("preview") != null && env.GetTable("ScenarioInfo").RawGet("preview").ToString() != "null"){ ScenarioData.Preview = env.GetTable("ScenarioInfo").RawGet("preview").ToString(); } else{ ScenarioData.Preview = ""; } ScenarioData.SaveLua = env.GetTable("ScenarioInfo").RawGet("save").ToString(); ScenarioData.Scmap = env.GetTable("ScenarioInfo").RawGet("map").ToString(); ScenarioData.ScriptLua = env.GetTable("ScenarioInfo").RawGet("script").ToString(); // Load Map Size var width = env.GetTable("ScenarioInfo.size")[1].ToString(); var height = env.GetTable("ScenarioInfo.size")[2].ToString(); ScenarioData.Size.x = float.Parse(width.ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.Size.y = float.Parse(height.ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.MaxHeight = 128; CamControll.MapSize = Mathf.Max(ScenarioData.Size.x, ScenarioData.Size.y); // Load Players LuaTable TeamsTab = env.GetTable("ScenarioInfo.Configurations.standard.teams")[1] as LuaTable; LuaTable ArmyTab = TeamsTab.RawGet("armies") as LuaTable; ScenarioData.Players = ArmyTab.Values.Count; ScenarioData.NoRushRadius = float.Parse(env.GetTable("ScenarioInfo").RawGet("norushradius").ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); ScenarioData.NoRushARMY = new Vector2[ScenarioData.Players]; for(int id = 0; id < ScenarioData.Players; id++) { ScenarioData.NoRushARMY[id] = Vector2.zero; if(env.GetTable("ScenarioInfo").RawGet("norushoffsetX_ARMY_" + (id + 1)) != null) ScenarioData.NoRushARMY[id].x = float.Parse(env.GetTable("ScenarioInfo").RawGet("norushoffsetX_ARMY_" + (id + 1)).ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); if(env.GetTable("ScenarioInfo").RawGet("norushoffsetY_ARMY_" + (id + 1)) != null) ScenarioData.NoRushARMY[id].y = float.Parse(env.GetTable("ScenarioInfo").RawGet("norushoffsetY_ARMY_" + (id + 1)).ToString(), System.Globalization.CultureInfo.InvariantCulture.NumberFormat); } }
private static Lua CreateLuaContext(IList <Mod> modList) { var lua = new Lua(); lua.State.Encoding = Encoding.UTF8; lua.DoString(File.ReadAllText("pprint.lua"), "<ppriunt>"); lua.DoString(File.ReadAllText("serpent.lua"), "<serpent>"); lua.DoString(@" defines = {} defines.difficulty_settings = {} defines.difficulty_settings.recipe_difficulty = { normal = 'normal', } defines.difficulty_settings.technology_difficulty = { normal = 'normal', } defines.direction = { north = 'north', east = 'east', south = 'south', west = 'west', } defines.entity_status = {} defines.entity_status.working = nil defines.entity_status.no_power = nil defines.entity_status.no_fuel = nil defines.entity_status.no_recipe = nil defines.entity_status.no_input_fluid = nil defines.entity_status.no_research_in_progress = nil defines.entity_status.no_minable_resources = nil defines.entity_status.low_input_fluid = nil defines.entity_status.low_power = nil defines.entity_status.disabled_by_control_behavior = nil defines.entity_status.disabled_by_script = nil defines.entity_status.fluid_ingredient_shortage = nil defines.entity_status.fluid_production_overload = nil defines.entity_status.item_ingredient_shortage = nil defines.entity_status.item_production_overload = nil defines.entity_status.marked_for_deconstruction = nil defines.entity_status.missing_required_fluid = nil defines.entity_status.missing_science_packs = nil defines.entity_status.waiting_for_source_items = nil defines.entity_status.waiting_for_space_in_destination = nil defines.entity_status.waiting_to_launch_rocket = nil ", "<defines>"); lua.DoString(@" data = {} data.raw = {} function merge(t1, t2) if t1 == nil then return t2 end for k, v in pairs(t2) do if (type(v) == 'table') and (type(t1[k] or false) == 'table') then merge(t1[k], t2[k]) else t1[k] = v end end return t1 end -- LINE 15 function data:extend(t) -- print('############') -- pprint(t) for k, v in pairs(t) do -- print('-----------------') -- pprint(k) -- pprint(v) if type(v) == 'table' and v.type ~= nil then if self.raw[v.type] == nil then self.raw[v.type] = {} end self.raw[v.type][v.name] = merge(self.raw[v.type][v.name], v) end end end function table_size(t) local count = 0 for k, v in pairs(t) do count = count + 1 end return count end ", "<startup>"); lua.NewTable("mods"); var modTable = lua.GetTable("mods"); foreach (var mod in modList) { modTable[mod.InternalName] = mod.Version.ToString(3); } string TranslateName(string name) { var path = (string)lua.DoString(@"function script_path() local str = debug.getinfo(3, 'S') return str.source end return script_path()")[0]; if (path.EndsWith(".lua")) { var lastIndex = path.LastIndexOfAny(new[] { '/', '\\' }); path = path.Remove(lastIndex); } else { path = null; } name = name.Replace('.', '/'); if (!name.EndsWith(".lua")) { name += ".lua"; } if (currentMod.FileExists(name)) { return("__" + currentMod.InternalName + "__/" + name); } var modName = name.Split('/')[0]; if (Regex.IsMatch(modName, "^__.+__$")) { modName = modName[2..^ 2]; var mod = modList.FirstOrDefault(mod => mod.InternalName == modName); if (mod != null) { return(name); } }
public LuaTable NewTable(string fullPath) { _lua.NewTable(fullPath); return(_lua.GetTable(fullPath)); }