/// <summary> /// Invokes map event. /// </summary> /// <param name="name">Identifier name</param> /// <param name="cell">Map cell</param> public static void CallMapEvent(string name, mapcell cell) { if (!string.IsNullOrEmpty(name)) { GetMapEvent(name)?.Invoke(cell); } }
public override void Init() { // register all map events progs.RegisterMapEvent("nextlevel", delegate(mapcell cell) { if (world.GetTextureAlias(cell.walltex) != "textures/exit") { return; } Quiver.game.game.LoadLevel("maps/" + level.next + ".lvl"); }); progs.RegisterMapEvent("prevlevel", delegate { Quiver.game.game.LoadLevel("maps/" + level.prev + ".lvl"); var c = level.data.CoordinatesOf(-2); world.Player.pos = new vector(c.Item1, c.Item2); }); progs.RegisterMapEvent("glassshot", delegate(mapcell cell) { audio.PlaySound3D("sound/glass/glass" + Quiver.engine.random.Next(1, 4), cell.pos, 70); }); progs.RegisterMapEvent("useconsole1", delegate { statemanager.SetState(new consoleGame()); }); progs.RegisterMapEvent("ws_use", delegate(mapcell cell) { mapcell door = world.FindTexturedCell("textures/exit_lock"); door.SetWalltex("textures/exit"); door.interactable = true; cell.SetWalltex("textures/brick1_sw1"); }); progs.RegisterMapEvent("escape", delegate(mapcell cell) { statemanager.SetState(new credits(), true); }); // register all entities progs.RegisterEnt(typeof(m_Eye)); progs.RegisterEnt(typeof(p_Guts)); progs.RegisterEnt(typeof(m_Robo)); progs.RegisterEnt(typeof(p_Lazer)); // register all weapons progs.RegisterWeapon(typeof(wRevolver)); _gmode = new gameMode(); }
public static void Generate(int[,] d) { data = d; world.mapsize = d.GetLength(0); world.map = new mapcell[world.mapsize, world.mapsize]; for (var x = 0; x < world.mapsize; x++) { for (var y = 0; y < world.mapsize; y++) { var cell = new mapcell(new vector(x, y), "textures/floor", "textures/floor", "textures/floor"); if (data[x, y] == -1) { playerSpawn = new vector(x + 0.5f, y + 0.5f); } lvl.GetCell(ref cell, data[x, y].ToString()); world.map[x, y] = cell; } } }
internal static void GetCell(ref mapcell cell, string id, bool dodefault = false) { if (string.IsNullOrEmpty(_dataset)) { log.WriteLine("no dataset defined for level file."); return; } using (var oReader = new StreamReader(filesystem.Open(_dataset), Encoding.GetEncoding("ISO-8859-1"))) { _datasetDoc = new XmlDocument(); _datasetDoc.Load(oReader); var e = _datasetDoc.SelectSingleNode("//dataset/cells/*[@id='" + id + "']"); if (e == null) { if (!dodefault) { GetCell(ref cell, "default", true); } else { log.WriteLine("failed to find cell of id=" + id, log.LogMessageType.Error); } return; } foreach (XmlNode n in e.ChildNodes) { try { if (n.Name == "wall") { cell.wall = n.InnerText == "true"; } if (n.Name == "solid") { cell.solid = n.InnerText == "true"; } if (n.Name == "interactable") { cell.interactable = n.InnerText == "true"; } if (n.Name == "shootex") { cell.shootex = n.InnerText; } if (n.Name == "walltex") { cell.SetWalltex(n.InnerText); } if (n.Name == "floortex") { cell.SetFloortex(n.InnerText); } if (n.Name == "ceiltex") { cell.SetCeiltex(n.InnerText); } if (n.Name == "emission") { byte r = 0; byte g = 0; byte b = 0; var s = n.InnerText.Split(' '); if (!(s.Length != 3 || !byte.TryParse(s[0], out r) || !byte.TryParse(s[1], out g) || !byte.TryParse(s[2], out b))) { cell.emission = Color.FromArgb(r, g, b); } } if (n.Name == "oninteract") { cell.onInteract = n.InnerText; } if (n.Name == "ontouch") { cell.onTouch = n.InnerText; } if (n.Name == "onwalk") { cell.onWalk = n.InnerText; } if (n.Name == "onshot") { cell.onShot = n.InnerText; } } catch (Exception ex) { log.WriteLine("parsing error: " + ex.Message); } } } }