void Creature::onWalk() { if (getWalkDelay() <= 0) { Direction dir; uint32_t flags = FLAG_IGNOREFIELDDAMAGE; if (getNextStep(dir, flags)) { ReturnValue ret = g_game.internalMoveCreature(this, dir, flags); if (ret != RETURNVALUE_NOERROR) { if (Player* player = getPlayer()) { player->sendCancelMessage(ret); player->sendCancelWalk(); } forceUpdateFollowPath = true; } } else { if (listWalkDir.empty()) { onWalkComplete(); } stopEventWalk(); } } if (cancelNextWalk) { listWalkDir.clear(); onWalkAborted(); cancelNextWalk = false; } if (eventWalk != 0) { eventWalk = 0; addEventWalk(); } }
task main() { initReadMode("auton.txt", 1024); int nSteps = getSteps(); for(int i = 0; i < nSteps; i++) { int* stps = getNextStep(); for(int m = 0; m < 5; m++) { nMotorEncoder[mtrs[m]] = 0; nMotorEncoderTarget[mtrs[m]] = stps[m]; motor[mtrs[m]] = 80 * sgn(stps[m]); } for(int s = 0; s < 2; s++) { servo[servos[s]] = stps[s+6]; } motor[ScissorLeft] = 80 * sgn(stps[5]); while(nMotorRunState[ScissorRight] != IDLE) {}; motor[ScissorLeft] = 0; } moveArm(); }
void Creature::onWalk() { if(getWalkDelay() <= 0) { Direction dir; uint32_t flags = FLAG_IGNOREFIELDDAMAGE; if(!getNextStep(dir, flags)) { if(listWalkDir.empty()) onWalkComplete(); stopEventWalk(); } else if(g_game.internalMoveCreature(this, dir, flags) != RET_NOERROR) forceUpdateFollowPath = true; } if(cancelNextWalk) { cancelNextWalk = false; listWalkDir.clear(); onWalkAborted(); } if(eventWalk) { eventWalk = 0; addEventWalk(); } }
QList<WaysMap::Coordinate> WaysMap::getWay() { QList<WaysMap::Coordinate> way; if (map.contains(end)){ way.append(end); while (way.first() != start){ way.push_front(getNextStep(way.first())); } } return way; }
void Creature::onWalk() { if(getWalkDelay() <= 0) { Direction dir; uint32_t flags = FLAG_IGNOREFIELDDAMAGE; if(getNextStep(dir, flags) && g_game.internalMoveCreature(this, dir, flags) != RET_NOERROR) forceUpdateFollowPath = true; } if(listWalkDir.empty()) onWalkComplete(); if(eventWalk) { eventWalk = 0; addEventWalk(); } }
bool AdActor::update() { _currentSprite = nullptr; if (_state == STATE_READY) { if (_animSprite) { delete _animSprite; _animSprite = nullptr; } if (_animSprite2) { _animSprite2 = nullptr; } } // finished playing animation? if (_state == STATE_PLAYING_ANIM && _animSprite != nullptr && _animSprite->isFinished()) { _state = _nextState; _nextState = STATE_READY; _currentSprite = _animSprite; } if (_state == STATE_PLAYING_ANIM_SET && _animSprite2 != nullptr && _animSprite2->isFinished()) { _state = _nextState; _nextState = STATE_READY; _currentSprite = _animSprite2; } if (_sentence && _state != STATE_TALKING) { _sentence->finish(); } // default: stand animation if (!_currentSprite) { if (_sprite) { _currentSprite = _sprite; } else { if (_standSprite) { _currentSprite = _standSprite->getSprite(_dir); } else { AdSpriteSet *anim = getAnimByName(_idleAnimName); if (anim) { _currentSprite = anim->getSprite(_dir); } } } } bool already_moved = false; switch (_state) { ////////////////////////////////////////////////////////////////////////// case STATE_PLAYING_ANIM: _currentSprite = _animSprite; break; ////////////////////////////////////////////////////////////////////////// case STATE_PLAYING_ANIM_SET: _currentSprite = _animSprite2; break; ////////////////////////////////////////////////////////////////////////// case STATE_TURNING_LEFT: if (_tempSprite2 == nullptr || _tempSprite2->isFinished()) { if (_dir > 0) { _dir = (TDirection)(_dir - 1); } else { _dir = (TDirection)(NUM_DIRECTIONS - 1); } if (_dir == _targetDir) { _tempSprite2 = nullptr; _state = _nextState; _nextState = STATE_READY; } else { if (_turnLeftSprite) { _tempSprite2 = _turnLeftSprite->getSprite(_dir); } else { AdSpriteSet *anim = getAnimByName(_turnLeftAnimName); if (anim) { _tempSprite2 = anim->getSprite(_dir); } } if (_tempSprite2) { _tempSprite2->reset(); if (_tempSprite2->_looping) { _tempSprite2->_looping = false; } } _currentSprite = _tempSprite2; } } else { _currentSprite = _tempSprite2; } break; ////////////////////////////////////////////////////////////////////////// case STATE_TURNING_RIGHT: if (_tempSprite2 == nullptr || _tempSprite2->isFinished()) { _dir = (TDirection)(_dir + 1); if ((int)_dir >= (int)NUM_DIRECTIONS) { _dir = (TDirection)(0); } if (_dir == _targetDir) { _tempSprite2 = nullptr; _state = _nextState; _nextState = STATE_READY; } else { if (_turnRightSprite) { _tempSprite2 = _turnRightSprite->getSprite(_dir); } else { AdSpriteSet *anim = getAnimByName(_turnRightAnimName); if (anim) { _tempSprite2 = anim->getSprite(_dir); } } if (_tempSprite2) { _tempSprite2->reset(); if (_tempSprite2->_looping) { _tempSprite2->_looping = false; } } _currentSprite = _tempSprite2; } } else { _currentSprite = _tempSprite2; } break; ////////////////////////////////////////////////////////////////////////// case STATE_SEARCHING_PATH: // keep asking scene for the path if (((AdGame *)_gameRef)->_scene->getPath(BasePoint(_posX, _posY), *_targetPoint, _path, this)) { _state = STATE_WAITING_PATH; } break; ////////////////////////////////////////////////////////////////////////// case STATE_WAITING_PATH: // wait until the scene finished the path if (_path->_ready) { followPath(); } break; ////////////////////////////////////////////////////////////////////////// case STATE_FOLLOWING_PATH: getNextStep(); already_moved = true; break; ////////////////////////////////////////////////////////////////////////// case STATE_TALKING: { _sentence->update(_dir); if (_sentence->_currentSprite) { _tempSprite2 = _sentence->_currentSprite; } bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime); if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) { if (timeIsUp) { _sentence->finish(); _tempSprite2 = nullptr; _state = _nextState; _nextState = STATE_READY; } else { _tempSprite2 = getTalkStance(_sentence->getNextStance()); if (_tempSprite2) { _tempSprite2->reset(); _currentSprite = _tempSprite2; ((AdGame *)_gameRef)->addSentence(_sentence); } } } else { _currentSprite = _tempSprite2; ((AdGame *)_gameRef)->addSentence(_sentence); } } break; ////////////////////////////////////////////////////////////////////////// case STATE_READY: if (!_animSprite && !_animSprite2) { if (_sprite) { _currentSprite = _sprite; } else { if (_standSprite) { _currentSprite = _standSprite->getSprite(_dir); } else { AdSpriteSet *anim = getAnimByName(_idleAnimName); if (anim) { _currentSprite = anim->getSprite(_dir); } } } } break; default: error("AdActor::Update - Unhandled enum"); } if (_currentSprite && !already_moved) { _currentSprite->getCurrentFrame(_zoomable ? ((AdGame *)_gameRef)->_scene->getZoomAt(_posX, _posY) : 100, _zoomable ? ((AdGame *)_gameRef)->_scene->getZoomAt(_posX, _posY) : 100); if (_currentSprite->isChanged()) { _posX += _currentSprite->_moveX; _posY += _currentSprite->_moveY; afterMove(); } } //_gameRef->QuickMessageForm("%s", _currentSprite->_filename); updateBlockRegion(); _ready = (_state == STATE_READY); updatePartEmitter(); updateSpriteAttachments(); return STATUS_OK; }