private void LoadFile(string path, List <string> pathArgs = null) { var projectReader = new ProjectXmlReader(); project = projectReader.Load(path); BasePath = project.BaseDir; PixelsDown = project.ScreenHeight; PixelsAcross = project.ScreenWidth; if (ScreenSizeChanged != null) { ScreenSizeChangedEventArgs args = new ScreenSizeChangedEventArgs(PixelsAcross, PixelsDown); ScreenSizeChanged(this, args); } if (project.MusicNSF != null) { Engine.Instance.SoundSystem.LoadMusicNSF(project.MusicNSF.Absolute); } if (project.EffectsNSF != null) { Engine.Instance.SoundSystem.LoadSfxNSF(project.EffectsNSF.Absolute); } foreach (var stageInfo in project.Stages) { stageFactory.Load(stageInfo); } foreach (var includePath in project.Includes) { string includefile = includePath.Absolute; IncludeXmlFile(includefile); } Engine.Instance.SoundSystem.LoadEffectsFromInfo(project.Sounds); Scene.LoadScenes(project.Scenes); Menu.LoadMenus(project.Menus); FontSystem.Load(project.Fonts); PaletteSystem.LoadPalettes(project.Palettes); currentPath = path; if (pathArgs != null && pathArgs.Any()) { ProcessCommandLineArgs(pathArgs); } else if (project.StartHandler != null) { _stateMachine.ProcessHandler(project.StartHandler); } else { throw new GameRunException("The game file loaded correctly, but it failed to specify a starting point!"); } Player = new Player(); }
public void ChangePalette(int index) { var paletteName = _sprites.Values.First().PaletteName; var palette = PaletteSystem.Get(paletteName); if (palette != null) { palette.CurrentIndex = index; } }
public static Effect ParseEffect(XElement node) { Effect action = entity => { }; foreach (XElement prop in node.Elements()) { switch (prop.Name.LocalName) { case "Name": string spritename = prop.Value; action += entity => { SpriteComponent spritecomp = entity.GetComponent <SpriteComponent>(); spritecomp.ChangeSprite(spritename); }; break; case "Playing": bool play = prop.GetValue <bool>(); action += entity => { SpriteComponent spritecomp = entity.GetComponent <SpriteComponent>(); spritecomp.Playing = play; }; break; case "Visible": bool vis = prop.GetValue <bool>(); action += entity => { SpriteComponent spritecomp = entity.GetComponent <SpriteComponent>(); spritecomp.Visible = vis; }; break; case "Palette": string pal = prop.RequireAttribute("name").Value; int index = prop.GetAttribute <int>("index"); action += entity => { var palette = PaletteSystem.Get(pal); if (palette != null) { palette.CurrentIndex = index; } }; break; } } return(action); }
public void Unload() { Engine.Instance.Stop(); _stateMachine.StopAllHandlers(); _entitySource.Unload(); Engine.Instance.UnloadAudio(); FontSystem.Unload(); HealthMeter.Unload(); Scene.Unload(); Menu.Unload(); PaletteSystem.Unload(); EffectParser.Unload(); CurrentGame = null; }
public static Effect LoadEffectAction(XElement node) { Effect effect = e => { }; switch (node.Name.LocalName) { case "Call": effect = GetLateBoundEffect(node.Value); break; case "Spawn": effect = LoadSpawnEffect(node); break; case "Remove": effect = entity => { entity.Remove(); }; break; case "Die": effect = entity => { entity.Die(); }; break; case "AddInventory": string itemName = node.RequireAttribute("item").Value; int quantity = node.TryAttribute <int>("quantity", 1); effect = entity => { Game.CurrentGame.Player.CollectItem(itemName, quantity); }; break; case "RemoveInventory": string itemNameUse = node.RequireAttribute("item").Value; int quantityUse = node.TryAttribute <int>("quantity", 1); effect = entity => { Game.CurrentGame.Player.UseItem(itemNameUse, quantityUse); }; break; case "UnlockWeapon": string weaponName = node.RequireAttribute("name").Value; effect = entity => { Game.CurrentGame.Player.UnlockWeapon(weaponName); }; break; case "DefeatBoss": string name = node.RequireAttribute("name").Value; effect = entity => { Game.CurrentGame.Player.DefeatBoss(name); }; break; case "Lives": int add = int.Parse(node.RequireAttribute("add").Value); effect = entity => { Game.CurrentGame.Player.Lives += add; }; break; case "GravityFlip": bool flip = node.GetValue <bool>(); effect = entity => { entity.Container.IsGravityFlipped = flip; }; break; case "Func": effect = entity => { }; string[] statements = node.Value.Split(';'); foreach (string st in statements.Where(st => !string.IsNullOrEmpty(st.Trim()))) { LambdaExpression lambda = System.Linq.Dynamic.DynamicExpression.ParseLambda( new[] { posParam, moveParam, sprParam, inputParam, collParam, ladderParam, timerParam, healthParam, stateParam, weaponParam, playerParam }, typeof(SplitEffect), null, st, dirDict); effect += CloseEffect((SplitEffect)lambda.Compile()); } break; case "Trigger": string conditionString; if (node.Attribute("condition") != null) { conditionString = node.RequireAttribute("condition").Value; } else { conditionString = node.Element("Condition").Value; } Condition condition = ParseCondition(conditionString); Effect triggerEffect = LoadTriggerEffect(node.Element("Effect")); effect += (e) => { if (condition(e)) { triggerEffect(e); } }; break; case "Pause": effect = entity => { entity.Paused = true; }; break; case "Unpause": effect = entity => { entity.Paused = false; }; break; case "Next": var transfer = GameXmlReader.LoadHandlerTransfer(node); effect = e => { Game.CurrentGame.ProcessHandler(transfer); }; break; case "Palette": var paletteName = node.RequireAttribute("name").Value; var paletteIndex = node.GetAttribute <int>("index"); effect = e => { var palette = PaletteSystem.Get(paletteName); if (palette != null) { palette.CurrentIndex = paletteIndex; } }; break; case "Delay": var delayFrames = node.GetAttribute <int>("frames"); var delayEffect = LoadEffect(node); effect = e => { Engine.Instance.DelayedCall(() => delayEffect(e), null, delayFrames); }; break; case "SetVar": var varname = node.RequireAttribute("name").Value; var value = node.RequireAttribute("value").Value; effect = e => { Game.CurrentGame.Player.SetVar(varname, value); }; break; default: effect = GameEntity.ParseComponentEffect(node); break; } return(effect); }