private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            action  = (GiveOrdersAction)MainWindow.Instance.CurrentLogic;
            trigger = MainWindow.Instance.Mission.FindLogicOwner(action);

            var missionUnits = MainWindow.Instance.Mission.AllUnits.ToArray();
            var triggerUnits = trigger.AllUnits.ToArray();

            foreach (var unit in missionUnits)
            {
                UnitIcon.PlaceSimplifiedUnit(canvas, unit, !triggerUnits.Contains(unit));
            }

            UpdateLines();

            action.Groups.CollectionChanged += (s, ea) => UpdateLines();
            trigger.Logic.CollectionChanged += (s, ea) => UpdateLines();

            NotifyCollectionChangedEventHandler handler = (s, ea) => UpdateLines();

            action.Orders.CollectionChanged += handler;
            canvas.Unloaded += (s, ea) => action.Orders.CollectionChanged -= handler;
        }
		void CollapseAllButThisTrigger(Trigger thisTrigger)
		{
			foreach (var trigger in Mission.Triggers)
			{
				trigger.IsExpanded = thisTrigger == trigger;
			}
		}
		void RenameTrigger(Trigger trigger)
		{
			if (trigger == null) return;
			var dialog = new StringRequest { Title = "Rename Trigger", TextBox = { Text = trigger.Name }, Owner =this };
			if (dialog.ShowDialog() == true)
			{
				trigger.Name = dialog.TextBox.Text;
				trigger.RaisePropertyChanged(String.Empty);
				Mission.RaisePropertyChanged("Triggers");
			}
		}
		void DeleteTrigger(Trigger trigger)
		{
			Mission.Triggers.Remove(trigger);
			Mission.RaisePropertyChanged(String.Empty);
		}
 bool MoveTrigger(MoveDirection direction, Trigger trigger, int count)
 {
     bool cont = true;
     for (int i = 0; i < count; i++)
     {
         cont = MoveTrigger(direction, trigger);
         if (cont == false) return false;
     }
     return true;
 }
 bool MoveTrigger(MoveDirection direction, Trigger trigger, bool toEnd)
 {
     if (trigger == null) return false;
     var index = Mission.Triggers.IndexOf(trigger);
     if (direction == MoveDirection.Up)
     {
         if (index == 0) return false;
         if (toEnd) Mission.Triggers.Move(index, 0);
         else Mission.Triggers.Move(index, index - 1);
     }
     else if (direction == MoveDirection.Down)
     {
         if (index + 2 > Mission.Triggers.Count) return false;
         if (toEnd) Mission.Triggers.Move(index, Mission.Triggers.Count - 1);
         else Mission.Triggers.Move(index, index + 1);
     }
     Mission.RaisePropertyChanged("AllLogic");
     return true;
 }
		MenuItem GetNewConditionMenu(Trigger trigger)
		{
			return GetNewConditionMenu(() => trigger);
		}
		bool MoveTrigger(MoveDirection direction, Trigger trigger)
		{
            return MoveTrigger(direction, trigger, false);
		}
		void CreateNewTrigger(bool repeating)
		{
			var trigger = new Trigger { Name = GetNewTriggerName() };
			if (repeating)
			{
				trigger.MaxOccurrences = -1;
			}
			Mission.Triggers.Add(trigger);
			Mission.RaisePropertyChanged(String.Empty);
		}
