Exemplo n.º 1
0
        public static LuaTable MakeLuaTable(NLua.Lua luaInterpreter, string tableName)
        {
            luaInterpreter.NewTable(tableName);
            LuaTable taskTable = luaInterpreter.GetTable(tableName);

            return(taskTable);
        }
Exemplo n.º 2
0
        protected LuaScript(Lua lua, TEntity entity, string tableName)
        {
            Lua    = lua;
            Entity = entity;

            _table = Lua.GetTable(tableName);
        }
Exemplo n.º 3
0
        private static void PushVisibilityTable(NLua.Lua luaInterpreter)
        {
            luaInterpreter.NewTable("visibility");
            LuaTable luaTable = luaInterpreter.GetTable("visibility");

            luaTable["private"] = WorkshopItemVisibility.Private;
            luaTable["public"]  = WorkshopItemVisibility.Public;
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 6
0
		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");
			}
		}
Exemplo n.º 7
0
		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);
			}
		}
Exemplo n.º 8
0
		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");
			}
		}
Exemplo n.º 9
0
		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);
			}
		}
Exemplo n.º 10
0
		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);
			}
		}
Exemplo n.º 11
0
	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
	}
Exemplo n.º 12
0
		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();
			}
		}
Exemplo n.º 13
0
		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);
				}
			}
		}
Exemplo n.º 14
0
		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;
        }
Exemplo n.º 16
0
	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();
	}
Exemplo n.º 17
0
	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);
		}
	}
Exemplo n.º 18
0
        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);
                    }
                }
Exemplo n.º 19
0
 public LuaTable NewTable(string fullPath)
 {
     _lua.NewTable(fullPath);
     return(_lua.GetTable(fullPath));
 }