ABatteryPickup::ABatteryPickup() { Power = 750.0f; // Assign a static mesh static auto StaticMeshName = TEXT("StaticMesh'/Game/Props/Battery/Meshes/SM_Battery_Medium.SM_Battery_Medium'"); static auto MeshFinder = ConstructorHelpers::FObjectFinder<UStaticMesh>(StaticMeshName); if (MeshFinder.Succeeded()) { GetMeshComponent()->SetStaticMesh(MeshFinder.Object); } GetMeshComponent()->SetSimulatePhysics(true); }
void EC_MediaPlayer::OnFrameUpdate(QImage frame) { // Don't do anything if rendering is not enabled if (!ViewEnabled() || GetFramework()->IsHeadless()) return; if (!componentPrepared_) return; if (!getenabled()) return; // Get needed components, something is fatally wrong if these are not present but componentPrepared_ is true. EC_Mesh *mesh = GetMeshComponent(); EC_WidgetCanvas *sceneCanvas = GetSceneCanvasComponent(); if (!mesh || !sceneCanvas) { // In the case someone destroyed EC_WidgetCanvas or EC_Mesh from our entity // lets stop our running timer (if its running), so we don't unnecessarily poll here. componentPrepared_ = false; return; } // Validate submesh index from EC_Mesh uint submeshIndex = (uint)getrenderSubmeshIndex(); if (submeshIndex >= mesh->GetNumSubMeshes()) { /// \note ResetSubmeshIndex() is called with a small delay here, or the ec editor UI wont react to it. Resetting the index back to 0 will call Render() again. LogWarning("Render submesh index " + QString::number(submeshIndex).toStdString() + " is illegal, restoring default value."); QTimer::singleShot(1, this, SLOT(ResetSubmeshIndex())); return; } // Set submesh to EC_WidgetCanvas if different from current if (!sceneCanvas->GetSubMeshes().contains(submeshIndex)) sceneCanvas->SetSubmesh(submeshIndex); sceneCanvas->Update(frame); }
void EC_MediaPlayer::PrepareComponent() { // Don't do anything if rendering is not enabled if (!ViewEnabled() || GetFramework()->IsHeadless()) return; // Some security checks if (componentPrepared_) { LogWarning("EC_MediaPlayer: Preparations seem to be done already, you might not want to do this multiple times."); } if (!mediaPlayer_) { LogError("EC_MediaPlayer: Cannot start preparing, webview object is null. This should never happen!"); return; } // Get parent and connect to the component removed signal. Entity *parent = ParentEntity(); if (parent) connect(parent, SIGNAL(ComponentRemoved(IComponent*, AttributeChange::Type)), SLOT(ComponentRemoved(IComponent*, AttributeChange::Type)), Qt::UniqueConnection); else { LogError("EC_MediaPlayer: Could not get parent entity pointer!"); return; } // Get EC_Mesh component EC_Mesh *mesh = GetMeshComponent(); if (!mesh) { // Wait for EC_Mesh to be added. connect(parent, SIGNAL(ComponentAdded(IComponent*, AttributeChange::Type)), SLOT(ComponentAdded(IComponent*, AttributeChange::Type)), Qt::UniqueConnection); return; } else { // Inspect if this mesh is ready for rendering. EC_Mesh being present != being loaded into Ogre and ready for rendering. if (!mesh->GetEntity()) { connect(mesh, SIGNAL(MeshChanged()), SLOT(TargetMeshReady()), Qt::UniqueConnection); return; } else connect(mesh, SIGNAL(MaterialChanged(uint, const QString&)), SLOT(TargetMeshMaterialChanged(uint, const QString&)), Qt::UniqueConnection); } if (sceneCanvasName_.isEmpty()) sceneCanvasName_ = "VlcMediaPlayerCanvas-" + QUuid::createUuid().toString().replace("{", "").replace("}", ""); // Get or create local EC_WidgetCanvas component ComponentPtr iComponent = parent->GetOrCreateComponent(EC_WidgetCanvas::TypeNameStatic(), sceneCanvasName_, AttributeChange::LocalOnly, false); EC_WidgetCanvas *sceneCanvas = dynamic_cast<EC_WidgetCanvas*>(iComponent.get()); if (!sceneCanvas) { LogError("EC_MediaPlayer: Could not get or create EC_WidgetCanvas component!"); return; } sceneCanvas->SetTemporary(true); sceneCanvas->SetSelfIllumination(getilluminating()); // All the needed components are present, mark prepared as true. componentPrepared_ = true; // We are now prepared, check enabled state and restore possible materials now if (!getenabled()) sceneCanvas->RestoreOriginalMeshMaterials(); // Show downloading info icon or if not downloading, // ask for a image update from the player if (pendingMediaDownload_) OnFrameUpdate(downloadingLogo_); else mediaPlayer_->ForceUpdateImage(); }