public static void Talk(Entity obj) { tempData.Add("UpArrow", "true"); GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox("Ziggy", "I can't believe you figured it out!", obj.Position + new Vector2(0, -84)), new MessageBox("Ziggy", ".|.|. Well done!", obj.Position + new Vector2(0, -84)) }, true, () => { GameGlobal.PlayerController.MovementEnabled = false; Entity temp = Entity.Find("EarthRock"); CameraController.Instance.Shake(3); Global.AudioController.Play("SFX/EarthRockRumble"); StaticCoroutines.CoroutineHelper.RunOverX(3, 64, t => { temp.Position += new Vector2(0, 1f); }, () => { obj.Destroy(); GameData.Set("EarthRock/First", "2"); temp.Destroy(); GameGlobal.PlayerController.MovementEnabled = true; }); } ); }
public static void First(Entity obj) { if (GameData.Get("EarthRock/First") != null) { obj.Destroy(); return; } GameData.Set("EarthRock/First", "1"); GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox("", "!", obj.Position + new Vector2(0, -64)), new MessageBox("Ziggy", "Hi.|.|.", obj.Position + new Vector2(0, -64)), new MessageBox("Ziggy", "I didn't think you'd survived.|.|.\nYou fell into that tree almost 3 days ago...", obj.Position + new Vector2(0, -64)), new MessageBox("Ziggy", "I'm not sure what this means but I feel implelled\nto tell you that if you want to interact with\nsomething you can press UP!", obj.Position + new Vector2(0, -64)), new MessageBox("Ziggy", "Why don't you try it on me!", obj.Position + new Vector2(16, -32)) }, true, () => { // Input icons if (GameData.Get("Tips/UpToInteract") == null) { GameData.Set("Tips/UpToInteract", "1"); Texture2D texture2D = GameMethods.GetInputIcon(InputManager.Input.Up, Global.InputManager.CurrentInputType); GameMethods.DisplayInputIcon(texture2D, new Vector2(119 * 16 + 8, 57 * 16 + 2), () => { return(false); }); GameMethods.DisplayInputIcon(texture2D, Entity.Find("EarthRock").Position + new Vector2(-8, 32 + 2), () => { return(tempData.ContainsKey("UpArrow")); }); } } ); }
public static void ID_first(Entity obj) { if (GameData.Get("NPCChest/" + obj.Data["id"] + "/" + "script") == null) { Global.AudioController.Play("SFX/OpenChest"); obj.GetComponent <Sprite>().RunAnimation("Opening", false); GameData.Set("NPCChest/" + obj.Data["id"] + "/" + "open", "true"); GameGlobal.PlayerController.MovementMode = PlayerController.MovementModes.None; StaticCoroutines.CoroutineHelper.WaitRun(1, () => { GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox(null, "There's nothing inside.|.|.", new Vector2(obj.Position.X, obj.Position.Y - 30)) }, null, () => { StaticCoroutines.CoroutineHelper.WaitRun(2, () => { GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox("Majestic Chest", "Hi!|| Did you want something?", new Vector2(obj.Position.X, obj.Position.Y - 30)), new MessageBox("Pause", "|.|.|.| I wasn't expecting that.", new Vector2(GameGlobal.Player.Position.X, GameGlobal.Player.Position.Y - 20)) }, null, () => { StaticCoroutines.CoroutineHelper.WaitRun(1, () => { GameGlobal.PlayerController.MovementMode = PlayerController.MovementModes.Normal; GameData.Set("NPCChest/" + obj.Data["id"] + "/" + "open", "false"); GameData.Set("NPCChest/" + obj.Data["id"] + "/" + "script", "2"); obj.GetComponent <Sprite>().RunAnimation("Closing", false); Global.AudioController.Play("SFX/OpenChest"); }); }); }); }); }); } else if (GameData.Get("NPCChest/" + obj.Data["id"] + "/" + "script") == "2") { GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox(null, ".|.|. nothing.", new Vector2(obj.Position.X, obj.Position.Y - 30)) }, true, () => { }); } }
public static void End(Entity obj) { GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox("", "Oh, this is as far as you go...|", obj.Position + new Vector2(0, -32)), new MessageBox("", "An adventure awaits you on the\nother side of this cave!|", obj.Position + new Vector2(0, -32)) }, true, () => { GameGlobal.Player.GetComponent <PlayerController>().MovementEnabled = false; StaticCoroutines.CoroutineHelper.RunUntil(() => { return(Global.AudioController.MasterVolume <= 0); }, () => { Global.AudioController.MasterVolume -= 0.15f * Global.DeltaTime; }, () => { MonoXEngineGame.Instance.Exit(); }); GameGlobal.Fader.Data["Time"] = "4"; GameGlobal.Fader.RunFunction("FadeOut", entity => { entity.RunFunction("SetDefault"); }); } ); }
public void Save(Vector2 pos) { Saving = true; GameGlobal.PlayerController.MovementEnabled = false; if (GameData.Get("SavePoint/First") == null) { GameData.Set("SavePoint/First", "1"); GameMethods.ShowMessages(new List <MessageBox> { new MessageBox("", "Something is written here.|.|.", pos), new MessageBox("It say's", "'If you touch this grave stone your entire life up to\nthis point will be recorded.\n\nThe Holy Gravestone'|", pos), new MessageBox("Holy Gravestone", "Why don't they just call it a save point?", pos) }, null, () => { Save(pos); }); } else { MessageBox messageBox = new MessageBox(null, "Would you like to save?", pos); messageBox.Build(null, () => { GameMethods.ShowOptionSelector(pos + new Vector2(-16, 16), new List <Option>() { new Option("yes", "Yes", new Vector2(0, 0)), new Option("no", "No", new Vector2(0, 16)) }, option => { if (option == "yes") { Global.AudioController.Play("SFX/Save"); GameData.Save(); } messageBox.Destroy(); GameGlobal.PlayerController.MovementEnabled = true; Saving = false; }); }); } }
public void MysticCave() { // Input icons Entity pushableBox = Global.Entities.Find(p => p.Name == "MovableObject"); StaticCoroutines.CoroutineHelper.RunWhen(() => { return(GameGlobal.Player.Position.GetDistance(pushableBox.Position) < Global.Resolution.X / 2); }, () => { if (GameData.Get("Tips/Action2ToPush") == null) { // Action 2 Texture2D texture2D = GameMethods.GetInputIcon(InputManager.Input.Action2, Global.InputManager.CurrentInputType); GameMethods.DisplayInputIcon(texture2D, pushableBox.Position + new Vector2(0, -18), () => { return(GameGlobal.PlayerController.Pushing != 0); }, () => { GameData.Set("Tips/Action2ToPush", "1"); }); // Right texture2D = GameMethods.GetInputIcon(InputManager.Input.Right, Global.InputManager.CurrentInputType); GameMethods.DisplayInputIcon(texture2D, pushableBox.Position + new Vector2(-18, 0), () => { return(GameGlobal.PlayerController.Pushing != 0); }); // Left texture2D = GameMethods.GetInputIcon(InputManager.Input.Left, Global.InputManager.CurrentInputType); GameMethods.DisplayInputIcon(texture2D, pushableBox.Position + new Vector2(18, 0), () => { return(GameGlobal.PlayerController.Pushing != 0); }); } }); }
public void TheTree() { SoundEffectInstance forestAmbienceSFX = Global.AudioController.Play("SFX/Forest_Ambience"); forestAmbienceSFX.Volume = 0.3f; CoroutineHelper.Always(() => { if (forestAmbienceSFX.State == SoundState.Stopped) { forestAmbienceSFX = Global.AudioController.Play("SFX/Forest_Ambience"); forestAmbienceSFX.Volume = 0.3f; } }); Global.SceneManager.CurrentScene.OnExit += () => { Global.AudioController.Stop("SFX/Forest_Ambience"); }; if (GameData.Get("Levels/TheTree/Intro") == "True") { // Music Global.AudioController.PlayMusic("Overworld Happy"); return; } MyGame.Scenes.Level.CameraController.Offset = new Vector2(16, 0); // Initial fade GameGlobal.Fader.RunFunction("BlackOut"); GameGlobal.Fader.RunFunction("Cancel"); GameGlobal.Fader.Data["Time"] = "5"; CoroutineHelper.WaitRun(2, () => { GameGlobal.Fader.RunFunction("Resume"); GameGlobal.Fader.RunFunction("FadeIn"); }); GameGlobal.PlayerController.MovementEnabled = false; GameGlobal.PlayerController.Kinetic = true; GameGlobal.PlayerGraphic.Visible = false; GameGlobal.PlayerController.MovementMode = PlayerController.MovementModes.None; // Camera pan down Entity camePos = new Entity(e => { e.Position = GameGlobal.Player.Position + new Vector2(0, -800); }); CameraController.Instance.Easing = 0.03f; CameraController.Instance.MaxStep = 1f; CameraController.Instance.Target = camePos; CameraController.Instance.SnapOnce(); // Seagulls CoroutineHelper.WaitRun(11, () => { CoroutineHelper.WaitRun(1, () => { Global.AudioController.Play("SFX/BushRustle"); }); new Entity(entity => { entity.LayerName = "Main"; entity.SortingLayer = 8; entity.AddComponent(new Sprite() { Texture2D = Global.Content.Load <Texture2D>("Entities/Seagull") }).Run <Sprite>(s => { s.AddAnimation(new Animation("Default", 0.1f, new Point(16, 16), new Point(0, 0), new Point(1, 0), new Point(2, 0), new Point(3, 0), new Point(3, 0), new Point(3, 0))); s.RunAnimation("Default"); }); entity.Position = GameGlobal.Player.Position + new Vector2(0, -100); entity.Scale = new Vector2(2.1f, 2.1f); CoroutineHelper.RunUntil(() => { return(entity.Position.Y < -500); }, () => { entity.Position += new Vector2(0.3f, -0.2f * entity.Scale.Y); entity.Scale += new Vector2(-0.003f, -0.003f); if (entity.Scale.X < 0.5f) { entity.Scale = new Vector2(0.5f, 0.5f); } }); }); new Entity(entity => { entity.LayerName = "Main"; entity.SortingLayer = 8; entity.AddComponent(new Sprite() { Texture2D = Global.Content.Load <Texture2D>("Entities/Seagull") }).Run <Sprite>(s => { s.AddAnimation(new Animation("Default", 0.1f, new Point(16, 16), new Point(0, 0), new Point(1, 0), new Point(2, 0), new Point(3, 0), new Point(3, 0), new Point(3, 0))); s.RunAnimation("Default"); }); entity.Position = GameGlobal.Player.Position + new Vector2(-40, -100); entity.Scale = new Vector2(2, 2); CoroutineHelper.RunUntil(() => { return(entity.Position.Y < -500); }, () => { entity.Position += new Vector2(0.3f, -0.2f * entity.Scale.Y); entity.Scale += new Vector2(-0.003f, -0.003f); if (entity.Scale.X < 0.5f) { entity.Scale = new Vector2(0.5f, 0.5f); } }); }); }); CoroutineHelper.WaitRun(7, () => { camePos.Position = GameGlobal.Player.Position + new Vector2(0, -40); CoroutineHelper.WaitRun(12, () => { GameGlobal.Player.Position = camePos.Position + new Vector2(0, -20); GameGlobal.PlayerGraphic.RunAnimation("Jump"); GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox("Pause", ".|.|.|| !", camePos.Position), new MessageBox("Pause", "Huh|.|.|.||| I don't remember\nsleeping there!?", camePos.Position) }, null, () => { CoroutineHelper.WaitRun(3, () => { GameGlobal.PlayerGraphic.Visible = true; MessageBox WoahMSG = new MessageBox("Pause", "Woah!", camePos.Position, MessageBox.Type.ManualDestroy); WoahMSG.Build(); float temp = GameGlobal.Player.Position.Y; CoroutineHelper.RunFor(0.7f, p => { if (GameGlobal.Player.Position.Y < camePos.Position.Y + 45) { GameGlobal.Player.Position.Y += 1f * (p * 4.15f); } if (GameGlobal.Player.Position.Y > WoahMSG.Position.Y + 32) { WoahMSG.Position = GameGlobal.Player.Position + new Vector2(-WoahMSG.Container.Size.X / 2, -32); } }, () => { GameGlobal.Player.Position.Y = camePos.Position.Y + 45; GameGlobal.PlayerGraphic.RunAnimation("Lay"); Global.AudioController.Play("SFX/Thump"); WoahMSG.Destroy(); GameMethods.SmokePuffs(8, GameGlobal.PlayerGraphicEntity.Position, new Point(8, 8)); CameraController.Instance.Shake(0.7f); CoroutineHelper.WaitRun(2, () => { // Music Global.AudioController.PlayMusic("Overworld Happy", 1); GameMethods.ShowMessages(new List <MessageBox>() { new MessageBox("Pause", "OUCH!", GameGlobal.Player.Position + new Vector2(0, -32)), }, null, () => { GameGlobal.PlayerController.MovementEnabled = true; GameGlobal.PlayerController.MovementMode = PlayerController.MovementModes.Normal; GameGlobal.PlayerController.Kinetic = false; CameraController.Instance.Easing = 0.1f; CameraController.Instance.MaxStep = 1000; CameraController.Instance.Target = GameGlobal.Player; camePos.Destroy(); GameGlobal.PlayerGraphic.RunAnimation("Stand"); GameGlobal.PlayerController.Direction = 1; GameGlobal.PlayerController.IsGrounded = true; GameData.Set("Levels/TheTree/Intro", "True"); GameGlobal.Fader.RunFunction("SetDefault"); }); }); }); }); }); }); }); }
public void Build(Action action = null, Action finishedWriting = null) { FinishedWriting = finishedWriting; if (Speaker != null && Speaker != "") { PassedText = Speaker + "\n" + PassedText; } // Build and position text TextObject = new Entity(entity => { entity.LayerName = DefaultLayerName; entity.SortingLayer = DefaultSortingLayer + 1; entity.Position = PassedPosition; entity.AddComponent(new Text()).Run <Text>(component => { component.String = PassedText.Replace("|", ""); TextString = component; // Final positioning entity.Position = entity.BoundingBox.Location.ToVector2(); }); }); // Build container based on text Container = new Entity(entity => { entity.LayerName = DefaultLayerName; entity.SortingLayer = DefaultSortingLayer; entity.Origin = Vector2.Zero; entity.Position = new Vector2(TextObject.Position.X - Padding.X, (TextObject.Position.Y - Padding.Y) + 1); entity.AddComponent(new Drawable() { Texture2D = GameMethods.RoundedRect(Global.Content.Load <Texture2D>("Defaults/9Patch_8"), new Point(TextObject.BoundingBox.Width + (Padding.X * 2) + ((ThisType == Type.PressToProgress) ? 8 : 0), TextObject.BoundingBox.Height + Padding.Y * 2)) }); }); // Build arrow flasher if (ThisType == Type.PressToProgress) { ArrowFlash = new Entity(entity => { entity.LayerName = DefaultLayerName; entity.SortingLayer = DefaultSortingLayer + 1; entity.Position = new Vector2(TextObject.Position.X + TextObject.BoundingBox.Width + 6, TextObject.BoundingBox.Bottom + 2); entity.AddComponent(new Sprite() { Texture2D = Global.Content.Load <Texture2D>("Defaults/ArrowFlash") }).Run <Sprite>(sprite => { sprite.AddAnimation(new Animation("Flashing", 0.5f, new Point(8, 8), new Point(0, 0), new Point(1, 0))); sprite.RunAnimation("Flashing"); sprite.Visible = false; }); }); } if (Speaker != null && Speaker != "") { TextString.String = Speaker + "\n"; TestString = Speaker + "\n"; } else { TextString.String = ""; TestString = ""; } ProgressText(action); }
public void Build(Vector2 position, List <Option> optionList, Action <string> action = null, bool closeAfter = true, string texture9Patch = "Defaults/9Patch_8") { Selecting = true; CloseAfter = closeAfter; CurrentOptions = optionList; Selector = new Entity(entity => { entity.LayerName = DefaultLayerName; entity.SortingLayer = DefaultSortingLayer + 1; entity.AddComponent(new Sprite() { Texture2D = Global.Content.Load <Texture2D>("Defaults/OptionSelector") }); }); Container = new Entity(entity => { entity.Position = position; entity.LayerName = DefaultLayerName; entity.SortingLayer = DefaultSortingLayer; entity.Origin = Vector2.Zero; float w = 0, h = 0; foreach (var option in optionList) { float optionBoundsX = option.Position.X + option.Size.X; if (optionBoundsX > w) { w = optionBoundsX; } float optionBoundsY = option.Position.Y + option.Size.Y; if (optionBoundsY > h) { h = optionBoundsY; } option.Position = (entity.Position + option.Position + (Padding.ToVector2() / 2) + new Vector2(SelectorSize.X, 0)); } if (texture9Patch != null) { entity.AddComponent(new Drawable() { Texture2D = GameMethods.RoundedRect(Global.Content.Load <Texture2D>(texture9Patch), new Point((int)w + (int)(Padding.X * 1.5f) + (int)SelectorSize.X, (int)h + Padding.Y)) }); } SelectedOption = optionList.First <Option>(); StaticCoroutines.CoroutineHelper.RunUntil(() => { return(!Selecting); }, () => { if (Global.InputManager.Pressed(InputManager.Input.Up)) { FindOption(optionList, "Up"); } else if (Global.InputManager.Pressed(InputManager.Input.Down)) { FindOption(optionList, "Down"); } else if (Global.InputManager.Pressed(InputManager.Input.Left)) { FindOption(optionList, "Left"); } else if (Global.InputManager.Pressed(InputManager.Input.Right)) { FindOption(optionList, "Right"); } else if (Global.InputManager.Pressed(InputManager.Input.Action1)) { Finished(optionList, action); } }); }); }
public void Interpret(EntityInfo entityInfo) { if (entityInfo.Name == "StartPosition" && GameData.Get("Player/Position") == null) { GameGlobal.Player.Position = new Vector2(entityInfo.Position.X * 16, entityInfo.Position.Y * 16); } else if (entityInfo.Name == "Switch") { new Entity(entity => { entity.AddComponent(new Switch(entityInfo)); }); } else if (entityInfo.Name == "MovableObject") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.LayerName = "Main"; entity.SortingLayer = GameGlobal.PlayerGraphicEntity.SortingLayer - 1; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.AddComponent(new Sprite()).Run <Sprite>(sprite => { sprite.LoadTexture("Graphics/WoodenBox"); }); entity.AddComponent(new MoveableObject()); if (data.GetString("id") != null) { entity.Data.Add("PO_ID", data.GetString("id")); string poidposstr = GameData.Get("PO_ID:" + entity.Data["PO_ID"] + "/Position"); if (poidposstr != null) { string[] poidpos = poidposstr.Split(','); entity.Position = new Vector2((float)Convert.ToDouble(poidpos[0]), (int)Convert.ToDouble(poidpos[1])); } } }); } else if (entityInfo.Name == "MovablePlatform") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.LayerName = "Main"; entity.SortingLayer = 10; entity.Position = entityInfo.Position * 16; entity.AddComponent(new Sprite()).Run <Sprite>(sprite => { sprite.BuildRectangle(new Point(32, 16), Color.White); }); entity.AddComponent(new MovablePlatform(entity.Position)).Run <MovablePlatform>(mp => { mp.Speed = (data.HasKey("speed")) ? data.GetFloat("speed") : 1; mp.XDistance = (data.HasKey("xdistance")) ? data.GetFloat("xdistance") : 0; mp.YDistance = (data.HasKey("ydistance")) ? data.GetFloat("ydistance") : 0; }); }); } else if (entityInfo.Name == "LightSource") { ZInterpreter data = new ZInterpreter(entityInfo.Data); // Pre set light sources if (data.HasKey("type")) { if (data.GetString("type") == "OrangeTorch") { Level.RenderBlender.DrawableTextures.Add(new RenderBlender.DrawableTexture("alphamask2") { Position = (entityInfo.Position * 16), Blend = RenderBlender.Subtract, Update = item => { item.Scale = 1.6f; } }); Level.RenderBlender.DrawableTextures.Add(new RenderBlender.DrawableTexture("alphamask2") { Position = (entityInfo.Position * 16), Color = Color.Orange * 0.1f, Update = item => { item.Scale = 0.6f + 0.04f * (float)Math.Sin(GameGlobal.TimeLoop * 50); } }); } else if (data.GetString("type") == "BlueMushroom") { Level.RenderBlender.DrawableTextures.Add(new RenderBlender.DrawableTexture("alphamask2") { Position = (entityInfo.Position * 16), Blend = RenderBlender.Subtract, Color = Color.White * 0.8f, Update = item => { item.Scale = 1.3f; } }); Level.RenderBlender.DrawableTextures.Add(new RenderBlender.DrawableTexture("alphamask") { Position = (entityInfo.Position * 16), Color = Color.DeepSkyBlue * 0.2f, Update = item => { item.Scale = 0.6f + 0.03f * (float)Math.Sin(GameGlobal.TimeLoop * 3); } }); } } // Custom light sources else { Level.RenderBlender.DrawableTextures.Add(new RenderBlender.DrawableTexture(data.GetString("texture") != "" ? data.GetString("texture"): "White") { Position = (entityInfo.Position * 16) + data.GetPointArr("offset")[0].ToVector2(), Blend = (data.GetString("blendstate") == "Subtract") ? RenderBlender.Subtract : RenderBlender.Lighting, Color = GameMethods.GetProperty <Color>(data.GetString("color")), Scale = data.GetFloat("scale"), Layer = data.GetInt("layer") }); } } else if (entityInfo.Name == "Lighting") { ZInterpreter data = new ZInterpreter(entityInfo.Data); Level.RenderBlender.ClearColor = Color.Black * data.GetFloat("darkness"); } else if (entityInfo.Name == "SavePoint") { new SavePoint(entityInfo); } else if (entityInfo.Name == "Enemy") { ZInterpreter data = new ZInterpreter(entityInfo.Data); Type type = Type.GetType("MyGame.Enemies." + data.GetString("type")); Activator.CreateInstance(type, new object[] { entityInfo }); } else if (entityInfo.Name == "Audio2D") { ZInterpreter data = new ZInterpreter(entityInfo.Data); Vector2 position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; float distance = ((data.HasKey("distance")) ? data.GetFloat("distance") : 5) * 16; float minvolume = ((data.HasKey("minvolume")) ? data.GetFloat("minvolume") : 0); float maxvolume = ((data.HasKey("maxvolume")) ? data.GetFloat("maxvolume") : 1); SoundEffectInstance sfi = Global.AudioController.Play("SFX/" + data.GetString("file")); sfi.Volume = 0; CoroutineHelper.Always(() => { if (Global.RunWhenEventLoops("ReplaySFX_" + data.GetString("file"), sfi == null || sfi.State != SoundState.Playing)) { sfi = Global.AudioController.Play("SFX/" + data.GetString("file")); } float difference = GameGlobal.Player.Position.GetDistance(position); float percent = (((difference - distance) * 100) / ((maxvolume) - distance)).Between(minvolume, maxvolume); sfi.Volume = (percent / 100); }); Global.SceneManager.CurrentScene.OnExit += () => { Global.AudioController.Stop("SFX/" + data.GetString("file")); }; } else if (entityInfo.Name == "InteractScript") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.Name = "InteractScript"; entity.LayerName = "Main"; entity.Data.Add("Script", data.GetString("script")); entity.SortingLayer = GameGlobal.Player.SortingLayer; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.AddComponent(new Drawable()).Run <Drawable>(d => { d.BuildRectangle(new Point(entityInfo.Size.X * 16, entityInfo.Size.Y * 16), Color.Blue); d.Visible = false; }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); if (data.HasKey("autoscript")) { CoroutineHelper.WaitRun(0.1f, () => { string[] script = data.GetString("autoscript").Split('.'); Type type = Type.GetType("MyGame." + script[0]); MethodInfo mi = type.GetMethod(script[1], BindingFlags.Static | BindingFlags.Public); mi.Invoke(null, new object[] { entity }); }); } }); } else if (entityInfo.Name == "TouchScript") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.Name = "TouchScript"; entity.LayerName = "Main"; entity.Data.Add("Script", data.GetString("script")); entity.SortingLayer = GameGlobal.Player.SortingLayer; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.AddComponent(new Drawable()).Run <Drawable>(d => { d.BuildRectangle(new Point(entityInfo.Size.X * 16, entityInfo.Size.Y * 16), Color.Blue); d.Visible = false; }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); }); } else if (entityInfo.Name == "Ambience") { ZInterpreter data = new ZInterpreter(entityInfo.Data); SoundEffectInstance sfi = Global.AudioController.Play("SFX/" + data.GetString("file")); sfi.Volume = (data.HasKey("volume")) ? data.GetFloat("volume") : 1; CoroutineHelper.Always(() => { if (sfi.State == SoundState.Stopped) { sfi = Global.AudioController.Play("SFX/" + data.GetString("file")); sfi.Volume = (data.HasKey("volume")) ? data.GetFloat("volume") : 1; } }); Global.SceneManager.CurrentScene.OnExit += () => { Global.AudioController.Stop("SFX/" + data.GetString("file")); }; } else if (entityInfo.Name == "Music") { ZInterpreter data = new ZInterpreter(entityInfo.Data); float fadeTo = (data.HasKey("fadeTo")) ? data.GetFloat("fadeTo") : 1; if (Global.AudioController.CurrentMusicFile == null || Global.AudioController.CurrentMusicFile == "") { Global.AudioController.PlayMusic(data.GetString("file")); Global.AudioController.CurrentMusicVolume = fadeTo; } else { Global.AudioController.PlayMusic(data.GetString("file"), fadeTo); } } else if (entityInfo.Name == "NPCChest") { ZInterpreter data = new ZInterpreter(entityInfo.Data); NPCChest.Create(entityInfo, data); } else if (entityInfo.Name == "Chest") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.Name = "Chest"; entity.LayerName = "Main"; entity.SortingLayer = GameGlobal.Player.SortingLayer - 1; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.AddComponent(new Sprite()).Run <Sprite>(d => { d.LoadTexture("Entities/Chest_" + data.GetString("type")); d.AddAnimation(new Animation("Closed", 0, new Point(32, 32), new Point(0, 0))); d.AddAnimation(new Animation("Opening", 0.1f, new Point(32, 32), new Point(1, 0), new Point(2, 0), new Point(3, 0), new Point(4, 0))); d.RunAnimation("Closed"); }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); }); } else if (entityInfo.Name == "NPC") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.Name = "NPC"; entity.LayerName = "Main"; entity.SortingLayer = GameGlobal.Player.SortingLayer; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.Origin = Vector2.Zero; entity.AddComponent(new Drawable()).Run <Drawable>(d => { d.BuildRectangle(new Point(entityInfo.Size.X * 16, entityInfo.Size.Y * 16), Color.CornflowerBlue); }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); }); } else if (entityInfo.Name == "Water") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.Name = "Water"; entity.LayerName = "Main"; entity.SortingLayer = 4; entity.Opacity = 1f; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.AddComponent(new Drawable()).Run <Drawable>(d => { Color waterColor = (data.HasKey("color")) ? GameMethods.GetProperty <Color>(data.GetString("color")) * 0.2f : new Color(0, 0, 0, 0.2f); d.BuildRectangle(new Point(entityInfo.Size.X * 16, entityInfo.Size.Y * 16), waterColor); /* Animate water */ int offset = 0; Color[] colors = new Color[6]; for (int i = 0; i < colors.Length; i++) { colors[i] = (i % 6 >= 3) ? Color.AliceBlue * 0.3f : Color.DarkSlateBlue * 0.1f; } colors[3] = Color.AliceBlue * 0.5f; int offsetPrev = 0; CoroutineHelper.Always(() => { offset = 6 + (int)(Math.Sin(Global.GameTime.TotalGameTime.TotalMilliseconds / 500) * 3); if (offset != offsetPrev) { offsetPrev = offset; d.Texture2D.ManipulateColorsRect1D(new Rectangle(0, 0, d.Texture2D.Width, 2), colors1D => { int width = d.Texture2D.Width; for (int x = 0; x < width; x++) { colors1D[0 * width + x] = colors[(x + offset).Wrap(0, colors.Length - 1)]; colors1D[1 * width + x] = colors[(2 - x + offset / 2).Wrap(0, colors.Length - 1)] * 0.5f; } return(colors1D); }); } }); /* /Animate water */ }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); }); } else if (entityInfo.Name == "Background") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.LayerName = "Background"; entity.Position = new Vector2(0, 0); if (data.HasKey("sortinglayer")) { entity.SortingLayer = data.GetInt("sortinglayer"); } if (data.HasKey("opacity")) { entity.Opacity = data.GetFloat("opacity"); } float[] coefficient = data.GetFloatArr("coefficient"); float[] offset = data.GetFloatArr("offset"); entity.AddComponent(new CameraOffsetTexture() { Texture2D = Global.Content.Load <Texture2D>("Backgrounds/" + data.GetString("image")), Coefficient = new Vector2(coefficient[0], coefficient[1]), Offset = new Vector2(offset[0], offset[1]) }); if (data.HasKey("animate")) { entity.GetComponent <CameraOffsetTexture>().Animate = true; entity.GetComponent <CameraOffsetTexture>().AnimStepTime = data.GetFloat("animate"); entity.GetComponent <CameraOffsetTexture>().Size = data.GetPointArr("crop")[0]; } }); } else if (entityInfo.Name == "Foreground") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.LayerName = "Foreground"; entity.Position = Vector2.Zero; entity.SortingLayer = 8; float[] coefficient = data.GetFloatArr("coefficient"); float[] offset = data.GetFloatArr("offset"); entity.AddComponent(new CameraOffsetTexture() { Texture2D = Global.Content.Load <Texture2D>("Foregrounds/" + data.GetString("image")), Coefficient = new Vector2(coefficient[0], coefficient[1]), Offset = new Vector2(offset[0], offset[1]) }); if (data.HasKey("animate")) { entity.GetComponent <CameraOffsetTexture>().Animate = true; entity.GetComponent <CameraOffsetTexture>().AnimStepTime = data.GetFloat("animate"); entity.GetComponent <CameraOffsetTexture>().Size = data.GetPointArr("crop")[0]; } }); } else if (entityInfo.Name == "AutoDoor") { new Entity(entity => { entity.Name = "AutoDoor"; entity.LayerName = "Main"; ZInterpreter data = new ZInterpreter(entityInfo.Data); entity.Data.Add("Level", data.GetString("level")); entity.Data.Add("Position", data.GetString("position")); entity.SortingLayer = GameGlobal.Player.SortingLayer + 5; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.AddComponent(new Drawable()).Run <Drawable>(d => { d.BuildRectangle(new Point(entityInfo.Size.X * 16, entityInfo.Size.Y * 16), Color.Blue); d.Visible = false; }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); }); } else if (entityInfo.Name == "Door") { new Entity(entity => { entity.Name = "Door"; entity.LayerName = "Main"; ZInterpreter data = new ZInterpreter(entityInfo.Data); entity.Data.Add("Level", data.GetString("level")); entity.Data.Add("Position", data.GetString("position")); entity.SortingLayer = GameGlobal.Player.SortingLayer; entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; entity.AddComponent(new Drawable()).Run <Drawable>(d => { d.BuildRectangle(new Point(entityInfo.Size.X * 16, entityInfo.Size.Y * 16), Color.Blue); d.Visible = false; }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); }); } else if (entityInfo.Name == "Graphic") { ZInterpreter data = new ZInterpreter(entityInfo.Data); new Entity(entity => { entity.Name = "Graphic"; entity.LayerName = "Main"; entity.SortingLayer = (data.HasKey("sortinglayer")) ? data.GetInt("sortinglayer") : 2; entity.Position = (entityInfo.Position * 16); if (data.HasKey("origin")) { var origin = data.GetFloatArr("origin"); entity.Origin = new Vector2(origin[0], origin[1]); if (entity.Origin.X == 1) { entity.Position.X += (16 * entity.Origin.X); } if (entity.Origin.Y == 1) { entity.Position.Y += (16 * entity.Origin.Y); } } if (data.HasKey("collider")) { entity.AddComponent(new Collider()); if (data.GetString("collider").ToLower() == "pixel") { entity.GetComponent <Collider>().ColliderType = Collider.ColliderTypes.Pixel; } else if (data.GetString("collider").ToLower() == "box") { if (data.HasKey("boxrect")) { int[] boxrect = data.GetIntArr("boxrect"); entity.GetComponent <Collider>().ColliderType = Collider.ColliderTypes.Box; entity.GetComponent <Collider>().Offset = new Offset(boxrect[0], boxrect[1], boxrect[2], boxrect[3]); } } } if (data.HasKey("offset")) { var offset = data.GetFloatArr("offset"); entity.Position += new Vector2(offset[0], offset[1]); } if (data.HasKey("id")) { entity.ID = data.GetString("id"); } entity.AddComponent(new Sprite()).Run <Sprite>(d => { d.LoadTexture("Graphics/" + data.GetString("image")); }); }); } else if (entityInfo.Name == "Animation") { new Entity(entity => { entity.Name = "Animation"; entity.LayerName = "Main"; entity.Origin = Vector2.Zero; entity.SortingLayer = 2; ZInterpreter data = new ZInterpreter(entityInfo.Data); entity.Opacity = (data.HasKey("opacity")) ? data.GetFloat("opacity") : 1; entity.AddComponent(new Sprite()).Run <Sprite>(d => { d.LoadTexture("Graphics/" + data.GetString("image")); d.AddAnimation(new Animation("Default", data.GetFloat("delay"), data.GetPointArr("size")[0], data.GetPointArr("frames"))); d.RunAnimation("Default"); entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; }); }); } else if (entityInfo.Name == "CameraLock") { new Entity(entity => { entity.Name = "CameraLock"; entity.LayerName = "Main"; entity.Data.Add("Type", entityInfo.Data); entity.SortingLayer = GameGlobal.Player.SortingLayer; entity.Opacity = 0; entity.AddComponent(new Drawable()).Run <Drawable>(d => { d.BuildRectangle(new Point(entityInfo.Size.X * 16, entityInfo.Size.Y * 16), Color.Red); entity.Position = (entityInfo.Position * 16) + (entityInfo.Size.ToVector2() / 2) * 16; }); entity.AddComponent(new Collider()).Run <Collider>(c => { c.TriggerType = Collider.TriggerTypes.NonSolid; c.ColliderType = Collider.ColliderTypes.Box; }); }); } }
public SavePoint(EntityInfo entityInfo) { Entity = new Entity(entity => { entity.Name = "SavePoint"; entity.Position = entityInfo.Position * 16; entity.LayerName = "Main"; //entity.SortingLayer = GameGlobal.PlayerGraphicEntity.SortingLayer-1; entity.Origin = Vector2.Zero; entity.AddComponent(new Sprite()).Run <Sprite>(sprite => { sprite.LoadTexture("Entities/SavePoint"); }); entity.AddComponent(new Collider()).Run <Collider>(collider => { Collider = collider; Collider.TriggerType = Collider.TriggerTypes.NonSolid; }); StaticCoroutines.CoroutineHelper.Always(() => { Collider.CheckOffset(new Offset()); }); }); /* * Entity.CollidingWithTrigger = obj => { * if (Saving) * return; * * if (obj.Name == "Player" && Global.InputManager.Pressed(InputManager.Input.Up)) * Save(Entity.Position + new Vector2(0, -32)); * }; */ Level.RenderBlender.DrawableTextures.AddRange(new List <DrawableTexture>() { new RenderBlender.DrawableTexture("alphamask2") { Blend = RenderBlender.Subtract, Position = Entity.Position + new Vector2(8), Color = Color.White, Update = item => { item.Scale = 2f + 0.06f * (float)Math.Sin(GameGlobal.TimeLoop * 2); } } }); Level.RenderBlender.DrawableTextures.AddRange(new List <DrawableTexture>() { new RenderBlender.DrawableTexture("alphamask") { Position = Entity.Position + new Vector2(8), Color = Color.DeepSkyBlue * 0.3f, Update = item => { item.Scale = 1.2f + 0.2f * (float)Math.Sin(GameGlobal.TimeLoop * 2); } } }); // Circle bits Vector2 origin = (entityInfo.Position * 16) + new Vector2(8); for (int I = 0; I < 7; I++) { float rand = GameMethods.Random(1, 2); if (rand >= 1.5f) { rand = -rand; } Level.RenderBlender.DrawableTextures.Add(new RenderBlender.DrawableTexture("alphamask2") { Color = Color.AliceBlue * 0.6f, Update = item => { item.Scale = 0.02f * rand + 0.02f * (float)Math.Sin(GameGlobal.TimeLoop * rand); item.Position.X = origin.X + (float)Math.Cos(MathHelper.WrapAngle(GameGlobal.TimeLoop * 0.4f * rand)) * 12 * rand; item.Position.Y = origin.Y + (float)Math.Sin(GameGlobal.TimeLoop * 0.7f * rand) * 12 * rand; } }); } }