| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #include "Player.h"
- #include "Game.h"
- #include "res.h"
- #include "Joystick.h"
- #include "Rocket.h"
- Player::Player(): _lastRocketSpawn(0)
- {
- }
- void Player::_init()
- {
- //initialize player's ship
- _view->setPosition(_game->getSize() / 2);
- _ship = new Sprite;
- _ship->setResAnim(res::ui.getResAnim("ship"));
- _ship->attachTo(_view);
- _ship->setAnchor(Vector2(0.5f, 0.5f));
- _engine = new Sprite;
- _engine->setResAnim(res::ui.getResAnim("shipengine"));
- _engine->attachTo(_ship);
- //animate engine's fire
- _engine->addTween(Sprite::TweenColor(Color::Red), 500, -1, true);
- //by default it is hidden
- //and would be visible only if ship moves
- _engine->setVisible(false);
- }
- void Player::_update(const UpdateState& us)
- {
- _engine->setVisible(false);
- Vector2 dir;
- if (_game->_move->getDirection(dir))
- {
- //update player position according to delta time and finger direction from virtual joystick
- Vector2 pos = _view->getPosition();
- pos = pos + dir * (us.dt / 1000.0f) * 5;
- _view->setPosition(pos);
- //rotate it
- float angle = atan2f(dir.y, dir.x);
- _view->setRotation(angle);
- //if player moves show engine's fire
- _engine->setVisible(true);
- }
- if (_game->_fire->getDirection(dir))
- {
- //fire rockets each 300 ms
- if (_lastRocketSpawn + 300 < us.time)
- {
- _lastRocketSpawn = us.time;
- dir.normalize();
- //create rocket
- spRocket rocket = new Rocket(dir);
- rocket->init(_view->getPosition(), _game);
- }
- }
- }
|