void AAmbitionOfNobunagaPlayerController::PlayerTick(float DeltaTime) { Super::PlayerTick(DeltaTime); if(Hud) { CurrentMouseXY = GetMouseScreenPosition(); TArray<FHitResult> Hits; bool res; FVector WorldOrigin; FVector WorldDirection; FCollisionObjectQueryParams CollisionQuery; CollisionQuery.AddObjectTypesToQuery(ECC_WorldStatic); if (UGameplayStatics::DeprojectScreenToWorld(this, CurrentMouseXY, WorldOrigin, WorldDirection) == true) { res = GetWorld()->LineTraceMultiByObjectType(Hits, WorldOrigin, WorldOrigin + WorldDirection * HitResultTraceDistance, CollisionQuery); } // 只trace 地板的actor // 地板名可以自定義 FVector HitPoint(0, 0, 0); if (Hits.Num() > 0) { for (FHitResult Hit : Hits) { if (Hit.Actor.IsValid() && Hit.Actor->GetFName().GetPlainNameString() == FloorActorName) { HitPoint = Hit.ImpactPoint; } // all landscape can click if (Hit.Actor.IsValid()) { FString ResStr; Hit.Actor->GetClass()->GetName(ResStr); if (ResStr == "Landscape") { HitPoint = Hit.ImpactPoint; } } } } Hud->OnMouseMove(CurrentMouseXY, HitPoint); } }
bool CPisaList::Select(CPoint& pt,bool IsChuPai ) { Node* nd=HitPoint(pt); if(!nd) { return false; } if(IsChuPai) { if(nd->IsSelect)return true; return false; } if(nd->IsSelect) { nd->IsSelect=false; return true; } else { nd->IsSelect=true; return true; } }
TEST(HitPointInterval, ShouldAddSingleHitPoint) { HitPointInterval interval; interval.add(HitPoint()); }
TEST(HitPointInterval, ShouldAddTwoHitPointsAsPair) { HitPointInterval interval; interval.add(HitPoint(), HitPoint()); }
TEST(HitPointInterval, ShouldInitializeWithTwoHitPoints) { HitPointInterval interval((HitPoint()), HitPoint()); }