query

package
v0.18.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 8, 2026 License: LGPL-3.0 Imports: 2 Imported by: 0

Documentation

Overview

Package query declares the request, result, and filter types for the physics2d query API (raycast, AABB overlap, circle sweep). Execution lives on the plugin runtime; call the methods on physics2d.Plugin.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AABBOverlapHit

type AABBOverlapHit struct {
	Entity     cardinal.EntityID `json:"entity"`
	ShapeIndex int               `json:"shape_index"`
}

AABBOverlapHit is one ECS shape that overlaps the query AABB after narrow-phase test.

type AABBOverlapRequest

type AABBOverlapRequest struct {
	Min    component.Vec2 `json:"min"`
	Max    component.Vec2 `json:"max"`
	Filter *Filter        `json:"filter,omitempty"`
}

AABBOverlapRequest finds fixtures whose shapes overlap the axis-aligned box [Min, Max] in world space (inclusive bounds on the query box). Min.X may be greater than Max.X; components are swapped per axis.

type AABBOverlapResult

type AABBOverlapResult struct {
	Hits []AABBOverlapHit `json:"hits"`
}

AABBOverlapResult lists distinct (Entity, ShapeIndex) pairs that overlap the query box.

type CircleSweepRequest

type CircleSweepRequest struct {
	Start       component.Vec2 `json:"start"`
	End         component.Vec2 `json:"end"`
	Radius      float64        `json:"radius"`
	Filter      *Filter        `json:"filter,omitempty"`
	MaxFraction float64        `json:"max_fraction"`
}

CircleSweepRequest sweeps a circle with center moving along the segment from Start to End in world space. Radius must be positive. MaxFraction is the TOI search bound in [0,1] along that segment; 0 means 1.0. A nil Filter uses the same defaults as RaycastRequest (all layers, solids only).

type CircleSweepResult

type CircleSweepResult struct {
	Hit        bool              `json:"hit"`
	Entity     cardinal.EntityID `json:"entity"`
	ShapeIndex int               `json:"shape_index"`
	Point      component.Vec2    `json:"point"`
	Normal     component.Vec2    `json:"normal"`
	Fraction   float64           `json:"fraction"`
}

CircleSweepResult is the closest first contact along the sweep, if any.

type Filter

type Filter struct {
	CategoryBits   uint64 `json:"category_bits"`
	MaskBits       uint64 `json:"mask_bits"`
	IncludeSensors bool   `json:"include_sensors"`
}

Filter restricts which fixtures a query considers. A fixture passes when all of the following hold:

  • (Filter.MaskBits & fixture.CategoryBits) != 0
  • (Filter.CategoryBits & fixture.MaskBits) != 0
  • if IncludeSensors is false, the fixture is not a sensor

Fixture group index is not part of v1 query filtering; category/mask only.

A nil *Filter uses CategoryBits and MaskBits ^uint64(0) and IncludeSensors false (solids only, all layers) for RaycastRequest, AABBOverlapRequest, and CircleSweepRequest.

type RaycastRequest

type RaycastRequest struct {
	Origin component.Vec2 `json:"origin"`
	End    component.Vec2 `json:"end"`
	Filter *Filter        `json:"filter,omitempty"`
}

RaycastRequest is a world-space segment cast from Origin toward End (inclusive segment; hit fraction is in [0,1] along Origin->End). The ray must have non-zero length.

type RaycastResult

type RaycastResult struct {
	Hit        bool              `json:"hit"`
	Entity     cardinal.EntityID `json:"entity"`
	ShapeIndex int               `json:"shape_index"`
	Point      component.Vec2    `json:"point"`
	Normal     component.Vec2    `json:"normal"`
	Fraction   float64           `json:"fraction"`
}

RaycastResult is the closest hit along the segment, if any. When Hit is false, other fields are zero.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL