Add simplified collider for in-built primitive meshes

This commit is contained in:
Wojciech Figat
2022-12-12 11:22:15 +01:00
parent d4601ecb44
commit 359e7d68d4
2 changed files with 51 additions and 6 deletions

View File

@@ -25,7 +25,7 @@ namespace FlaxEditor.SceneGraph.Actors
{
base.OnContextMenu(contextMenu);
contextMenu.AddButton("Add mesh collider", OnAddMeshCollider).Enabled = ((StaticModel)Actor).Model != null;
contextMenu.AddButton("Add collider", OnAddMeshCollider).Enabled = ((StaticModel)Actor).Model != null;
}
private void OnAddMeshCollider()
@@ -33,6 +33,56 @@ namespace FlaxEditor.SceneGraph.Actors
var model = ((StaticModel)Actor).Model;
if (!model)
return;
// Special case for in-built Editor models that can use analytical collision
var modelPath = model.Path;
if (modelPath.EndsWith("/Primitives/Cube.flax", StringComparison.Ordinal))
{
var actor = new BoxCollider
{
StaticFlags = Actor.StaticFlags,
Transform = Actor.Transform,
};
Editor.Instance.SceneEditing.Spawn(actor, Actor);
return;
}
if (modelPath.EndsWith("/Primitives/Sphere.flax", StringComparison.Ordinal))
{
var actor = new SphereCollider
{
StaticFlags = Actor.StaticFlags,
Transform = Actor.Transform,
};
Editor.Instance.SceneEditing.Spawn(actor, Actor);
return;
}
if (modelPath.EndsWith("/Primitives/Plane.flax", StringComparison.Ordinal))
{
var actor = new BoxCollider
{
StaticFlags = Actor.StaticFlags,
Transform = Actor.Transform,
Size = new Float3(100.0f, 100.0f, 1.0f),
};
Editor.Instance.SceneEditing.Spawn(actor, Actor);
return;
}
if (modelPath.EndsWith("/Primitives/Capsule.flax", StringComparison.Ordinal))
{
var actor = new CapsuleCollider
{
StaticFlags = Actor.StaticFlags,
Transform = Actor.Transform,
Radius = 25.0f,
Height = 50.0f,
};
Editor.Instance.SceneEditing.Spawn(actor, Actor);
actor.LocalPosition = new Vector3(0, 50.0f, 0);
actor.LocalOrientation = Quaternion.Euler(0, 0, 90.0f);
return;
}
// Create collision data (or reuse) and add collision actor
Action<CollisionData> created = collisionData =>
{
var actor = new MeshCollider

View File

@@ -290,11 +290,6 @@ namespace FlaxEditor.Windows
return new Item(name, GUI.Drag.DragItems.GetDragData(path));
}
private Item CreateActorItem(string name, Type type)
{
return CreateActorItem(name, new ScriptType(type));
}
private Item CreateActorItem(string name, ScriptType type)
{
return new ScriptTypeItem(name, type, GUI.Drag.DragActorType.GetDragData(type));