|
@@ -86,6 +86,12 @@ void Obstacle::SetRadius(float newRadius)
|
|
|
MarkNetworkUpdate();
|
|
MarkNetworkUpdate();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void Obstacle::OnNodeSet(Node* node)
|
|
|
|
|
+{
|
|
|
|
|
+ if (node)
|
|
|
|
|
+ node->AddListener(this);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void Obstacle::OnSceneSet(Scene* scene)
|
|
void Obstacle::OnSceneSet(Scene* scene)
|
|
|
{
|
|
{
|
|
|
if (scene)
|
|
if (scene)
|
|
@@ -109,6 +115,26 @@ void Obstacle::OnSceneSet(Scene* scene)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void Obstacle::OnMarkedDirty(Node* node)
|
|
|
|
|
+{
|
|
|
|
|
+ if (IsEnabledEffective() && ownerMesh_)
|
|
|
|
|
+ {
|
|
|
|
|
+ Scene* scene = GetScene();
|
|
|
|
|
+ /// \hack If scene already unassigned, or if it's being destroyed, do nothing
|
|
|
|
|
+ if (!scene || scene->Refs() == 0)
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ // If within threaded update, update later
|
|
|
|
|
+ if (scene->IsThreadedUpdate())
|
|
|
|
|
+ {
|
|
|
|
|
+ scene->DelayedMarkedDirty(this);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ownerMesh_->ObstacleChanged(this);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void Obstacle::DrawDebugGeometry(DebugRenderer* debug, bool depthTest)
|
|
void Obstacle::DrawDebugGeometry(DebugRenderer* debug, bool depthTest)
|
|
|
{
|
|
{
|
|
|
if (debug && IsEnabledEffective())
|
|
if (debug && IsEnabledEffective())
|