void CodeLiteLLDBApp::EvalExpression(const LLDBCommand& command) { wxPrintf("codelite-lldb: evaluating expression '%s'\n", command.GetExpression()); if(CanInteract()) { // Evaluate the expression based on the current frame wxString expression = command.GetExpression(); expression.Trim().Trim(false); lldb::SBValue value = m_target.GetProcess().GetSelectedThread().GetSelectedFrame().GetValueForVariablePath( expression.mb_str(wxConvUTF8).data()); if(value.IsValid()) { LLDBReply reply; reply.SetReplyType(kReplyTypeExprEvaluated); reply.SetExpression(command.GetExpression()); LLDBVariable::Vect_t vars; LLDBVariable::Ptr_t var(new LLDBVariable(value)); vars.push_back(var); reply.SetVariables(vars); VariableWrapper wrapper; wrapper.value = value; // Cache the expanded variable (we will need it later for tooltip expansion m_variables.insert(std::make_pair(value.GetID(), wrapper)); SendReply(reply); } } }
void CodeLiteLLDBApp::EvalExpression(const LLDBCommand& command) { wxPrintf("codelite-lldb: evaluating expression '%s'\n", command.GetExpression()); if(CanInteract()) { lldb::SBExpressionOptions options; lldb::SBValue value = m_target.EvaluateExpression(command.GetExpression().mb_str(wxConvUTF8).data(), options); if(value.IsValid()) { LLDBReply reply; reply.SetReplyType(kReplyTypeExprEvaluated); reply.SetExpression(command.GetExpression()); LLDBVariable::Vect_t vars; LLDBVariable::Ptr_t var(new LLDBVariable(value)); vars.push_back(var); reply.SetVariables(vars); VariableWrapper wrapper; wrapper.value = value; // Cache the expanded variable (we will need it later for tooltip expansion m_variables.insert(std::make_pair(value.GetID(), wrapper)); SendReply(reply); } } }
void CodeLiteLLDBApp::SelectFrame(const LLDBCommand& command) { wxPrintf("codelite-lldb: selecting frame %d\n", command.GetFrameId()); if(CanInteract() && command.GetFrameId() != wxNOT_FOUND) { m_target.GetProcess().GetSelectedThread().SetSelectedFrame(command.GetFrameId()); m_interruptReason = kInterruptReasonNone; NotifyStopped(); } }
void CodeLiteLLDBApp::SelectThread(const LLDBCommand& command) { wxPrintf("codelite-lldb: selecting thread %d\n", command.GetThreadId()); if(CanInteract() && command.GetThreadId() != wxNOT_FOUND) { lldb::SBThread thr = m_target.GetProcess().GetThreadByID(command.GetThreadId()); if(thr.IsValid()) { m_target.GetProcess().SetSelectedThread(thr); m_interruptReason = kInterruptReasonNone; NotifyStopped(); } } }
void ARadiantWebViewActor::EndInteractionOverlap(class AActor* InOverlappingActor) { APawn* Pawn = Cast<APawn>(InOverlappingActor); if (CanInteract() && Pawn && ShouldSimulate(Pawn)) { CancelInteraction(Pawn); OverlappingPawns.Remove(Pawn); if ((OverlappingPawns.Num() == 0) && bSwapMaterialWhenOverlapped) { ResetMaterial(); } } }
///////////////////////////////////////////////// /// Interaction: Unit can interact with another unit (immediate response) /// /// @note Relations API Tier 1 /// /// Client-side counterpart: <tt>CGUnit_C::CanInteractNow(const CGUnit_C *this, const CGUnit_C *unit)</tt> ///////////////////////////////////////////////// bool Unit::CanInteractNow(const Unit* unit) const { // Simple sanity check if (!unit) return false; // Original logic // We can't intract while on taxi if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_TAXI_FLIGHT)) return false; // We can't interact while being charmed if (GetCharmerGuid()) return false; // We can't interact with anyone while being dead (this does not apply to player ghosts, which allow very limited interactions) if (!isAlive() && (GetTypeId() == TYPEID_UNIT || !(static_cast<const Player*>(this)->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)))) return false; // We can't interact with anyone while being shapeshifted, unless form flags allow us to do so if (IsShapeShifted()) { if (SpellShapeshiftFormEntry const* formEntry = sSpellShapeshiftFormStore.LookupEntry(GetShapeshiftForm())) { if (!(formEntry->flags1 & SHAPESHIFT_FORM_FLAG_ALLOW_NPC_INTERACT)) return false; } } // We can't interact with dead units, unless it's a creature with special flag if (!unit->isAlive()) { if (GetTypeId() != TYPEID_UNIT || !(static_cast<const Creature*>(unit)->GetCreatureInfo()->CreatureTypeFlags & CREATURE_TYPEFLAGS_INTERACT_DEAD)) return false; } // We can't interact with charmed units if (unit->GetCharmerGuid()) return false; // We can't interact with units who are currently fighting if (unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT) || unit->getVictim()) return false; return CanInteract(unit); }
void ARadiantWebViewActor::BeginInteractionOverlap(class AActor* InOverlappingActor) { APawn* OverlappingPawn = Cast<APawn>(InOverlappingActor); if (CanInteract() && OverlappingPawn && ShouldSimulate(OverlappingPawn)) { URadiantWebViewInteractionComponent* InteractionComponent = OverlappingPawn->FindComponentByClass<URadiantWebViewInteractionComponent>(); if (InteractionComponent) { if ((OverlappingPawns.Num() == 0) && bSwapMaterialWhenOverlapped) { BindWebMaterial(); } OverlappingPawns.Add(OverlappingPawn); if (!InteractingPawn && bInteractive) { CheckInteraction(OverlappingPawn); } } } }