예제 #10
0
        public void CopyTrigger(Trigger source)
        {
            /*
            MemoryStream stream = new MemoryStream();
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter format = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            format.Serialize(stream, source);
            Trigger copy = (CMissionLib.Trigger)format.Deserialize(stream);
            copy.Name = copy.Name + " (Copy)";
            Triggers.Add(copy);
            RaisePropertyChanged(String.Empty);
            */
            string path = Path.GetTempFileName();
            using (var writer = XmlWriter.Create(path, new XmlWriterSettings { Indent = true, CheckCharacters = true })) new NetDataContractSerializer().WriteObject(writer, source);
            try
            {
                using (var stream = File.OpenRead(path))
                {
                    Trigger copy = (Trigger)new NetDataContractSerializer().ReadObject(stream);
                    copy.Name = copy.Name + " (Copy)";

                    // reconstruct object references
                    foreach (CreateUnitsAction action in copy.Actions.Where(x => x.GetType() == typeof(CreateUnitsAction)))
                    {
                        foreach (UnitStartInfo unit in action.Units)
                        {
                            unit.Player = Players.First(x => x.Name == unit.Player.Name);
                            unit.UnitDef = Mod.UnitDefs.First(x => x.Name == unit.UnitDefName);
                        }
                    }
                    foreach (UnitsAreInAreaCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(UnitsAreInAreaCondition)))
                    {
                        var players = condition.Players.Select(x => Players.First(p => p.Name == x.Name));
                        condition.Players = new ObservableCollection<Player>(players);
                    }
                    foreach (UnitCreatedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(UnitCreatedCondition)))
                    {
                        var players = condition.Players.Select(x => Players.First(p => p.Name == x.Name));
                        condition.Players = new ObservableCollection<Player>(players);
                    }
                    foreach (UnitFinishedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(UnitFinishedCondition)))
                    {
                        var players = condition.Players.Select(x => Players.First(p => p.Name == x.Name));
                        condition.Players = new ObservableCollection<Player>(players);
                    }
                    foreach (PlayerDiedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(PlayerDiedCondition)))
                    {
                        condition.Player = Players.First(p => p.Name == condition.Player.Name);
                    }
                    foreach (PlayerJoinedCondition condition in copy.Conditions.Where(x => x.GetType() == typeof(PlayerJoinedCondition)))
                    {
                        condition.Player = Players.First(p => p.Name == condition.Player.Name);
                    }
                    foreach (LockUnitsAction action in copy.Actions.Where(x => x.GetType() == typeof(LockUnitsAction)))
                    {
                        var players = action.Players.Select(x => Players.First(p => p.Name == x.Name));
                        action.Players = new ObservableCollection<Player>(players);
                    }
                    foreach (UnlockUnitsAction action in copy.Actions.Where(x => x.GetType() == typeof(UnlockUnitsAction)))
                    {
                        var players = action.Players.Select(x => Players.First(p => p.Name == x.Name));
                        action.Players = new ObservableCollection<Player>(players);
                    }

                    Triggers.Add(copy);
                    RaisePropertyChanged(String.Empty);
                }
                if (File.Exists(path)) File.Delete(path);
            }
            catch(Exception ex) {
                throw ex;
            }
        }
예제 #11
0
		public Mission(string name, Mod game, Map map)
		{
			Mod = game;
			Map = map;
			Name = name;
			ModName = game.Name;
			MapName = map.Name;
			var testAI = game.AllAis.FirstOrDefault(ai => ai.ShortName.Contains("NullAI"));
			var player1 = new Player { Name = "Player 1", Color = Colors.Blue, Alliance = "Alliance 1", IsHuman = true, IsRequired = true };
			var player2 = new Player { Name = "Player 2", Color = Colors.Red, Alliance = "Alliance 2", IsHuman = false, };
			StartingPlayer = player1;
			Players.Add(player1);
			Players.Add(player2);
			Regions.Add(new Region { Name = "Region 1" });

            var gamePreloadTrigger = new Trigger();
			Triggers.Add(gamePreloadTrigger);
			gamePreloadTrigger.Logic.Add(new GamePreloadCondition());
            gamePreloadTrigger.Name = "Initialization";

            var gameStartTrigger = new Trigger();
            Triggers.Add(gameStartTrigger);
            gameStartTrigger.Logic.Add(new GameStartedCondition());
            gameStartTrigger.Name = "Game Start";
			var unitType = game.UnitDefs.First();
			var startUnits = new UnitStartInfo[]  {};
			gamePreloadTrigger.Logic.Add(new CreateUnitsAction(startUnits));

            var widgets = new[] { "gui_pauseScreen.lua", "cmd_unit_mover.lua", "init_startup_info_selector.lua", "gui_center_n_select.lua", "gui_take_remind.lua", "gui_startup_info_selector.lua", "gui_local_colors.lua", "spring_direct_launch.lua" };
			foreach (var widget in widgets) DisabledWidgets.Add(widget);
			var gadgets = new string[] { "game_over.lua", "game_end.lua", "awards.lua" };
			foreach (var gadget in gadgets) DisabledGadgets.Add(gadget);
			if (game.Name.Contains("Zero-K")) RapidTag = "zk:stable";
			Items = new CompositeObservableCollection<Trigger, Region>(Triggers, Regions);
		}
		private void UserControl_Loaded(object sender, RoutedEventArgs e)
		{
			action = (GiveOrdersAction)MainWindow.Instance.CurrentLogic;
			trigger = MainWindow.Instance.Mission.FindLogicOwner(action);

			var missionUnits = MainWindow.Instance.Mission.AllUnits.ToArray();
			var triggerUnits = trigger.AllUnits.ToArray();
			foreach (var unit in missionUnits)
			{
				UnitIcon.PlaceSimplifiedUnit(canvas, unit, !triggerUnits.Contains(unit));
			}

			UpdateLines();

			action.Groups.CollectionChanged += (s, ea) => UpdateLines();
			trigger.Logic.CollectionChanged += (s, ea) => UpdateLines();

			NotifyCollectionChangedEventHandler handler = (s, ea) => UpdateLines();
			action.Orders.CollectionChanged += handler;
			canvas.Unloaded += (s, ea) => action.Orders.CollectionChanged -= handler;
		}
		public ConditionsFolder(Trigger trigger)
		{
			this.Trigger = trigger;
			Name = "Conditions";
			trigger.Logic.CollectionChanged += (s, e) => RaisePropertyChanged("Items");
		}