Skip to content

Instantly share code, notes, and snippets.

@xenobrain
xenobrain / main.rb
Last active August 9, 2024 13:12
Shadowcasting in ruby
def tick(args)
grid_w = 16
grid_h = 16
args.state.grid ||= [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
#ifndef ENGINE_SCENE_SCENE_H
#define ENGINE_SCENE_SCENE_H
#include <scene/types.h>
#include <any>
#include <map>
#include <bitset>
#include <vector>
#include <typeindex>
@xenobrain
xenobrain / CMakeLists.txt
Last active September 1, 2023 18:59
Raylib with Web Target
cmake_minimum_required(VERSION 3.24)
# Install CPM.cmake
set(CPM_VERSION 0.38.1)
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/ext)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_VERSION}.cmake")
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
file(DOWNLOAD https://github.com/TheLartians/CPM.cmake/releases/download/v${CPM_VERSION}/CPM.cmake
@xenobrain
xenobrain / CMakeLists.txt
Created August 30, 2023 20:10
CMake Emscripten
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
# Install CPM ##########################################################################################################
set(CPM_VERSION 0.38.1)
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/libraries)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
file(DOWNLOAD https://github.com/TheLartians/CPM.cmake/releases/download/v${CPM_VERSION}/CPM.cmake
#include <objc/runtime.h>
#include <objc/message.h>
#include <CoreGraphics/CoreGraphics.h>
template <typename Return, typename... Args> auto send(id obj, SEL selector, Args... args) {
return reinterpret_cast<Return (*)(id, SEL, Args...)>(objc_msgSend)(obj, selector, args...);
}
template <typename Return, typename... Args> auto send(Class cls, SEL selector, Args... args) {
return reinterpret_cast<Return (*)(id, SEL, Args...)>(objc_msgSend)(reinterpret_cast<id>(cls), selector, args...);
@xenobrain
xenobrain / CMakeLists.txt
Last active June 28, 2023 14:07
Cocoa Window with Metal layer in pure C++
cmake_minimum_required(VERSION 3.25)
project(CocoaWindow)
set(CMAKE_CXX_STANDARD 20)
# Install CPM ##########################################################################################################
set(CPM_VERSION 0.38.1)
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/libraries)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
@xenobrain
xenobrain / camera.json
Last active September 19, 2024 13:34
Dynamic Entities
{
"name": "Camera",
"components": [
{
"name": "Position",
"attributes": [
{ "x": 100 }
]
}
]
@xenobrain
xenobrain / delegate.h
Last active May 5, 2023 16:26
delegate
template <typename T> class delegate;
template <typename R, typename... Args> class delegate<R(Args...)> {
public:
template <R(*function)(Args...)> auto bind(void) -> void {
_instance = nullptr;
_proxy = &function_proxy<function>;
}
template <class C, R(C::* function)(Args...)> auto bind(C* instance) -> void {
@xenobrain
xenobrain / simd_math.h
Last active September 19, 2024 13:35
simd math, no templates
#ifndef ENGINE_TYPES_H
#define ENGINE_TYPES_H
#include <immintrin.h>
auto inline sqrt(float const s) -> float { return _mm_cvtss_f32(_mm_sqrt_ss(_mm_set_ss(s))); }
auto inline rsqrt(float const s) -> float { return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(s))); }
struct vector2 { float x, y; };
struct vector3 { float x, y, z; };
@xenobrain
xenobrain / gjk.rb
Created April 19, 2023 18:03
Physics WIP
DEG2RAD = Math::PI / 180.0
def tick args
b = args.state.box_a ||= { x: 540, y: 360, w: 200, h: 200, angle: 45, path: 'sprites/square/blue.png' }
a = args.state.box_b ||= { x: 340, y: 360, w: 100, h: 100, angle: 45, path: 'sprites/square/green.png' }
$a = a
a.y += 1 if args.inputs.up
a.y -= 1 if args.inputs.down
a.x -= 1 if args.inputs.left