public void OnGUI() { Scheduler s = GetComponent <Scheduler>(); Arbiter a = GetComponent <Arbiter>(); if (pendingTargetedSkill != null) { if (targetingChoices == null || targetingChoices.Length == 0) { targetingChoices = new string[] { "Tile", "Character", "Cancel" }; } int choice = OnGUIChoices("Target tile or character?", targetingChoices); if (choice != -1) { if (choice == 0) { pendingTargetedSkill.ConfirmDelayedSkillTarget(TargetOption.Path); } else if (choice == 1) { pendingTargetedSkill.ConfirmDelayedSkillTarget(TargetOption.Character); } else if (choice == 2) { pendingTargetedSkill.IncrementalCancel(); } pendingTargetedSkill = null; } return; } bool showAnySchedulerButtons = true; bool showCancelButton = true; Character ac = s.activeCharacter; var skills = ac == null ? new SkillDef[0] : ac.Skills; if (ac != null) { if (map == null) { map = transform.parent.GetComponent <Map>(); } MoveSkillDef ms = ac.moveSkill; if (ms != null && ms.isActive) { if (a.IsLocalTeam(ac.EffectiveTeamID)) { MoveExecutor me = ms.Executor; if (!me.IsMoving) { if (ms.RequireConfirmation && ms.AwaitingConfirmation) { bool yesButton = false, noButton = false; OnGUIConfirmation("Move here?", out yesButton, out noButton); if (yesButton) { ms.ApplyCurrentTarget(); ms.AwaitingConfirmation = false; } if (noButton) { ms.AwaitingConfirmation = false; ms.TemporaryMove(map.InverseTransformPointWorld(me.position)); } showCancelButton = false; } else { showCancelButton = false; } showAnySchedulerButtons = false; } else { showAnySchedulerButtons = false; showCancelButton = false; } } } foreach (SkillDef skill in skills) { if (!skill.isPassive && skill.isActive && skill is ActionSkillDef && !(skill is MoveSkillDef || skill is WaitSkillDef)) { ActionSkillDef ask = skill as ActionSkillDef; if (a.IsLocalTeam(ac.EffectiveTeamID)) { if (ask.RequireConfirmation && ask.AwaitingConfirmation) { bool yesButton = false, noButton = false; OnGUIConfirmation("Confirm?", out yesButton, out noButton); if (yesButton) { ask.ApplyCurrentTarget(); } if (noButton) { ask.AwaitingConfirmation = false; } } showAnySchedulerButtons = false; } } } WaitSkillDef ws = ac.waitSkill; if (ws != null && ws.isActive) { if (a.IsLocalTeam(ac.EffectiveTeamID)) { if (ws.RequireConfirmation && ws.AwaitingConfirmation) { bool yesButton = false, noButton = false; OnGUIConfirmation("Wait here?", out yesButton, out noButton); if (yesButton) { ws.ApplyCurrentTarget(); } if (noButton) { ws.AwaitingConfirmation = false; } } else { showCancelButton = permitMultipleMoves || permitMultipleActions || !(activeCharacterHasMoved && activeCharacterHasActed); } showAnySchedulerButtons = false; } } } if (s is CTScheduler) { if (ac != null && a.IsLocalTeam(ac.EffectiveTeamID)) { GUILayout.BeginArea(new Rect( 8, 8, 128, 240 )); GUILayout.Label("Character:" + ac.gameObject.name); GUILayout.Label("HP: " + Mathf.Ceil(ac.GetStat("health", ac.GetStat("HP")))); GUILayout.Label("CT: " + Mathf.Floor(ac.GetStat((s as CTScheduler).ctStat))); //TODO:0: support skills //show list of skills SkillDef activeSkill = null; foreach (SkillDef sk in skills) { if (sk.isActive) { activeSkill = sk; break; } } if (activeSkill == null) { //root: move, act group, wait var nextSel = OnGUISkillGroup(ac, skills, selectedGroup); selectedGroup = nextSel == null ? null : nextSel.ToList(); } else if (showCancelButton) { if (GUILayout.Button("Cancel " + activeSkill.skillName)) { activeSkill.Cancel(); } } GUILayout.EndArea(); } } else if (s is TeamRoundsPickAnyOnceScheduler) { TeamRoundsPickAnyOnceScheduler tps = s as TeamRoundsPickAnyOnceScheduler; GUILayout.BeginArea(new Rect( 8, 8, 110, 240 )); GUILayout.Label("Current Team:" + tps.currentTeam); if (ac != null) { GUILayout.Label("Character:" + ac.gameObject.name); GUILayout.Label("Health: " + Mathf.Ceil(ac.GetStat("health"))); //show list of skills SkillDef activeSkill = null; foreach (SkillDef sk in skills) { if (sk.isActive) { activeSkill = sk; break; } } if (activeSkill == null) { //root: move, act group, wait var nextSel = OnGUISkillGroup(ac, skills, selectedGroup); selectedGroup = nextSel == null ? null : nextSel.ToList(); } else if (showCancelButton) { if (GUILayout.Button("Cancel " + activeSkill.skillName)) { activeSkill.Cancel(); } } } else { GUILayout.Label("Click any team member"); } if (a.IsLocalTeam(tps.currentTeam)) { if (showAnySchedulerButtons && !(ac != null && ac.moveSkill.Executor.IsMoving) && GUILayout.Button("End Round")) { tps.EndRound(); } } GUILayout.EndArea(); } else if (s is TeamRoundsPointsScheduler) { TeamRoundsPointsScheduler tps = s as TeamRoundsPointsScheduler; if (a.IsLocalTeam(tps.currentTeam)) { GUILayout.BeginArea(new Rect( 8, 8, 110, 240 )); GUILayout.Label("Current Team: " + tps.currentTeam); GUILayout.Label("Points Left: " + tps.pointsRemaining); if (ac != null) { GUILayout.Label("Character:" + ac.gameObject.name); GUILayout.Label("Health: " + Mathf.Ceil(ac.GetStat("health"))); RoundPointsCharacter rpc = ac.GetComponent <RoundPointsCharacter>(); GUILayout.Label("AP: " + Mathf.Floor(rpc.Limiter)); //show list of skills SkillDef activeSkill = null; foreach (SkillDef sk in skills) { if (sk.isActive) { activeSkill = sk; break; } } if (activeSkill == null) { //root: move, act group, wait var nextSel = OnGUISkillGroup(ac, skills, selectedGroup); selectedGroup = nextSel == null ? null : nextSel.ToList(); } else if (showCancelButton) { if (GUILayout.Button("Cancel " + activeSkill.skillName)) { activeSkill.Cancel(); } if (showAnySchedulerButtons && activeSkill is MoveSkillDef && !(activeSkill as MoveSkillDef).Executor.IsMoving) { if (GUILayout.Button("End Move")) { //?? activeSkill.ApplySkill(); } } } } else { if (showAnySchedulerButtons && !(ac != null && ac.moveSkill.Executor.IsMoving) && GUILayout.Button("End Round")) { tps.EndRound(); } } GUILayout.EndArea(); } } else if (s is TeamRoundsInitiativeScheduler || s is RoundsInitiativeScheduler) { GUILayout.BeginArea(new Rect( 8, 8, 110, 240 )); TeamRoundsInitiativeScheduler tis = s as TeamRoundsInitiativeScheduler; if (tis != null) { GUILayout.Label("Current Team:" + tis.currentTeam); } if (ac != null) { GUILayout.Label("Character:" + ac.gameObject.name); GUILayout.Label("Health: " + Mathf.Ceil(ac.GetStat("health"))); //show list of skills SkillDef activeSkill = null; foreach (SkillDef sk in skills) { if (sk.isActive) { activeSkill = sk; break; } } if (activeSkill == null) { //root: move, act group, wait var nextSel = OnGUISkillGroup(ac, skills, selectedGroup); selectedGroup = nextSel == null ? null : nextSel.ToList(); } else if (showCancelButton) { if (GUILayout.Button("Cancel " + activeSkill.skillName)) { activeSkill.Cancel(); } } } GUILayout.EndArea(); } }