Example #1
0
    private void CreateStates()
    {
        states.Clear();
        m_passiveHash.Clear();
        m_coolGroups.Clear();

        var ss = info.states;

        foreach (var s in ss)
        {
            CreateState(s, info);
        }

        StateMachineInfoPassive psm = null;

        foreach (var sub in subStateMachines)
        {
            if (psm == null && sub is StateMachineInfoPassive)
            {
                psm = sub as StateMachineInfoPassive;
            }

            foreach (var s in sub.states)
            {
                CreateState(s, sub);
            }
        }

        m_laydown = GetState(StateMachineState.STATE_LAYDOWN);

        if (!m_laydown)
        {
            var p = psm ?? info;
            CreateState(StateMachineInfo.GetDefaultLaydownState(p.GetType().GetHashCode(), p.ID), p);
        }

        if (states.Count < 1)
        {
            states.Add(StateMachineState.Create(this, info, StateMachineInfo.emptyState, SkilLEntry.empty));
        }
    }
Example #2
0
    private bool CreateState(StateMachineInfo.StateDetail s, StateMachineInfo parent)
    {
        if (!s.valid)
        {
            return(false);
        }

        StateMachineState state = null;

        var skillID = SkillToStateInfo.GetSkillID(creature.weaponID, s.ID);

        if (skillID < 0)
        {
            var list = AwakeInfo.GetSkillIDList(s.hash);
            if (list != null && list.Count > 0)
            {
                var ss = new List <StateMachineInfo.StateDetail>();
                foreach (var id in list)
                {
                    var lv = creature.GetSkillLevel(id);
                    if (lv > 0)
                    {
                        var ainfo      = ConfigManager.Get <AwakeInfo>(id);
                        var stateLevel = ainfo?.states.Find(Item => Item.state == s.state);
                        if (stateLevel != null)
                        {
                            lv = stateLevel.level;
                        }
                    }

                    if (lv >= 0)
                    {
                        var os = StateOverrideInfo.GetOriginOverrideState(info, s, lv);
                        if (os != null)
                        {
                            ss.Add(os);
                        }
                    }
                }
                s = StateOverrideInfo.StateOverride.Combin(s, ss);
            }

            if (!s.valid)
            {
                return(false);
            }

            state = StateMachineState.Create(this, parent, s, SkilLEntry.empty);
        }
        else
        {
            var skill = creature.GetSkillEntry(skillID);
            var level = skill.valid ? skill.level : 0;
            var ls    = level <= 0 ? s : StateOverrideInfo.GetOverrideState(info, s, level);

            if (!ls.valid)
            {
                return(false);
            }

            state = StateMachineState.Create(this, parent, ls, skill);
        }

        states.Add(state);

        if (state.passive)
        {
            m_passiveHash.Set(s.ID, states.Count - 1);
        }
        if (s.coolGroup != 0)
        {
            m_coolGroups.GetDefault(s.coolGroup).Add(state);
        }

        return(true);
    }