示例#1
0
		public HitAttribute(AttackStateType height, ReadOnlyList<HitType> attackdata)
		{
			if (attackdata == null) throw new ArgumentNullException("attackdata");

			m_attackheight = height;
			m_attackdata = attackdata;
		}
示例#2
0
        Object ToHitAttribute(String s)
        {
            AttackStateType       attackheight = AttackStateType.None;
            List <Combat.HitType> attackdata   = new List <Combat.HitType>();

            Boolean first = true;

            foreach (String str in Regex.Split(s, @"\s*,\s*", RegexOptions.IgnoreCase))
            {
                if (first == true)
                {
                    first = false;

                    if (TryConvert(str, out attackheight) == false)
                    {
                        return(Failure);
                    }
                }
                else
                {
                    Combat.HitType hittype;
                    if (TryConvert(str, out hittype) == false)
                    {
                        return(Failure);
                    }

                    attackdata.Add(hittype);
                }
            }

            return(new Combat.HitAttribute(attackheight, new ReadOnlyList <Combat.HitType>(attackdata)));
        }
示例#3
0
        public bool HasHeight(AttackStateType height)
        {
            if (height == AttackStateType.None)
            {
                return(false);
            }

            return((AttackHeight & height) == height);
        }
示例#4
0
        public HitAttribute(AttackStateType height, ReadOnlyList <HitType> attackdata)
        {
            if (attackdata == null)
            {
                throw new ArgumentNullException(nameof(attackdata));
            }

            m_attackheight = height;
            m_attackdata   = attackdata;
        }
示例#5
0
        public static Node Parse(ParseState parsestate)
        {
            Operator @operator = parsestate.CurrentOperator;

            if (@operator != Operator.Equals && @operator != Operator.NotEquals)
            {
                return(null);
            }

            parsestate.BaseNode.Arguments.Add(@operator);
            ++parsestate.TokenIndex;

            AttackStateType ast = parsestate.ConvertCurrentToken <AttackStateType>();

            if (ast == AttackStateType.None)
            {
                return(null);
            }

            parsestate.BaseNode.Arguments.Add(ast);
            ++parsestate.TokenIndex;

            List <Combat.HitType> hittypes = new List <Combat.HitType>();

            while (true)
            {
                if (parsestate.CurrentSymbol != Symbol.Comma)
                {
                    break;
                }
                ++parsestate.TokenIndex;

                Combat.HitType?hittype = parsestate.ConvertCurrentToken <Combat.HitType?>();
                if (hittype == null)
                {
                    --parsestate.TokenIndex;
                    break;
                }

                hittypes.Add(hittype.Value);
                ++parsestate.TokenIndex;
            }

            parsestate.BaseNode.Arguments.Add(hittypes.ToArray());
            return(parsestate.BaseNode);
        }
示例#6
0
		public static Boolean Evaluate(Object state, ref Boolean error, Operator @operator, AttackStateType ast, Combat.HitType[] hittypes)
		{
			Combat.Character character = state as Combat.Character;
			if (character == null)
			{
				error = true;
				return false;
			}

			if (character.MoveType != xnaMugen.MoveType.Attack) return false;

			Combat.HitAttribute attr = character.OffensiveInfo.HitDef.HitAttribute;

			Boolean heightmatch = (attr.AttackHeight & ast) != AttackStateType.None;

			Boolean datamatch = false;
			foreach (Combat.HitType hittype in hittypes)
			{
				if (attr.HasData(hittype) == false) continue;

				datamatch = true;
				break;
			}

			switch (@operator)
			{
				case Operator.Equals:
					return heightmatch && datamatch;

				case Operator.NotEquals:
					return !heightmatch || !datamatch;

				default:
					error = true;
					return false;
			}
		}
示例#7
0
        Object ToAttackStateType(String s)
        {
            AttackStateType ast = AttackStateType.None;

            if (s.IndexOf("s", StringComparison.OrdinalIgnoreCase) != -1)
            {
                ast |= AttackStateType.Standing;
            }
            if (s.IndexOf("c", StringComparison.OrdinalIgnoreCase) != -1)
            {
                ast |= AttackStateType.Crouching;
            }
            if (s.IndexOf("a", StringComparison.OrdinalIgnoreCase) != -1)
            {
                ast |= AttackStateType.Air;
            }

            if (ast == AttackStateType.None && s != String.Empty)
            {
                return(Failure);
            }

            return(ast);
        }
示例#8
0
		public Boolean HasHeight(AttackStateType height)
		{
			if (height == AttackStateType.None) return false;

			return (AttackHeight & height) == height;
		}
示例#9
0
        public static Boolean Evaluate(Object state, ref Boolean error, Operator @operator, AttackStateType ast, Combat.HitType[] hittypes)
        {
            Combat.Character character = state as Combat.Character;
            if (character == null)
            {
                error = true;
                return(false);
            }

            if (character.MoveType != xnaMugen.MoveType.Attack)
            {
                return(false);
            }

            Combat.HitAttribute attr = character.OffensiveInfo.HitDef.HitAttribute;

            Boolean heightmatch = (attr.AttackHeight & ast) != AttackStateType.None;

            Boolean datamatch = false;

            foreach (Combat.HitType hittype in hittypes)
            {
                if (attr.HasData(hittype) == false)
                {
                    continue;
                }

                datamatch = true;
                break;
            }

            switch (@operator)
            {
            case Operator.Equals:
                return(heightmatch && datamatch);

            case Operator.NotEquals:
                return(!heightmatch || !datamatch);

            default:
                error = true;
                return(false);
            }
        }
示例#10
0
 public void changeState(AttackStateType type)
 {
     // Debug.Log(type.ToString());
     _currentState = _states[type];
     _currentState.reset();        //todo..remove enter
 }