Skip to content

Instantly share code, notes, and snippets.

@EncodeTheCode
Created February 21, 2026 13:36
Show Gist options
  • Select an option

  • Save EncodeTheCode/a4c009e3e41ce065aedfead29638a392 to your computer and use it in GitHub Desktop.

Select an option

Save EncodeTheCode/a4c009e3e41ce065aedfead29638a392 to your computer and use it in GitHub Desktop.
import numpy as np
# =========================
# Base Entity System
# =========================
class Entity:
"""Base class for any object in the 3D world."""
def __init__(self, position):
self.position = np.array(position, dtype=float)
self.triggers = []
def add_trigger(self, trigger):
self.triggers.append(trigger)
def update(self, dt):
# Check all triggers associated with this entity
for trigger in self.triggers:
trigger.check(self)
# =========================
# Trigger System
# =========================
class Trigger:
"""Base trigger class."""
def __init__(self, position, size, trigger_once=True, callback=None):
self.position = np.array(position, dtype=float)
self.size = np.array(size, dtype=float) # width, height, depth
self.triggered = False
self.trigger_once = trigger_once
self.callback = callback
def check(self, entity):
if self.is_inside(entity.position):
if not self.triggered or not self.trigger_once:
self.triggered = True
if self.callback:
self.callback(entity)
else:
# Reset trigger if not trigger_once
if not self.trigger_once:
self.triggered = False
def is_inside(self, point):
"""Axis-aligned bounding box (AABB) check"""
min_bound = self.position - self.size / 2
max_bound = self.position + self.size / 2
return np.all(point >= min_bound) and np.all(point <= max_bound)
# =========================
# Example Player Class
# =========================
class Player(Entity):
def __init__(self, position):
super().__init__(position)
self.health = 100
def move(self, direction, dt=1.0):
# Simple movement
self.position += np.array(direction) * dt
# =========================
# Example Callback Functions
# =========================
def door_trigger(entity):
print(f"{entity} entered a door area!")
def wall_trigger(entity):
print(f"{entity} hit a wall!")
# =========================
# Example Usage
# =========================
# Create a player
player = Player([0, 0, 0])
# Create a door trigger at (5,0,5) with size 2x2x2, triggers once
door = Trigger(position=[5, 0, 5], size=[2, 2, 2], trigger_once=True, callback=door_trigger)
# Create a wall trigger at (10,0,0) with size 1x3x10, triggers constantly
wall = Trigger(position=[10, 0, 0], size=[1, 3, 10], trigger_once=False, callback=wall_trigger)
# Add triggers to player
player.add_trigger(door)
player.add_trigger(wall)
# Simulate movement
movements = [[1,0,1], [1,0,1], [3,0,3], [5,0,0]]
for move in movements:
player.move(move)
player.update(dt=1.0)
print("Player position:", player.position)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment