bool CGUIDialogTextViewer::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_INIT: { CGUIDialog::OnMessage(message); SetHeading(); SetText(); return true; } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_UPDATE) { SetText(); SetHeading(); return true; } } break; default: break; } return CGUIDialog::OnMessage(message); }
int CGUIDialogYesNo::ShowAndGetInput(const KODI::MESSAGING::HELPERS::DialogYesNoMessage& options) { //Set default yes/no labels, these might be overwritten further down if specified //by the caller SetChoice(0, 106); SetChoice(1, 107); if (!options.heading.isNull()) SetHeading(options.heading); if (!options.text.isNull()) SetText(options.text); if (!options.noLabel.isNull()) SetChoice(0, options.noLabel); if (!options.yesLabel.isNull()) SetChoice(1, options.yesLabel); if (options.autoclose > 0) SetAutoClose(options.autoclose); m_bCanceled = false; for (size_t i = 0; i < 3; ++i) { if (!options.lines[i].isNull()) SetLine(i, options.lines[i]); } Open(); if (m_bCanceled) return -1; return IsConfirmed() ? 1 : 0; }
void CUICellItem::Update() { if (m_pParentList) EnableHeading(m_pParentList->GetVerticalPlacement()); if(Heading()) { SetHeading ( 90.0f * (PI/180.0f) ); SetHeadingPivot (Fvector2().set(0.0f,0.0f), Fvector2().set(0.0f,GetWndSize().y), true); }else ResetHeadingPivot (); inherited::Update(); if ( CursorOverWindow() ) { Frect clientArea; m_pParentList->GetClientArea(clientArea); Fvector2 cp = GetUICursor()->GetCursorPosition(); if(clientArea.in(cp)) GetMessageTarget()->SendMessage(this, DRAG_DROP_ITEM_FOCUSED_UPDATE, NULL); } m_b_already_drawn=false; }
void CUIZoneMap::Update() { CActor* pActor = smart_cast<CActor*>( Level().CurrentViewEntity() ); if ( !pActor ) return; if ( !( Device.dwFrame % 20 ) && IsGameTypeSingle() ) { string16 text_str; xr_strcpy( text_str, sizeof(text_str), "" ); CPda* pda = pActor->GetPDA(); if ( pda ) { u32 cn = pda->ActiveContactsNum(); if ( cn > 0 ) { xr_sprintf( text_str, sizeof(text_str), "%d", cn ); } } m_Counter_text.SetText( text_str ); } UpdateRadar( Device.vCameraPosition ); float h, p; Device.vCameraDirection.getHP( h, p ); SetHeading( -h ); m_clock_wnd->TextItemControl()->SetText( InventoryUtilities::GetGameTimeAsString( InventoryUtilities::etpTimeToMinutes ).c_str() ); }
void CGUIDialogLockSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); // set the title if (m_getUser) SetHeading(StringUtils::Format(g_localizeStrings.Get(20152).c_str(), CURL::Decode(m_url).c_str())); else { SetHeading(20066); setLockCodeLabel(); setDetailSettingsEnabled(m_locks.mode != LOCK_MODE_EVERYONE); } SET_CONTROL_HIDDEN(CONTROL_SETTINGS_CUSTOM_BUTTON); SET_CONTROL_LABEL(CONTROL_SETTINGS_OKAY_BUTTON, 186); SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 222); }
void CGUIDialogNetworkSetup::SetupView() { CGUIDialogSettingsManualBase::SetupView(); SetHeading(1007); SET_CONTROL_HIDDEN(CONTROL_SETTINGS_CUSTOM_BUTTON); SET_CONTROL_LABEL(CONTROL_SETTINGS_OKAY_BUTTON, 186); SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 222); }
void CGUIDialogAudioSubtitleSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); SetHeading(13396); SET_CONTROL_HIDDEN(CONTROL_SETTINGS_OKAY_BUTTON); SET_CONTROL_HIDDEN(CONTROL_SETTINGS_CUSTOM_BUTTON); SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 15067); }
void CGUIDialogCMSSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); SetHeading(36560); SET_CONTROL_HIDDEN(CONTROL_SETTINGS_OKAY_BUTTON); SET_CONTROL_HIDDEN(CONTROL_SETTINGS_CUSTOM_BUTTON); SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 15067); }
void CGUIDialogLockSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); // set the title if (m_getUser) { int string = 20152; if (m_getModule) string = 24149; SetHeading(StringUtils::Format(g_localizeStrings.Get(string).c_str(), CURL::Decode(m_url).c_str())); } else { SetHeading(20066); setLockCodeLabel(); setDetailSettingsEnabled(m_locks.mode != LOCK_MODE_EVERYONE); } }
void PositionCamera(OBJECTINFO *Info,C_Window *win,long client) { if(!gUIViewer || !Info || !win) return; FindCameraDeltas(Info); SetHeading(win); gUIViewer->SetCamera(Info->DeltaX,Info->DeltaY,Info->DeltaZ,Info->Heading,-Info->Pitch,0.0f); win->RefreshClient(client); }
void Monster::ProcessMovement(const D3DXVECTOR2 playerPosition) { // Calculate the distance X and Y between monster and its target. distanceX = playerPosition.x - position.x; distanceY = playerPosition.y - position.y; // Check/Adjust Heading and move. if (abs(distanceX) > abs(distanceY)) // Easier to close in on the x axis { // Check heading if (distanceX > 0) // if distance X is positive { // Adjust heading to East SetHeading(East); position.x += walkingSpeed; } else { // Adjust heading to West SetHeading(West); position.x -= walkingSpeed; } } else { // Check heading if (distanceY > 0) { // Adjust heading to North SetHeading(North); position.y += walkingSpeed; } else { // Adjust heading to South SetHeading(South); position.y -= walkingSpeed; } } walkingSound->Play(); } // End of ProcessMovement function.
// ------------------------------------------------------------------------------------------------ void ProjectileBase :: SetState(Uint32 setOwnerPlayerId, Vector2df setPos, Vector2df setHeading, float setSpeed, float setLife, Uint32 setHealth, bool setIsMoving) { SetOwnerPlayerId(setOwnerPlayerId); SetPos(setPos); SetHeading(setHeading); SetSpeed(setSpeed); SetLife(setLife); SetHealth(setHealth); SetIsMoving(setIsMoving); } // ----------------------------------------------------------------------------------------------
void PlayerInstance :: UpdateRotation() { ICursorControl* cursorControl = IRR->device->getCursorControl(); position2d<f32> cursorPos = cursorControl->getRelativePosition(); static float rotateSpeed = 4.0f; if(firstRot) // it checks if it is the first time camera rotates and than fill tables with proper values { rotX[0] = rotX[1] = 0.5f - cursorPos.X; rotY[0] = rotY[1] = 0.5f - cursorPos.Y; firstRot = false; } // puts values from this frame into table rotX[2] = 0.5f - cursorPos.X; rotY[2] = 0.5f - cursorPos.Y; // If any change in cursorPos this frame: if (cursorPos.X < 0.5 || cursorPos.X > 0.5 || cursorPos.Y < 0.5 || cursorPos.Y > 0.5 ) { // Rotate Y Axis: yRotation -= (rotX[0]+rotX[1]+rotX[2])/3 * rotateSpeed; // Rotate X Axis: xRotation -= (rotY[0]+rotY[1]+rotY[2])/3 * rotateSpeed; // Restrict X Axis: if(xRotation > PI/2.1f) xRotation = PI/2.1f; if(xRotation < -PI/2.1f) xRotation = -PI/2.1f; cursorControl->setPosition(0.5f, 0.5f); rotX[0] = rotX[1]; // finaly we move values to make room for a new ones rotX[1] = rotX[2]; rotY[0] = rotY[1]; rotY[1] = rotY[2]; } lookAtHeading = IRR->RotateVectorAboutVector(vector3df(1,0,0), vector3df(0,1,0), yRotation); vector3df newTangent = lookAtHeading.crossProduct(vector3df(0,-1,0)); newTangent.Y = 0; newTangent.normalize(); lookAtHeading = IRR->RotateVectorAboutVector(lookAtHeading, newTangent, xRotation); // + camRecoil.X camUp = lookAtHeading.crossProduct(newTangent); SetHeading(vector3df(lookAtHeading.X, 0, lookAtHeading.Z)); }
void NPC::NextGuardPosition() { if (!CalculateNewPosition2(m_GuardPoint.x, m_GuardPoint.y, m_GuardPoint.z, GetMovespeed())) { SetHeading(m_GuardPoint.w); Log.Out(Logs::Detail, Logs::AI, "Unable to move to next guard position. Probably rooted."); } else if((m_Position.x == m_GuardPoint.x) && (m_Position.y == m_GuardPoint.y) && (m_Position.z == m_GuardPoint.z)) { if(moved) { moved = false; SetCurrentSpeed(0); } } }
void CGUIDialogProfileSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); // set the heading SetHeading(!m_showDetails ? 20255 : 20067); // set the profile name and directory updateProfileName(); updateProfileDirectory(); // set the image SET_CONTROL_FILENAME(CONTROL_PROFILE_IMAGE, !m_thumb.empty() ? m_thumb : m_defaultImage); }
void CGUIDialogProfileSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); // set the heading SetHeading(!m_showDetails ? 20255 : 20067); SET_CONTROL_HIDDEN(CONTROL_SETTINGS_CUSTOM_BUTTON); SET_CONTROL_LABEL(CONTROL_SETTINGS_OKAY_BUTTON, 186); SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 222); // set the profile image and directory UpdateProfileImage(); updateProfileDirectory(); }
bool CGUIDialogOK::ShowAndGetInput(const HELPERS::DialogOKMessage & options) { if (!options.heading.isNull()) SetHeading(options.heading); if (!options.text.isNull()) SetText(options.text); for (size_t i = 0; i < 3; ++i) { if (!options.lines[i].isNull()) SetLine(i, options.lines[i]); } Open(); return IsConfirmed(); }
void NPC::NextGuardPosition() { if (!CalculateNewPosition2(guard_x, guard_y, guard_z, GetMovespeed())) { SetHeading(guard_heading); mlog(AI__WAYPOINTS, "Unable to move to next guard position. Probably rooted."); } else if((x_pos == guard_x) && (y_pos == guard_y) && (z_pos == guard_z)) { if(moved) { moved=false; SetMoving(false); SendPosition(); } } }
void CUICellItem::Update() { if (m_pParentList) EnableHeading(m_pParentList->GetVerticalPlacement()); if(Heading()) { SetHeading ( 90.0f * (PI/180.0f) ); SetHeadingPivot (Fvector2().set(0.0f,0.0f), Fvector2().set(0.0f,GetWndSize().y), true); }else ResetHeadingPivot (); inherited::Update(); m_b_already_drawn=false; }
void CGUIDialogAddonSettings::SetupView() { if (m_addon == nullptr || m_addon->GetSettings() == nullptr) return; auto settings = m_addon->GetSettings(); if (!settings->IsLoaded()) return; CGUIDialogSettingsManagerBase::SetupView(); // set heading SetHeading(StringUtils::Format("$LOCALIZE[10004] - %s", m_addon->Name().c_str())); // "Settings - AddonName" // set control labels SET_CONTROL_LABEL(CONTROL_SETTINGS_OKAY_BUTTON, 186); SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 222); SET_CONTROL_LABEL(CONTROL_SETTINGS_CUSTOM_BUTTON, 409); }
void CGUIDialogVisualisationPresetList::SetVisualisation(CGUIVisualisationControl* vis) { m_viz = vis; Reset(); if (m_viz) { SetUseDetails(false); SetMultiSelection(false); SetHeading(CVariant{StringUtils::Format(g_localizeStrings.Get(13407).c_str(), m_viz->Name().c_str())}); std::vector<std::string> presets; if (m_viz->GetPresetList(presets)) { for (const auto& preset : presets) { CFileItem item(preset); item.RemoveExtension(); Add(item); } SetSelected(m_viz->GetActivePreset()); } } }
void CUICellItem::Update() { EnableHeading(m_pParentList->GetVerticalPlacement()); if(Heading()) { SetHeading ( 90.0f * (PI/180.0f) ); SetHeadingPivot (Fvector2().set(0.0f,0.0f), Fvector2().set(0.0f,GetWndSize().y), true); }else ResetHeadingPivot (); inherited::Update(); if ( CursorOverWindow() ) { Frect clientArea; m_pParentList->GetClientArea(clientArea); Fvector2 cp = GetUICursor().GetCursorPosition(); if(clientArea.in(cp)) GetMessageTarget()->SendMessage(this, DRAG_DROP_ITEM_FOCUSED_UPDATE, NULL); } PIItem item = (PIItem)m_pData; if ( item ) { m_has_upgrade = item->has_any_upgrades(); // Fvector2 size = GetWndSize(); // Fvector2 up_size = m_upgrade->GetWndSize(); // pos.x = size.x - up_size.x - 4.0f; Fvector2 pos; pos.set( m_upgrade_pos ); if ( ChildsCount() ) { pos.x += m_text->GetWndSize().x + 2.0f; } m_upgrade->SetWndPos( pos ); } m_upgrade->Show( m_has_upgrade ); }
bool Mob::CalculateNewPosition(float x, float y, float z, float speed, bool checkZ) { if(GetID()==0) return true; float nx = x_pos; float ny = y_pos; float nz = z_pos; // if NPC is rooted if (speed == 0.0) { SetHeading(CalculateHeadingToTarget(x, y)); if(moved){ SendPosition(); SetMoving(false); moved=false; } SetRunAnimSpeed(0); mlog(AI__WAYPOINTS, "Rooted while calculating new position to (%.3f, %.3f, %.3f)", x, y, z); return true; } float old_test_vector=test_vector; tar_vx = x - nx; tar_vy = y - ny; tar_vz = z - nz; if (tar_vx == 0 && tar_vy == 0) return false; pRunAnimSpeed = (uint8)(speed*NPC_RUNANIM_RATIO); speed *= NPC_SPEED_MULTIPLIER; mlog(AI__WAYPOINTS, "Calculating new position to (%.3f, %.3f, %.3f) vector (%.3f, %.3f, %.3f) rate %.3f RAS %d", x, y, z, tar_vx, tar_vy, tar_vz, speed, pRunAnimSpeed); // -------------------------------------------------------------------------- // 2: get unit vector // -------------------------------------------------------------------------- test_vector=sqrtf (x*x + y*y + z*z); tar_vector = speed / sqrtf (tar_vx*tar_vx + tar_vy*tar_vy + tar_vz*tar_vz); heading = CalculateHeadingToTarget(x, y); if (tar_vector >= 1.0) { if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), x, y, z); } x_pos = x; y_pos = y; z_pos = z; mlog(AI__WAYPOINTS, "Close enough, jumping to waypoint"); } else { float new_x = x_pos + tar_vx*tar_vector; float new_y = y_pos + tar_vy*tar_vector; float new_z = z_pos + tar_vz*tar_vector; if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z); } x_pos = new_x; y_pos = new_y; z_pos = new_z; mlog(AI__WAYPOINTS, "Next position (%.3f, %.3f, %.3f)", x_pos, y_pos, z_pos); } uint8 NPCFlyMode = 0; if(IsNPC()) { if(CastToNPC()->GetFlyMode() == 1 || CastToNPC()->GetFlyMode() == 2) NPCFlyMode = 1; } //fix up pathing Z if(!NPCFlyMode && checkZ && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving)) { if(!RuleB(Watermap, CheckForWaterWhenMoving) || !zone->HasWaterMap() || (zone->HasWaterMap() && !zone->watermap->InWater(x_pos, y_pos, z_pos))) { Map::Vertex dest(x_pos, y_pos, z_pos); float newz = zone->zonemap->FindBestZ(dest, nullptr) + 2.0f; mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,x_pos,y_pos,z_pos); if( (newz > -2000) && ABS(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaMoving)) // Sanity check. { if(ABS(x - x_pos) < 0.5 && ABS(y - y_pos) < 0.5) { if(ABS(z - z_pos) <= RuleR(Map, FixPathingZMaxDeltaMoving)) z_pos = z; else z_pos = newz + 1; } else z_pos = newz+1; } } } //OP_MobUpdate if((old_test_vector!=test_vector) || tar_ndx>20){ //send update tar_ndx=0; this->SetMoving(true); moved=true; delta_x=(x_pos-nx); delta_y=(y_pos-ny); delta_z=(z_pos-nz); delta_heading=0;//(heading-nh)*8; SendPosUpdate(); } tar_ndx++; // now get new heading SetAppearance(eaStanding, false); // make sure they're standing pLastChange = Timer::GetCurrentTime(); return true; }
void GuardControllerSubSystem::Update(Actor& actor, double DeltaTime) { Opt<GuardControllerComponent> guardCC=actor.Get<IControllerComponent>(); if (!guardCC.IsValid()||!guardCC->IsEnabled()) { return; } if (mProgramState.mMode == core::ProgramState::Client) { return; } auto targetHolderC = actor.Get<ITargetHolderComponent>(); if (!targetHolderC.IsValid()) { return; } auto healthC = actor.Get<IHealthComponent>(); if (!healthC.IsValid() || !healthC->IsAlive()) { return; } UpdateTarget( actor, targetHolderC ); Opt<Actor> currentTarget( mScene.GetActor( targetHolderC->GetTargetGUID() ) ); auto moveC( actor.Get<IMoveComponent>() ); guardCC->SetNextMoveTimer( guardCC->GetNextMoveTimer() - DeltaTime ); if (currentTarget.IsValid()) { auto positionC( actor.Get<IPositionComponent>() ); auto targetPositionC( currentTarget->Get<IPositionComponent>() ); auto const distSqr = GetDistanceSqr( positionC, targetPositionC ); glm::vec2 const distV( (targetPositionC->GetX() - positionC->GetX()), (targetPositionC->GetY() - positionC->GetY()) ); double const Rot = atan2( distV.y, distV.x ); positionC->SetOrientation( Rot ); auto inventoryC = actor.Get<IInventoryComponent>(); if (inventoryC.IsValid()) { Opt<Weapon> weapon = inventoryC->GetSelectedWeapon(); if (weapon.IsValid()) { int32_t const aggroAltDistSqr = guardCC->GetAggroAltDist() * guardCC->GetAggroAltDist(); if (distSqr < aggroAltDistSqr) { weapon->SetShoot( false ); weapon->SetShootAlt( true ); } else { weapon->SetShoot( true ); weapon->SetShootAlt( false ); } } } if (guardCC->GetNextMoveTimer() <= 0.0) { const int32_t ran = RandomGenerator::global()() % 3; if (ran == 0) { guardCC->SetMoveDirection( GuardControllerComponent::Left ); } else if (ran == 1) { guardCC->SetMoveDirection( GuardControllerComponent::Right ); } else { guardCC->SetMoveDirection( GuardControllerComponent::None ); } guardCC->SetNextMoveTimer(guardCC->GetNextMoveTimerMax() + (RandomGenerator::global()() % 100*0.02*- 1)*guardCC->GetNextMoveTimerVariance() ); } int32_t const tooCloseDistSqr = guardCC->GetCloseDist() * guardCC->GetCloseDist(); int32_t const walkAwayDistSqr = guardCC->GetWalkAwayDist() * guardCC->GetWalkAwayDist(); double heading = 0.0; static const double pi = boost::math::constants::pi<double>(); if (distSqr > tooCloseDistSqr) { heading = Rot; if (guardCC->GetMoveDirection() == GuardControllerComponent::Left) { heading -= pi / 4; } else if (guardCC->GetMoveDirection() == GuardControllerComponent::Right) { heading += pi / 4; } moveC->SetMoving( true ); } else if (distSqr < walkAwayDistSqr) { heading = Rot-pi; if (guardCC->GetMoveDirection() == GuardControllerComponent::Left) { heading += pi / 4; } else if (guardCC->GetMoveDirection() == GuardControllerComponent::Right) { heading -= pi / 4; } moveC->SetMoving( true ); } else { heading = Rot; if (guardCC->GetMoveDirection() == GuardControllerComponent::Left) { heading -= pi / 2; moveC->SetMoving( true ); } else if (guardCC->GetMoveDirection() == GuardControllerComponent::Right) { heading += pi / 2; moveC->SetMoving( true ); } else { moveC->SetMoving( false ); } } moveC->SetHeading( heading ); } else { moveC->SetMoving( false ); Opt<IInventoryComponent> inventoryC = actor.Get<IInventoryComponent>(); if (inventoryC.IsValid()) { Opt<Weapon> weapon = inventoryC->GetSelectedWeapon(); if (weapon.IsValid()) { weapon->SetShoot( false ); weapon->SetShootAlt( false ); } } } }
void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z, float heading, uint8 ignorerestrictions, ZoneMode zm) { bool ReadyToZone = true; int iZoneNameLength = 0; const char* pShortZoneName = nullptr; char* pZoneName = nullptr; pShortZoneName = database.GetZoneName(zoneID); database.GetZoneLongName(pShortZoneName, &pZoneName); SetPortExemption(true); if(!pZoneName) { Message(13, "Invalid zone number specified"); safe_delete_array(pZoneName); return; } iZoneNameLength = strlen(pZoneName); switch(zm) { case EvacToSafeCoords: case ZoneToSafeCoords: x = zone->safe_x(); y = zone->safe_y(); z = zone->safe_z(); SetHeading(heading); break; case GMSummon: zonesummon_x = x_pos = x; zonesummon_y = y_pos = y; zonesummon_z = z_pos = z; SetHeading(heading); zonesummon_id = zoneID; zonesummon_ignorerestrictions = 1; break; case ZoneSolicited: zonesummon_x = x; zonesummon_y = y; zonesummon_z = z; SetHeading(heading); zonesummon_id = zoneID; zonesummon_ignorerestrictions = ignorerestrictions; break; case GateToBindPoint: x = x_pos = m_pp.binds[0].x; y = y_pos = m_pp.binds[0].y; z = z_pos = m_pp.binds[0].z; heading = m_pp.binds[0].heading; break; case ZoneToBindPoint: x = x_pos = m_pp.binds[0].x; y = y_pos = m_pp.binds[0].y; z = z_pos = m_pp.binds[0].z; heading = m_pp.binds[0].heading; zonesummon_ignorerestrictions = 1; LogFile->write(EQEMuLog::Debug, "Player %s has died and will be zoned to bind point in zone: %s at LOC x=%f, y=%f, z=%f, heading=%f", GetName(), pZoneName, m_pp.binds[0].x, m_pp.binds[0].y, m_pp.binds[0].z, m_pp.binds[0].heading); break; case SummonPC: zonesummon_x = x_pos = x; zonesummon_y = y_pos = y; zonesummon_z = z_pos = z; SetHeading(heading); break; case Rewind: LogFile->write(EQEMuLog::Debug, "%s has requested a /rewind from %f, %f, %f, to %f, %f, %f in %s", GetName(), x_pos, y_pos, z_pos, rewind_x, rewind_y, rewind_z, zone->GetShortName()); zonesummon_x = x_pos = x; zonesummon_y = y_pos = y; zonesummon_z = z_pos = z; SetHeading(heading); break; default: LogFile->write(EQEMuLog::Error, "Client::ZonePC() received a reguest to perform an unsupported client zone operation."); ReadyToZone = false; break; } if(ReadyToZone) { zone_mode = zm; if(zm == ZoneToBindPoint) { EQApplicationPacket* outapp = new EQApplicationPacket(OP_ZonePlayerToBind, sizeof(ZonePlayerToBind_Struct) + iZoneNameLength); ZonePlayerToBind_Struct* gmg = (ZonePlayerToBind_Struct*) outapp->pBuffer; // If we are SoF and later and are respawning from hover, we want the real zone ID, else zero to use the old hack. // if((GetClientVersionBit() & BIT_SoFAndLater) && (!RuleB(Character, RespawnFromHover) || !IsHoveringForRespawn())) gmg->bind_zone_id = 0; else gmg->bind_zone_id = zoneID; gmg->x = x; gmg->y = y; gmg->z = z; gmg->heading = heading; strcpy(gmg->zone_name, pZoneName); outapp->priority = 6; FastQueuePacket(&outapp); safe_delete(outapp); } else if(zm == ZoneSolicited || zm == ZoneToSafeCoords) { EQApplicationPacket* outapp = new EQApplicationPacket(OP_RequestClientZoneChange, sizeof(RequestClientZoneChange_Struct)); RequestClientZoneChange_Struct* gmg = (RequestClientZoneChange_Struct*) outapp->pBuffer; gmg->zone_id = zoneID; gmg->x = x; gmg->y = y; gmg->z = z; gmg->heading = heading; gmg->instance_id = instance_id; gmg->type = 0x01; //an observed value, not sure of meaning outapp->priority = 6; FastQueuePacket(&outapp); safe_delete(outapp); } else if(zm == EvacToSafeCoords) { EQApplicationPacket* outapp = new EQApplicationPacket(OP_RequestClientZoneChange, sizeof(RequestClientZoneChange_Struct)); RequestClientZoneChange_Struct* gmg = (RequestClientZoneChange_Struct*) outapp->pBuffer; // if we are in the same zone we want to evac to, client will not send OP_ZoneChange back to do an actual // zoning of the client, so we have to send a viable zoneid that the client *could* zone to to make it believe // we are leaving the zone, even though we are not. We have to do this because we are missing the correct op code // and struct that should be used for evac/succor. // 213 is Plane of War // 76 is orignial Plane of Hate // WildcardX 27 January 2008. Tested this for 6.2 and Titanium clients. if(this->GetZoneID() == 1) gmg->zone_id = 2; else if(this->GetZoneID() == 2) gmg->zone_id = 1; else gmg->zone_id = 1; gmg->x = x; gmg->y = y; gmg->z = z; gmg->heading = heading; gmg->instance_id = instance_id; gmg->type = 0x01; // '0x01' was an observed value for the type field, not sure of meaning // we hide the real zoneid we want to evac/succor to here zonesummon_id = zoneID; outapp->priority = 6; FastQueuePacket(&outapp); safe_delete(outapp); } else { if(zoneID == GetZoneID()) { //properly handle proximities entity_list.ProcessMove(this, x_pos, y_pos, z_pos); proximity_x = x_pos; proximity_y = y_pos; proximity_z = z_pos; //send out updates to people in zone. SendPosition(); } EQApplicationPacket* outapp = new EQApplicationPacket(OP_RequestClientZoneChange, sizeof(RequestClientZoneChange_Struct)); RequestClientZoneChange_Struct* gmg = (RequestClientZoneChange_Struct*) outapp->pBuffer; gmg->zone_id = zoneID; gmg->x = x; gmg->y = y; gmg->z = z; gmg->heading = heading; gmg->instance_id = instance_id; gmg->type = 0x01; //an observed value, not sure of meaning outapp->priority = 6; FastQueuePacket(&outapp); safe_delete(outapp); } _log(NET__DEBUG, "Player %s has requested a zoning to LOC x=%f, y=%f, z=%f, heading=%f in zoneid=%i", GetName(), x, y, z, heading, zoneID); //Clear zonesummon variables if we're zoning to our own zone //Client wont generate a zone change packet to the server in this case so //They aren't needed and it keeps behavior on next zone attempt from being undefined. if(zoneID == zone->GetZoneID() && instance_id == zone->GetInstanceID()) { if(zm != EvacToSafeCoords && zm != ZoneToSafeCoords && zm != ZoneToBindPoint) { zonesummon_x = 0; zonesummon_y = 0; zonesummon_z = 0; zonesummon_id = 0; zonesummon_ignorerestrictions = 0; zone_mode = ZoneUnsolicited; } } } safe_delete_array(pZoneName); }
TMCSView( int X1=1, int Y1=1, int X2=21, int Y2=9 ) : TListView( X1, Y1, X2, Y2 ) { FSource = (TMCSDirEntry*)0x880D36D0; FSize = 0x93; SetHeading( "Main Memory" ); FOnCreate(); }
void CGUIDialogAudioSubtitleSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); SetHeading(13396); }
//현재 Path.front에 저장되어 있는 타일 인덱스로 이동한다. 만약 Path가 비어있으면 false를 반환한다. bool Unit::MoveToPathFront(int CurrentPacket) { //해당 유닛의 패스를 가져온다. auto& Path = GetPathPlanner()->GetPath(); auto pMap = m_pGameWorld->GetMap(); auto& Graph = pMap->GetNavGraph(); LogMgr->Log("Path Size : %d",Path.size()); if(Path.empty()) { LogMgr->Log("취소"); m_pFSM->ChangeState(State_Idle::Instance()); return false; } //움직일 다음 칸 인덱스를 가져온다. int MoveIndex = Path.front(); Path.pop_front(); //MoveIndex의 타일이 비어있는지 확인한다. //비어 있지 않으면 새로 AStar알고리즘을 실행하여 움직인다. //TODO : 나중에 최적화 할 것 if(!Graph.GetNode(MoveIndex).IsEmpty()) { m_pPathPlanner->CreatePathToPosition(m_pPathPlanner->GetDestination()); if(Path.empty()) { GetFSM()->ChangeState(State_Idle::Instance()); return false; } MoveIndex = Path.front(); Path.pop_front(); } //이동시킨다. int PrevIndex = GetTileIndex(); SetTileIndex(MoveIndex); Vec2 MyPosition = m_pGameWorld->GetMap()->GetNavGraph().GetNode(PrevIndex).getPosition(); Vec2 PathFrontPosition = m_pGameWorld->GetMap()->GetNavGraph().GetNode(MoveIndex).getPosition(); //Heading 설정 SetHeading(PathFrontPosition - getPosition()); //Move 액션 생성 과정 : 타일 간의 거리와 유닛의 이동속도를 고려하여 만든다. //다음 AutoTask를 먼저 등록한다. //본래 속도보다 TweakPacket 정도 더 빠르게 실행시킨다. float Distance = Vec2Distance(PathFrontPosition, MyPosition) / (DIVIDE_NODE ? 32.0f : 64.0f); float Duration = Distance / GetSpeed(); int TweakPacket = 1; int NextPacket = (int)(NETWORK_FPS * Duration) - TweakPacket; printf("NextPacket : %d\n",NextPacket); //만일 NextPacket이 0보다 작거나 같다면 다음 타일을 가져온다. if(NextPacket <= 0) { printf("AAaaaaaaaaaaaa\n"); return MoveToPathFront(CurrentPacket); } NetMgr->PushAutoTask(new AutoTaskMove(CurrentPacket + NextPacket, m_iID)); SetAutoTaskPacket(CurrentPacket+NextPacket); auto pMove = MoveTo::create(Duration,PathFrontPosition); //액션을 실행한다. stopAllActions(); runAction(pMove); return true; }
void CGUIDialogVideoSettings::SetupView() { CGUIDialogSettingsManualBase::SetupView(); SetHeading(13395); }
bool Mob::CalculateNewPosition(float x, float y, float z, int speed, bool checkZ, bool calcHeading) { if(GetID()==0) return true; float nx = m_Position.x; float ny = m_Position.y; float nz = m_Position.z; // if NPC is rooted if (speed == 0) { SetHeading(CalculateHeadingToTarget(x, y)); if(moved){ SetCurrentSpeed(0); moved=false; } Log.Out(Logs::Detail, Logs::AI, "Rooted while calculating new position to (%.3f, %.3f, %.3f)", x, y, z); return true; } float old_test_vector=test_vector; m_TargetV.x = x - nx; m_TargetV.y = y - ny; m_TargetV.z = z - nz; if (m_TargetV.x == 0 && m_TargetV.y == 0) return false; SetCurrentSpeed((int8)(speed)); //*NPC_RUNANIM_RATIO); //speed *= NPC_SPEED_MULTIPLIER; Log.Out(Logs::Detail, Logs::AI, "Calculating new position to (%.3f, %.3f, %.3f) vector (%.3f, %.3f, %.3f) rate %.3f RAS %d", x, y, z, m_TargetV.x, m_TargetV.y, m_TargetV.z, speed, pRunAnimSpeed); // -------------------------------------------------------------------------- // 2: get unit vector // -------------------------------------------------------------------------- test_vector=sqrtf (x*x + y*y + z*z); tar_vector = speed / sqrtf (m_TargetV.x*m_TargetV.x + m_TargetV.y*m_TargetV.y + m_TargetV.z*m_TargetV.z); m_Position.w = CalculateHeadingToTarget(x, y); if (tar_vector >= 1.0) { if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), x, y, z); } m_Position.x = x; m_Position.y = y; m_Position.z = z; Log.Out(Logs::Detail, Logs::AI, "Close enough, jumping to waypoint"); } else { float new_x = m_Position.x + m_TargetV.x*tar_vector; float new_y = m_Position.y + m_TargetV.y*tar_vector; float new_z = m_Position.z + m_TargetV.z*tar_vector; if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z); } m_Position.x = new_x; m_Position.y = new_y; m_Position.z = new_z; Log.Out(Logs::Detail, Logs::AI, "Next position (%.3f, %.3f, %.3f)", m_Position.x, m_Position.y, m_Position.z); } uint8 NPCFlyMode = 0; if(IsNPC()) { if(CastToNPC()->GetFlyMode() == 1 || CastToNPC()->GetFlyMode() == 2) NPCFlyMode = 1; } //fix up pathing Z if(!NPCFlyMode && checkZ && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving)) { if(!RuleB(Watermap, CheckForWaterWhenMoving) || !zone->HasWaterMap() || (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position)))) { glm::vec3 dest(m_Position.x, m_Position.y, m_Position.z); float newz = zone->zonemap->FindBestZ(dest, nullptr) + 2.0f; Log.Out(Logs::Detail, Logs::AI, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.x,m_Position.y,m_Position.z); if ((newz > -2000) && std::abs(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaMoving)) // Sanity check. { if (std::abs(x - m_Position.x) < 0.5 && std::abs(y - m_Position.y) < 0.5) { if (std::abs(z - m_Position.z) <= RuleR(Map, FixPathingZMaxDeltaMoving)) m_Position.z = z; else m_Position.z = newz + 1; } else m_Position.z = newz+1; } } } //OP_MobUpdate if((old_test_vector!=test_vector) || tar_ndx>20){ //send update tar_ndx=0; this->SetMoving(true); moved=true; m_Delta = glm::vec4(m_Position.x - nx, m_Position.y - ny, m_Position.z - nz, 0.0f); SendPosUpdate(); } tar_ndx++; // now get new heading SetAppearance(eaStanding, false); // make sure they're standing pLastChange = Timer::GetCurrentTime(); return true; }