
        if (weapon.getShip().getFluxTracker().isOverloadedOrVenting() || !weapon.getShip().isAlive()) {
            stabbing = 0;
            return;
        }
        if(!stabRunOnce){
            //纪录戳戳前武器中心Y
            stabStartCenterY = weapon.getSprite().getHeight()/2;
            stabRunOnce = true;
        }
        boolean isChargeUp = weapon.getChargeLevel() > 0 && weapon.getCooldownRemaining() == 0;
        float actionTime = StabWeaponActionTime.get(weapon.getId());
        ShipAPI ship = weapon.getShip();
        //————
        float magicNumberOF_CHARGE = 0.5f;
        if (WEAPON_MAGIC_NUMBER.get(weapon.getId()) != null) {
            magicNumberOF_CHARGE = WEAPON_MAGIC_NUMBER.get(weapon.getId());
        }
        if (isChargeUp && weapon.getChargeLevel() > 1 - (magicNumberOF_CHARGE * actionTime)) {
            isChargeUp = false; //
        }

        float shipFacing = weapon.getShip().getFacing();
        if (stabbing <= 0) {
            if (isChargeUp) {
                stabbing = actionTime;
                stabMovementOffsetY = Math.min(
                        StabWeaponBrandishMove_MAX.get(weapon.getId()),
                        stabMovementOffsetY + StabWeaponBrandishMove.get(weapon.getId()));
            }
        }
        //戳戳力回复
        stabMovementOffsetY = Math.max(0, stabMovementOffsetY - StabWeaponBrandishMove_RECOVER.get(weapon.getId()) * amount);
        boolean noTurn = false;

        //stabbing > 0 的时候意味着正在戳戳
        if (stabbing > 0) {
            noTurn = true; //锁定武器不允许自动转向
            float angle;
            if (isChargeUp) { //当处于预热阶段
                // 从表中读取抬手的最大偏转角度，乘上chargeLevel的大小，叠加到武器点击开火时纪录的cutStartAlgle上
                angle = CutWeaponChargeUpAngle.get(weapon.getId()) * weapon.getChargeLevel();
                facingRecorder = angle;
                angle+=  cutStartAlgle + shipFacing;;
                //即时纪录武器相对初始抬手位置的相对角度，当抬手阶段结束的时候，这个值就是抬手到最高的角度
            } else {//戳击阶段
                cutting = Math.max(0, cutting - amount);
                float level = cutting/actionTime;
                float t = CutWeaponChargeDownAngle.get(weapon.getId());
                angle = facingRecorder-t ;//抬手角与劈砍目标角中间的差距值
                angle *= level; //乘上劈砍进度
                angle = normalizeAngle(angle + t + shipFacing + cutStartAlgle);
                //————不同武器需进行客制化————
            }
            weapon.setCurrAngle(angle);
            //      engine.addFloatingText(weapon.getShip().getLocation(),text,50, Color.red,weapon.getShip(),0,0);
        }
        if (rebound > 0) {
            noTurn = true;
            recoil = Math.max(0, recoil - RECOIL_RECOVER.get(weapon.getId()) * amount);
            //我用的后坐力不是图片长度百分比，而是像素长度
            if (weapon.getBarrelSpriteAPI() != null) {
                barrelSprite.setCenterY(barrelHeight + recoil);
            }
            mainSprite.setCenterY(mainHeight + recoil);

            weapon.setCurrAngle(normalizeAngle(amount * CutWeaponRebound.get(weapon.getId()) * rebound + weapon.getCurrAngle()));
            rebound -= recover * amount;
            //    Global.getCombatEngine().addFloatingText(weapon.getShip().getLocation(), "reboundForce" + rebound, 50, Color.red, weapon.getShip(), 0, 0);
        }
        weapon.setSuspendAutomaticTurning(noTurn);

         */