home *** CD-ROM | disk | FTP | other *** search
/ Champak 48 / cdrom_image.iso / Games / breakawish.swf / scripts / __Packages / PlayerPaddle.as < prev    next >
Encoding:
Text File  |  2007-09-28  |  11.7 KB  |  375 lines

  1. class PlayerPaddle extends Paddle
  2. {
  3.    var oKeyManager;
  4.    var oTransition;
  5.    var mcRef;
  6.    var bPaddleAffected;
  7.    var bStickedShot;
  8.    var bCalledEnd;
  9.    var bLevelEnd;
  10.    var nStartX;
  11.    var nStartY;
  12.    var bMagicWandAbility;
  13.    var bMoveLeft;
  14.    var bMoveRight;
  15.    var oPaddleAffectTimer;
  16.    var sTargetPaddleLength;
  17.    var bGotBall;
  18.    var nBallStickRemaining;
  19.    var bBallStickAbility;
  20.    var oTrappedBall;
  21.    var nTrappedXOffset;
  22.    var nTrappedYOffset;
  23.    var nMagicWandShotsRemaining;
  24.    static var sPADDLE_STATE_HIDDEN = "Hidden";
  25.    static var sPADDLE_STATE_NORMAL = "Normal";
  26.    static var sPADDLE_STATE_NORMAL_BOUNCE = "NormalBounce";
  27.    static var sPADDLE_STATE_SHORT = "Short";
  28.    static var sPADDLE_STATE_SHORT_BOUNCE = "ShortBounce";
  29.    static var sPADDLE_STATE_LARGE = "Large";
  30.    static var sPADDLE_STATE_LARGE_BOUNCE = "LargeBounce";
  31.    static var sPADDLE_STATE_LOSE = "Lose";
  32.    static var sPADDLE_STATE_LOSE_END = "LoseEnd";
  33.    static var sPADDLE_STATE_WIN = "Win";
  34.    static var sPADDLE_STATE_WIN_END = "WinEnd";
  35.    static var nBOLTS_OFFSET_X = 0;
  36.    static var nBOLTS_OFFSET_Y = -10;
  37.    static var nBALL_LAUNCH_SPEED_BASE = 5;
  38.    static var nBALL_SPAWN_X = 0;
  39.    static var nBALL_SPAWN_Y = -10;
  40.    static var nMOVE_SPEED = 8;
  41.    static var nSTICK_TRANSLATE_Y = 12;
  42.    function PlayerPaddle(_mcRef)
  43.    {
  44.       super(_mcRef);
  45.       this.oKeyManager = new Library.Utils.KeysManager();
  46.       this.oKeyManager.setListenerForKey(this,32);
  47.       this.oKeyManager.setListenerForKey(this,37);
  48.       this.oKeyManager.setListenerForKey(this,39);
  49.       this.oTransition = new Library.Transition(this.mcRef.mcTransition);
  50.       this.oTransition.Listener = this;
  51.       this.bPaddleAffected = false;
  52.       this.bStickedShot = false;
  53.       this.bCalledEnd = false;
  54.       this.bLevelEnd = false;
  55.       this.nStartX = this.mcRef._x;
  56.       this.nStartY = this.mcRef._y;
  57.       this.bMagicWandAbility = false;
  58.       this.setState(PlayerPaddle.sPADDLE_STATE_NORMAL);
  59.       LevelManager.Instance.doAddListener(this.oTransition);
  60.    }
  61.    function doResume()
  62.    {
  63.       super.doResume();
  64.       this.bMoveLeft = this.oKeyManager.isKeyDown(37);
  65.       this.bMoveRight = this.oKeyManager.isKeyDown(39);
  66.    }
  67.    function doEnterFrame()
  68.    {
  69.       super.doEnterFrame();
  70.       if(this.bPaddleAffected)
  71.       {
  72.          if(this.oPaddleAffectTimer.Time <= 0)
  73.          {
  74.             this.onPaddleGoesNormal();
  75.          }
  76.       }
  77.       if(this.bLevelEnd)
  78.       {
  79.          if(this.nStartX < this.mcRef._x - 5)
  80.          {
  81.             this.bMoveLeft = true;
  82.          }
  83.          else if(this.nStartX > this.mcRef._x + 5)
  84.          {
  85.             this.bMoveRight = true;
  86.          }
  87.          else
  88.          {
  89.             this.mcRef._x = this.nStartX;
  90.             if(!this.bCalledEnd)
  91.             {
  92.                LevelManager.Instance.onPaddleMovedCenter();
  93.             }
  94.             this.bCalledEnd = true;
  95.          }
  96.       }
  97.       this.doMove();
  98.    }
  99.    function onLevelEnded(_bWon)
  100.    {
  101.       this.bLevelEnd = true;
  102.       this.bMoveLeft = false;
  103.       this.bMoveRight = false;
  104.       if(this.bPaddleAffected)
  105.       {
  106.          this.sTargetPaddleLength = PlayerPaddle.sPADDLE_STATE_NORMAL;
  107.          this.oTransition.doStart();
  108.       }
  109.    }
  110.    function onKeyManagerEvent(_nEvent, _nCode)
  111.    {
  112.       if(!this.Paused && !this.bLevelEnd)
  113.       {
  114.          switch(_nEvent)
  115.          {
  116.             case Library.Utils.KeysManager.EVENT_KEY_DOWN:
  117.                switch(_nCode)
  118.                {
  119.                   case 37:
  120.                      this.bMoveLeft = true;
  121.                      break;
  122.                   case 39:
  123.                      this.bMoveRight = true;
  124.                      break;
  125.                   case 32:
  126.                }
  127.                break;
  128.             case Library.Utils.KeysManager.EVENT_KEY_UP:
  129.                switch(_nCode)
  130.                {
  131.                   case 37:
  132.                      this.bMoveLeft = false;
  133.                      break;
  134.                   case 39:
  135.                      this.bMoveRight = false;
  136.                      break;
  137.                   case 32:
  138.                      if(LevelManager.Instance.GameStarted)
  139.                      {
  140.                         if(this.bGotBall)
  141.                         {
  142.                            this.doLaunchBall();
  143.                         }
  144.                         else if(this.bMagicWandAbility)
  145.                         {
  146.                            this.onShootBolts();
  147.                         }
  148.                      }
  149.                }
  150.          }
  151.       }
  152.    }
  153.    function onBallSticks(_oBall)
  154.    {
  155.       this.nBallStickRemaining = this.nBallStickRemaining - 1;
  156.       if(this.nBallStickRemaining <= 0)
  157.       {
  158.          this.bBallStickAbility = false;
  159.          LevelManager.Instance.onChewingGumEnd();
  160.       }
  161.       this.bStickedShot = true;
  162.       this.bGotBall = true;
  163.       this.oTrappedBall = _oBall;
  164.       this.nTrappedXOffset = _oBall.Ref._x - this.Ref._x;
  165.       this.nTrappedYOffset = _oBall.Ref._y - this.Ref._y + PlayerPaddle.nSTICK_TRANSLATE_Y;
  166.       this.setTrappedPosition();
  167.       Library.Sound.SoundManager.doPlaySoundInCat(Main.sSOUND_CAT_SOUND,"Timmy_Sticks.mp3",50);
  168.    }
  169.    function onMagicWandCatch()
  170.    {
  171.       this.bMagicWandAbility = true;
  172.       this.nMagicWandShotsRemaining = LevelDesignItem.nBONUS_MAGICWAND_SHOTS;
  173.       this.doUpdateBoltsIndicator();
  174.    }
  175.    function onChewingGumCatch()
  176.    {
  177.       this.bBallStickAbility = true;
  178.       this.nBallStickRemaining = LevelDesignItem.nBONUS_CHEWINGGUM_HITS;
  179.    }
  180.    function onChewingGumEnd()
  181.    {
  182.       this.bBallStickAbility = false;
  183.       this.nBallStickRemaining = 0;
  184.    }
  185.    function onPaddleResize(_sTargetLength)
  186.    {
  187.       this.bPaddleAffected = true;
  188.       this.oPaddleAffectTimer = new Library.Utils.Timer();
  189.       this.oPaddleAffectTimer.Method = Library.Utils.Timer.TIMER_COUNT_DOWN;
  190.       LevelManager.Instance.doAddListener(this.oPaddleAffectTimer);
  191.       switch(_sTargetLength)
  192.       {
  193.          case PlayerPaddle.sPADDLE_STATE_SHORT:
  194.             this.oPaddleAffectTimer.setTime(LevelDesignItem.nPOWERDOWN_JACKBOX_TIME);
  195.             break;
  196.          case PlayerPaddle.sPADDLE_STATE_LARGE:
  197.             this.oPaddleAffectTimer.setTime(LevelDesignItem.nBONUS_TRAMPOLINE_TIME);
  198.       }
  199.       this.oPaddleAffectTimer.doStartTimer();
  200.       if(this.CurrentState.indexOf(_sTargetLength) == -1)
  201.       {
  202.          this.sTargetPaddleLength = _sTargetLength;
  203.          this.oTransition.doStart();
  204.       }
  205.    }
  206.    function onTransitionEvent(_nEvent, _oTransition)
  207.    {
  208.       switch(_nEvent)
  209.       {
  210.          case Library.Transition.TRANSITION_SCREEN_COVERED:
  211.             this.setState(this.sTargetPaddleLength);
  212.             this.doMove();
  213.             break;
  214.          case Library.Transition.TRANSITION_COMPLETE:
  215.       }
  216.    }
  217.    function doGetBall()
  218.    {
  219.       this.bGotBall = true;
  220.       this.bStickedShot = false;
  221.       this.oTrappedBall = LevelManager.Instance.getNewBall();
  222.       this.nTrappedXOffset = PlayerPaddle.nBALL_SPAWN_X;
  223.       this.nTrappedYOffset = PlayerPaddle.nBALL_SPAWN_Y;
  224.       this.setTrappedPosition();
  225.    }
  226.    function doDestroy()
  227.    {
  228.       this.oKeyManager.doDestroy();
  229.       delete this.oKeyManager;
  230.       delete this.oTrappedBall;
  231.       delete this.oPaddleAffectTimer;
  232.       LevelManager.Instance.doRemoveListener(this.oTransition);
  233.       super.doDestroy();
  234.    }
  235.    function doNormalBounce()
  236.    {
  237.       if(this.isStateComplete())
  238.       {
  239.          this.setState(PlayerPaddle.sPADDLE_STATE_NORMAL);
  240.       }
  241.    }
  242.    function doShortBounce()
  243.    {
  244.       if(this.isStateComplete())
  245.       {
  246.          this.setState(PlayerPaddle.sPADDLE_STATE_SHORT);
  247.       }
  248.    }
  249.    function doLargeBounce()
  250.    {
  251.       if(this.isStateComplete())
  252.       {
  253.          this.setState(PlayerPaddle.sPADDLE_STATE_LARGE);
  254.       }
  255.    }
  256.    function onPaddleGoesNormal()
  257.    {
  258.       this.bPaddleAffected = false;
  259.       LevelManager.Instance.doRemoveListener(this.oPaddleAffectTimer);
  260.       delete this.oPaddleAffectTimer;
  261.       this.sTargetPaddleLength = PlayerPaddle.sPADDLE_STATE_NORMAL;
  262.       this.oTransition.doStart();
  263.    }
  264.    function doLaunchBall()
  265.    {
  266.       if(this.oTrappedBall.CurrentState != MainBall.sSTATE_APPEARS)
  267.       {
  268.          var _loc2_ = undefined;
  269.          if(this.bStickedShot)
  270.          {
  271.             var _loc7_ = this.oTrappedBall.Ref._x - this.Ref._x;
  272.             var _loc8_ = (Math.abs(this.StateBounds.xMin) + Math.abs(this.StateBounds.xMax)) / 2;
  273.             var _loc5_ = _loc7_ / _loc8_;
  274.             var _loc3_ = (Paddle.nBALL_LAUNCH_ANGLE_MAX - Paddle.nBALL_LAUNCH_ANGLE_MIN) / 2;
  275.             var _loc6_ = Paddle.nBALL_LAUNCH_ANGLE_MIN + _loc3_;
  276.             _loc2_ = _loc6_ + _loc3_ * _loc5_;
  277.          }
  278.          else
  279.          {
  280.             _loc2_ = Library.Utils.MoreMath.getRandomRange(Paddle.nBALL_LAUNCH_ANGLE_MIN,Paddle.nBALL_LAUNCH_ANGLE_MAX);
  281.          }
  282.          var _loc4_ = PlayerPaddle.nBALL_LAUNCH_SPEED_BASE + Game.Instance.Status.SpeedAddon;
  283.          this.oTrappedBall.setAngle(_loc2_);
  284.          this.oTrappedBall.setSpeed(_loc4_);
  285.          this.bGotBall = false;
  286.          this.onPaddleBounce();
  287.          Library.Sound.SoundManager.doPlaySoundInCat(Main.sSOUND_CAT_SOUND,"Timmy_InitialShot.mp3");
  288.          delete this.oTrappedBall;
  289.       }
  290.    }
  291.    function onShootBolts()
  292.    {
  293.       this.nMagicWandShotsRemaining = this.nMagicWandShotsRemaining - 1;
  294.       if(this.nMagicWandShotsRemaining <= 0)
  295.       {
  296.          this.bMagicWandAbility = false;
  297.       }
  298.       this.doUpdateBoltsIndicator();
  299.       LevelManager.Instance.doNewBolt(this.Ref._x + PlayerPaddle.nBOLTS_OFFSET_X,this.Ref._y + PlayerPaddle.nBOLTS_OFFSET_Y);
  300.    }
  301.    function setTrappedPosition()
  302.    {
  303.       this.oTrappedBall.setPosition(this.mcRef._x + this.nTrappedXOffset,this.mcRef._y + this.nTrappedYOffset);
  304.    }
  305.    function onPaddleBounce()
  306.    {
  307.       if(this.bGotBall)
  308.       {
  309.          this.doLaunchBall();
  310.       }
  311.       switch(this.CurrentState)
  312.       {
  313.          case PlayerPaddle.sPADDLE_STATE_NORMAL:
  314.          case PlayerPaddle.sPADDLE_STATE_SHORT:
  315.          case PlayerPaddle.sPADDLE_STATE_LARGE:
  316.             this.setState(this.CurrentState + "Bounce");
  317.       }
  318.    }
  319.    function doMove()
  320.    {
  321.       var _loc3_ = 0;
  322.       if(this.bMoveLeft)
  323.       {
  324.          _loc3_ -= PlayerPaddle.nMOVE_SPEED;
  325.       }
  326.       if(this.bMoveRight)
  327.       {
  328.          _loc3_ += PlayerPaddle.nMOVE_SPEED;
  329.       }
  330.       if(_loc3_ != 0)
  331.       {
  332.          var _loc2_ = this.mcRef._x + _loc3_;
  333.          switch(Library.Utils.MoreMath.getPolarity(_loc3_))
  334.          {
  335.             case 1:
  336.                if(_loc2_ + this.StateBounds.xMax > LevelManager.nLIMITS_RIGHT)
  337.                {
  338.                   _loc2_ = LevelManager.nLIMITS_RIGHT - this.StateBounds.xMax;
  339.                }
  340.                break;
  341.             case -1:
  342.                if(_loc2_ + this.StateBounds.xMin < LevelManager.nLIMITS_LEFT)
  343.                {
  344.                   _loc2_ = LevelManager.nLIMITS_LEFT - this.StateBounds.xMin;
  345.                }
  346.          }
  347.          this.mcRef._x = _loc2_;
  348.       }
  349.       if(this.bGotBall)
  350.       {
  351.          this.setTrappedPosition();
  352.       }
  353.    }
  354.    function doLoadStateAction()
  355.    {
  356.       super.doLoadStateAction();
  357.       this.doUpdateBoltsIndicator();
  358.    }
  359.    function doUpdateBoltsIndicator()
  360.    {
  361.       if(this.bMagicWandAbility)
  362.       {
  363.          this.mcRef.mcState.mcBolts1._visible = true;
  364.          this.mcRef.mcState.mcBolts1.txtNum.text = this.nMagicWandShotsRemaining;
  365.          this.mcRef.mcState.mcBolts2._visible = true;
  366.          this.mcRef.mcState.mcBolts2.txtNum.text = this.nMagicWandShotsRemaining;
  367.       }
  368.       else
  369.       {
  370.          this.mcRef.mcState.mcBolts1._visible = false;
  371.          this.mcRef.mcState.mcBolts2._visible = false;
  372.       }
  373.    }
  374. }
  375.