public override void OnReceiveMessage(assMessageType msgType, object[] args)
    {
        switch (msgType)
        {
        case assMessageType.Move:
            if (!Entity.IsAI)
            {
                float horizontal = (float)args[0];
                MoveEntity(horizontal);
                Entity.RotateEntity(horizontal);
                if (Entity.OnGround)
                {
                    //float horAbsValue = Mathf.Abs(horizontal);
                    MovementAnimation(horizontal);
                }
            }
            else if (!Entity.IsAIBoss)
            {
                Transform target = (Transform)args[0];
                if (Vector2.Distance(Entity.RgdBdy2D.position, target.position) < Entity.DistanceTreshold)
                {
                    //TODO send message to do attack state or something
                    Entity.SendMessageToBrain(assMessageType.Attack, target);
                    return;
                }
                Vector2 direction = ((Vector2)target.position - Entity.RgdBdy2D.position).normalized;
                direction.y = 0;
                MoveEntity(direction);
                Entity.RotateEntity(direction.x);
            }
            break;

        case assMessageType.Jump:
            Entity.AnimCtrl.SetFloat("nav_speed", 0);
            Entity.AnimCtrl.SetTrigger("jump");
            Entity.Velocity = new Vector2(Entity.Velocity.x, 0);
            Entity.RgdBdy2D.AddForce(Vector2.up * Entity.JumpVelocity, ForceMode2D.Impulse);
            Entity.JumpTimer = 0;
            break;

        case assMessageType.Attack:
            Entity.ChangeState(typeof(assAttackState), args);
            break;

        case assMessageType.Flinch:
            //chance to change state or idk to be discussed
            break;

        case assMessageType.FirstPhaseActivate:
            Entity.ChangeState(typeof(assFirstPhaseState), args);
            break;

        case assMessageType.FinalPhaseActivate:
            Entity.ChangeState(typeof(assFinalPhaseState), args);
            break;

        default:
            break;
        }
    }
 public override void OnReceiveMessage(assMessageType msgType, object[] args)
 {
     switch (msgType)
     {
     case assMessageType.FinalPhaseActivate:
         Entity.ChangeState(typeof(assFinalPhaseState), args);
         break;
     }
 }
 public override void OnReceiveMessage(assMessageType msgType, object[] args)
 {
     //switch (msgType) {
     //    case assMessageType.Think:
     //        Entity.ThinkingTime = (float)args[0];
     //        break;
     //    default:
     //        break;
     //}
 }
    public override void OnReceiveMessage(assMessageType msgType, object[] args)
    {
        switch (msgType)
        {
        case assMessageType.Attack:
            //tdAttack currentAtk = (tdAttack)args[0];
            //Entity.AnimCtrl.SetInteger("anim_state", (int)currentAtk.AnimState);

            //TODO if boss AI check if melee or range

            break;

        case assMessageType.Flinch:
            break;

        case assMessageType.FirstPhaseActivate:
            Entity.ChangeState(typeof(assFirstPhaseState), args);
            break;

        case assMessageType.FinalPhaseActivate:
            Entity.ChangeState(typeof(assFinalPhaseState), args);
            break;
        }
    }
 public abstract void OnReceiveMessage(assMessageType msgType, object[] args);
 /// <summary>
 /// Will be used on the entity controller to separate inputs and behaviour.
 /// Can also be used as a reaction for AI
 /// </summary>
 /// <param name="msgtype">message type</param>
 /// <param name="args">anything to pass through</param>
 public void SendMessageToBrain(assMessageType msgType, params object[] args)
 {
     _existing.OnReceiveMessage(msgType, args);
 }
 public override void OnReceiveMessage(assMessageType msgType, object[] args)
 {
 }