Physics2D

Namespace:

namespace Lenga\Engine\Core;

class Physics2D

Methods

layerMask

public static function layerMask(int ...$layers)

raycast

public static function raycast(Vector3 $origin,
        Vector3 $direction,
        float $distance,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

raycastAll

public static function raycastAll(Vector3 $origin,
        Vector3 $direction,
        float $distance,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

@return list

circleCast

public static function circleCast(Vector3 $origin,
        float $radius,
        Vector3 $direction,
        float $distance,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

circleCastAll

public static function circleCastAll(Vector3 $origin,
        float $radius,
        Vector3 $direction,
        float $distance,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

@return list

boxCast

public static function boxCast(Vector3 $origin,
        Vector3 $size,
        Vector3 $direction,
        float $distance,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

boxCastAll

public static function boxCastAll(Vector3 $origin,
        Vector3 $size,
        Vector3 $direction,
        float $distance,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

@return list

overlapPoint

public static function overlapPoint(Vector3 $point,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

overlapCircleAll

public static function overlapCircleAll(Vector3 $center,
        float $radius,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

@return list

overlapBoxAll

public static function overlapBoxAll(Vector3 $center,
        Vector3 $size,
        bool $includeTriggers = true,
        ?int $layerMask = null,)

@return list

Example

use Lenga\Engine\Core\Behaviour;
use Lenga\Engine\Core\Physics2D;
use Lenga\Engine\Core\Vector2;

class PhysicsQueries extends Behaviour
{
    public function update(): void
    {
        // Raycast in 2D
        $origin = new Vector2(0, 0);
        $direction = new Vector2(1, 0);
        $hit = Physics2D::raycast($origin, $direction, 100.0);

        if ($hit !== null) {
            Debug::log('Hit: ' . $hit->gameObject->name);
        }

        // Overlap circle
        $circle = Physics2D::overlapCircle(new Vector2(0, 0), 5.0);
        Debug::log('Objects in circle: ' . count($circle));

        // Overlap box
        $box = Physics2D::overlapBox(new Vector2(0, 0), new Vector2(2, 2));
        foreach ($box as $collider) {
            Debug::log('Overlapping: ' . $collider->gameObject->name);
        }

        // Set gravity
        Physics2D::setGravity(new Vector2(0, -9.8));
    }
}