Example #1
0
    private void UpdateUnitState()
    {
        if (rigidBody.velocity.y < 0)
        {
            UnitState |= Enums.UnitStateEnum.Falling;
            UnitState  = UnitState.NAND(Enums.UnitStateEnum.Jumping);
        }
        else if (rigidBody.velocity.y >= 0)
        {
            UnitState |= Enums.UnitStateEnum.Jumping;
            UnitState  = UnitState.NAND(Enums.UnitStateEnum.Falling);
        }

        if (UnitState.HasFlag(Enums.UnitStateEnum.Grounded) && !UnitState.HasFlag(Enums.UnitStateEnum.Falling))
        {
            UnitState = UnitState.NAND(Enums.UnitStateEnum.Jumping);
            UnitState = UnitState.NAND(Enums.UnitStateEnum.DoubleJumping);
        }

        if (rigidBody.velocity.x > 0 && UnitState.HasFlag(Enums.UnitStateEnum.Moving))
        {
            UnitState |= Enums.UnitStateEnum.FacingRight;
            UnitState  = UnitState.NAND(Enums.UnitStateEnum.FacingLeft);
        }
        else if (rigidBody.velocity.x < 0 && UnitState.HasFlag(Enums.UnitStateEnum.Moving))
        {
            UnitState |= Enums.UnitStateEnum.FacingLeft;
            UnitState  = UnitState.NAND(Enums.UnitStateEnum.FacingRight);
        }
    }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        UnitState = UnitState.NAND(Enums.UnitStateEnum.Moving);

        // Apply landing
        if (UnitState.HasFlag(Enums.UnitStateEnum.Landing))
        {
            UnitState |= Enums.UnitStateEnum.Grounded;
            UnitState  = UnitState.NAND(Enums.UnitStateEnum.Landing);
        }

        // Zero vertical velocity when we're on the ground
        if (UnitState.HasFlag(Enums.UnitStateEnum.Grounded))
        {
            rigidBody.velocity = new Vector2(rigidBody.velocity.x, 0);
        }

        TakeAction();

        MotionDamping();

        UpdateUnitState();

        var scale = new Vector3(Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);

        if (UnitState.HasFlag(Enums.UnitStateEnum.FacingLeft))
        {
            scale.x *= -1;
        }
        transform.localScale = scale;

        UpdateAnimations();
    }
Example #3
0
        public static string StateSummary(this Enums.UnitStateEnum self)
        {
            var result = new StringBuilder("Debug State Info\n");

            foreach (var value in Enum.GetValues(typeof(Enums.UnitStateEnum)))
            {
                //Debug.Log(String.Format("{0}: {1}", Enum.GetName(typeof(Enums.UnitStateEnum), value), self.HasFlag((Enums.UnitStateEnum)value)));

                if (self.HasFlag((Enums.UnitStateEnum)value))
                {
                    result.AppendLine(Enum.GetName(typeof(Enums.UnitStateEnum), value));
                }
            }

            return(result.ToString());
        }
Example #4
0
 public static Boolean HasFlag(this Enums.UnitStateEnum self, Enums.UnitStateEnum flag)
 {
     return((self & flag) == flag);
 }
Example #5
0
 public static Enums.UnitStateEnum NAND(this Enums.UnitStateEnum self, Enums.UnitStateEnum flag)
 {
     return((self | flag) ^ flag);
 }