public override void RegisterStates()
 {
     MeleeAttackBehaviour attackBehaviour = new MeleeAttackBehaviour(this.targetObject, CharVars.ACTION_CHECKS.ToS(), this.radius, CharVars.ENEMY_LAYER.ToS(), CharVars.FACING_DIRECTION.ToS())
       // .WithDamage(this.baseDamage)
       .WithCharge(CharVars.GENERIC_CHARGE.ToS())
       .WithEffect((int) this.effect)
       .WithEffectHorizontalDirection(null, 1f, true)
       .WithEffectVerticalDirection(CharVars.VERTICAL_VALUE.ToS(), 0f, 0f, 1f)
       .WithEffectForce(this.force);
       ;
       ChargedMeleeAttackBuilder attackBuilder =
     (ChargedMeleeAttackBuilder) new ChargedMeleeAttackBuilder(this.targetObject, this.input, CharVars.GENERIC_CHARGE.ToS(), (float)CharVars.GENERIC_CHARGE.defaultValue, this.maxChargeMultiplier, this.maxChargeSeconds)
     .WithState(CharStates.ATTACK_STRONG.ToS())
     .WithStep(this.stepForce)
     .WithAnimation(new PlayAnimationBehaviour(this.targetObject, CharStates.ATTACK_STRONG.ToS()))
     .WithStartingStates(CharStates.IDLE.ToS(), CharStates.MOVE.ToS(), CharStates.FLY.ToS())
     .WithUpdateBehaviours(attackBehaviour)
     .WithCombo(new ComboWrapper(CharStates.ATTACK_STRONG.ToS(Suffixes.Pursuit), 1)
        .WithCondition(new InputCondition(CharVars.JUMP_MODE.ToS(), Operators.EQUAL, InputModes.PRESS, InputModes.DOUBLE_TAP))
        .WithCondition(new IntCondition(CharVars.ATTACK_EFFECT.ToS(), Operators.EQUAL, (int)AttackEffects.KNOCKBACK))
       )
     .WithCombo(new ComboWrapper(CharStates.ATTACK_STRONG.ToS(Suffixes.Teleport), 2)
        .WithCondition(new InputCondition(CharVars.FIRE1_MODE.ToS(), Operators.EQUAL, InputModes.PRESS, InputModes.DOUBLE_TAP))
        .WithCondition(new IntCondition(CharVars.ATTACK_EFFECT.ToS(), Operators.EQUAL, (int)AttackEffects.KNOCKBACK))
       );
       this.stateWrappers = attackBuilder.Build();
 }
        void Start()
        {
            StartingHealth = Health;

            _attackBehaviour = new MeleeAttackBehaviour(this, MinDamage, MaxDamage, RechargeTime, Range);
            _moveBehaviour = new RandomMoveBehaviour(this);
        }
    public override void SetUpEntityComponent(GameEntity entity)
    {
        base.SetUpEntityComponent(entity);

        SetUpCombatActionsAnimationHashes();

        myTransform = entity.myTransform;

        //Time.timeScale = 0.25f; //if we with for slow mo
        ChangeStance(1);

        nextBehaviourChangeCheckeTime = Time.time + Random.Range(0, behaviourChangeCheckInterval);
        nextBehaviourUpdateTime       = Time.time + Random.Range(0, behaviourUpdateInterval);

        //construct the bahaviours, assign the starting behaviour
        fleeBehaviour        = new FleeBehaviour(entity, myTransform);
        meleeAttackBehaviour = new MeleeAttackBehaviour(entity, myTransform);
        currentBehaviour     = meleeAttackBehaviour;
    }
 private List<StateWrapper> BuildAttackUp()
 {
     MeleeAttackBehaviour attackBehaviour = new MeleeAttackBehaviour(this.targetObject, CharVars.ACTION_CHECKS.ToS(), this.radius, CharVars.ENEMY_LAYER.ToS(), CharVars.FACING_DIRECTION.ToS())
       // .WithDamage(this.baseDamage)
       .WithCharge(CharVars.GENERIC_CHARGE.ToS())
       .WithEffect((int) this.effect)
       .WithEffectHorizontalDirection(CharVars.HORIZONTAL_VALUE.ToS(), 0f, true)
       .WithEffectVerticalDirection(CharVars.VERTICAL_VALUE.ToS(), 1f, 1f, 1f)
       .WithEffectForce(this.force)
       ;
       BasicMeleeAttackBuilder builder = (BasicMeleeAttackBuilder) new BasicMeleeAttackBuilder(this.targetObject, this.input)
                             .WithState(CharStates.ATTACK_STRONG.ToS(Suffixes.Up))
                             .WithAnimation(new PlayAnimationBehaviour(this.targetObject, CharStates.ATTACK_STRONG.ToS(Suffixes.Up)))
                             .WithStartBehaviours(new SetVariableBehaviour(this.targetObject, CharVars.IS_SLIDING.ToS(), true), new IgnoreGravityBehaviour(this.targetObject))
                             .WithUpdateBehaviours(attackBehaviour)
                             .WithExitBehaviours(new SetVariableBehaviour(this.targetObject, CharVars.IS_SLIDING.ToS(), false), new RestoreGravityBehaviour(this.targetObject, CharVars.ORIGINAL_GRAVITY_SCALE.ToS()).WithNextStateNotIn(CharStates.FLY.ToS()))
                             .WithCombo(new ComboWrapper(CharStates.ATTACK_STRONG.ToS(Suffixes.Pursuit), 1)
                                        .WithCondition(new InputCondition(CharVars.FromInputMode(this.pursuitInput).ToS(), Operators.EQUAL, InputModes.PRESS, InputModes.DOUBLE_TAP))
                                        .WithCondition(new IntCondition(CharVars.GENERIC_COUNTER.ToS(), Operators.LESS_THAN, this.maxPursuits))
                                        .WithCondition(new IntCondition(CharVars.ATTACK_EFFECT.ToS(), Operators.EQUAL, (int)AttackEffects.KNOCKBACK))
                                       )
                             .WithCombo(new ComboWrapper(CharStates.ATTACK_STRONG.ToS(Suffixes.Teleport), 2)
                                        .WithCondition(new InputCondition(CharVars.FromInputMode(this.teleportInput).ToS(), Operators.EQUAL, InputModes.PRESS, InputModes.DOUBLE_TAP))
                                        .WithCondition(new IntCondition(CharVars.GENERIC_COUNTER.ToS(), Operators.LESS_THAN, this.maxTeleports))
                                        .WithCondition(new IntCondition(CharVars.ATTACK_EFFECT.ToS(), Operators.EQUAL, (int)AttackEffects.KNOCKBACK))
                                       )
                             ;
       return builder.Build();
 }