portal travelling

This commit is contained in:
2022-10-10 13:21:12 +02:00
parent 85e3064171
commit 6c92351658
22 changed files with 782 additions and 124 deletions

View File

@@ -0,0 +1,38 @@
using System;
using UnityEngine;
namespace Escape_Room_Engine.Portal
{
[RequireComponent(typeof(Collider), typeof(Rigidbody))]
public class PortalDriver : MonoBehaviour
{
/// <summary>
/// The object that will be transported through the portal. Usually either this object or a parent offset object.
/// </summary>
[SerializeField] private Transform traveller;
/// <summary>
/// The side of the portal this became tracked on.
/// </summary>
[HideInInspector] public int entrySide;
/// <summary>
/// A reference to the collider of this portal driver.
/// </summary>
public Collider Collider { get; private set; }
private void Awake()
{
// check whether the collider is set up correctly
Collider = GetComponent<Collider>();
if (Collider.isTrigger) throw new Exception("Collider must not be a trigger.");
}
public void Teleport(Portal from, Portal to)
{
var m = to.transform.localToWorldMatrix * Portal.HalfRotation * from.transform.worldToLocalMatrix *
traveller.localToWorldMatrix;
traveller.transform.SetPositionAndRotation(m.GetPosition(), m.rotation);
}
}
}