Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ Built with Unity 2021.2.
- Put game-, mesh-, collision- animation data into separate components ([#227](https://github.com/freezy/VisualPinball.Engine/pull/227), [Documentation](https://docs.visualpinball.org/creators-guide/editor/unity-components.html)).

### Fixed
- Ball stuttering when rolling over dropped target ([#375](https://github.com/freezy/VisualPinball.Engine/pull/375)).
- Plunger disappearing due to too small bounding box.
- Fixed switch status when multiple mappings point to the same ID ([#347](https://github.com/freezy/VisualPinball.Engine/pull/347)).
- Lighting setup. It's now usable ([#330](https://github.com/freezy/VisualPinball.Engine/pull/330)).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
using Unity.Entities;
using Unity.Mathematics;
using Unity.Profiling;
using VisualPinball.Engine.VPT;

namespace VisualPinball.Unity
{
Expand Down Expand Up @@ -79,8 +80,10 @@ protected override void OnUpdate()
var end = traversalOrder ? colliderIds.Length : -1;
var dt = traversalOrder ? 1 : -1;


for (var i = start; i != end; i += dt) {
ref var coll = ref colliders[colliderIds[i].Value].Value;
var saveCollision = true;

var newCollEvent = new CollisionEventData();
float newTime = 0;
Expand Down Expand Up @@ -125,15 +128,41 @@ protected override void OnUpdate()
SetComponent(coll.Entity, plungerMovementData);
}
break;
case ColliderType.Line:
case ColliderType.Line3D:
case ColliderType.Circle:
case ColliderType.LineZ:
case ColliderType.Plane:
case ColliderType.Point:
case ColliderType.Triangle:
// hit target
if (coll.Header.ItemType == ItemType.HitTarget) {
if (HasComponent<DropTargetAnimationData>(coll.Entity)) {
var dropTargetAnimationData = GetComponent<DropTargetAnimationData>(coll.Entity);
if (dropTargetAnimationData.IsDropped || dropTargetAnimationData.MoveAnimation) { // QUICKFIX so that DT is not triggered twice
saveCollision = false;
}
else {
newTime = Collider.HitTest(ref coll, ref newCollEvent, ref insideOfs, in ballData, collEvent.HitTime);
}
}
if (HasComponent<HitTargetAnimationData>(coll.Entity)) {
newTime = Collider.HitTest(ref coll, ref newCollEvent, ref insideOfs, in ballData, collEvent.HitTime);
}
}
else
newTime = Collider.HitTest(ref coll, ref newCollEvent, ref insideOfs, in ballData, collEvent.HitTime);
break;

default:
newTime = Collider.HitTest(ref coll, ref newCollEvent, ref insideOfs, in ballData, collEvent.HitTime);
break;
break;
}
}
}

SaveCollisions(ref collEvent, ref newCollEvent, ref contacts, in ballEntity, in coll, newTime);
if (saveCollision) {
SaveCollisions(ref collEvent, ref newCollEvent, ref contacts, in ballEntity, in coll, newTime);
}
}

// no negative time allowed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,25 @@ public DropTargetColliderGenerator(IApiColliderGenerator api, ITargetData data,
internal void GenerateColliders(float playfieldHeight, ICollection<ICollider> colliders)
{
var localToPlayfield = MeshGenerator.GetTransformationMatrix();

// QUICK FIX and TODO for Cupiii
/* hitmesh should not be generated by the Mesh generator. Drop Targets need special Hitshapes, that shoujld be very simple and cannot be activated from behind.
var hitMesh = MeshGenerator.GetMesh();
for (var i = 0; i < hitMesh.Vertices.Length; i++) {
hitMesh.Vertices[i].MultiplyMatrix(localToPlayfield);
}

var addedEdges = EdgeSet.Get();

GenerateCollidables(hitMesh, addedEdges, Data.IsLegacy, colliders);
*/
var addedEdges = EdgeSet.Get();

var tempMatrix = new Matrix3D().RotateZMatrix(MathF.DegToRad(Data.RotZ));
var fullMatrix = new Matrix3D().Multiply(tempMatrix);

if (!Data.IsLegacy) {
//if (!Data.IsLegacy) // Always generate special hitshapes (QUICKFIX)
{

var rgv3D = new Vertex3D[DropTargetHitPlaneVertices.Length];
var hitShapeOffset = 0.18f;
Expand Down