Example #1
0
    public static MoveSkillDef CreateMoveSkillDef()
    {
        MoveSkillDef sd = ScriptableObjectUtility.CreateAsset <MoveSkillDef>(
            null,
            "Assets/SRPGCK Data/Skills/Move",
            true
            );

        sd.isEnabledF    = Formula.True();
        sd.io            = SRPGCKSettings.Settings.defaultMoveIO;
        sd.reallyDefined = true;
        return(sd);
    }
Example #2
0
 public override void OnEnable()
 {
     base.OnEnable();
     name = "MoveSkillDef";
     ms = target as MoveSkillDef;
 }
Example #3
0
    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();
        }
    }
Example #4
0
 public override void OnEnable()
 {
     base.OnEnable();
     name = "MoveSkillDef";
     ms   = target as MoveSkillDef;
 }
Example #5
0
/*	public void CharacterActivated() {
 *
 *      }
 *      public void CharacterDeactivated() {
 *
 *      }
 *      public void RoundBegan() {
 *
 *      }
 *      public void RoundEnded() {
 *
 *      }*/
    public void Update()
    {
        //we'll need different ones of these later for team phased vs ct, I'm sure
        Character c = GetComponent <Scheduler>().activeCharacter;

        if (c == null || !GetComponent <Arbiter>().IsAITeam(c.EffectiveTeamID))
        {
            return;
        }
        if (c.moveSkill.Executor.IsMoving)
        {
            return;
        }
        CTScheduler cts = GetComponent <Scheduler>() as CTScheduler;

        if (cts != null)
        {
            if (!cts.activeCharacterHasMoved)
            {
                c.moveSkill.ActivateSkill();
                MoveSkillDef sptms = c.moveSkill;
                if (sptms.Overlay != null)
                {
                    PathNode[] dests = (sptms.Overlay as GridOverlay).destinations;
                    if (dests.Length == 0)
                    {
                        c.moveSkill.Cancel();
                        c.waitSkill.ActivateSkill();
                        Quaternion  dir = Quaternion.Euler(0, 0, 0);
                        const float TAU = 360.0f;
                        switch ((int)Mathf.Floor(Random.Range(0, 4)))
                        {
                        case 0: dir = Quaternion.Euler(0, 0 * TAU / 4, 0); break;

                        case 1: dir = Quaternion.Euler(0, 1 * TAU / 4, 0); break;

                        case 2: dir = Quaternion.Euler(0, 2 * TAU / 4, 0); break;

                        case 3: dir = Quaternion.Euler(0, 3 * TAU / 4, 0); break;
                        }
                        c.waitSkill.PickFacing(dir);
                    }
                    else
                    {
                        c.moveSkill.PerformMoveToPathNode(dests[(int)Mathf.Floor(Random.Range(0, dests.Length))]);
                    }
                }
            }
            else
            {
                c.waitSkill.ActivateSkill();
                Quaternion  dir = Quaternion.Euler(0, 0, 0);
                const float TAU = 360.0f;
                switch ((int)Mathf.Floor(Random.Range(0, 4)))
                {
                case 0: dir = Quaternion.Euler(0, 0 * TAU / 4, 0); break;

                case 1: dir = Quaternion.Euler(0, 1 * TAU / 4, 0); break;

                case 2: dir = Quaternion.Euler(0, 2 * TAU / 4, 0); break;

                case 3: dir = Quaternion.Euler(0, 3 * TAU / 4, 0); break;
                }
                c.waitSkill.PickFacing(dir);
            }
        }
        else
        {
            c.moveSkill.ActivateSkill();
            MoveSkillDef ms = c.moveSkill;
            if (ms.Overlay != null)
            {
                PathNode[] dests = (ms.Overlay as GridOverlay).destinations;
                if (dests.Length == 0)
                {
                    c.moveSkill.Cancel();
                }
                else
                {
                    c.moveSkill.PerformMoveToPathNode(
                        dests[(int)Mathf.Floor(Random.Range(0, dests.Length))]
                        );
                }
                c.waitSkill.ActivateSkill();
                Quaternion  dir = Quaternion.Euler(0, 0, 0);
                const float TAU = 360.0f;
                switch ((int)Mathf.Floor(Random.Range(0, 4)))
                {
                case 0: dir = Quaternion.Euler(0, 0 * TAU / 4, 0); break;

                case 1: dir = Quaternion.Euler(0, 1 * TAU / 4, 0); break;

                case 2: dir = Quaternion.Euler(0, 2 * TAU / 4, 0); break;

                case 3: dir = Quaternion.Euler(0, 3 * TAU / 4, 0); break;
                }
                c.waitSkill.PickFacing(dir);
            }
        }
    }