Skip to content

Instantly share code, notes, and snippets.

View KonnorRogers's full-sized avatar

Konnor Rogers KonnorRogers

View GitHub Profile
@KonnorRogers
KonnorRogers / bench.rb
Created October 1, 2026 00:24
crimes.rb for CRuby
require "json"
class Float
# Monkey patch to not change Luna's code.
# https://github.com/DragonRuby/dragonruby-game-toolkit-contrib/blob/9bbfe79586a1bb1cad2fcfb0d5264f4edb113fa0/dragon/numeric.rb#L910
def to_sf(decimal_places: 2, include_sign: false)
if include_sign
"%+.#{decimal_places}f" % self
else
"%.#{decimal_places}f" % self
@KonnorRogers
KonnorRogers / main.rb
Last active September 20, 2026 17:22
Porter Duff 12 common compositing blendmodes
# Reference: https://www.stat.auckland.ac.nz/~paul/Reports/GraphicsEngine/compositing/compositing.html
# Porter-Duff "Compositing Digital Images" paper.
# https://keithp.com/~keithp/porterduff/p253-porter.pdf
# https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators
COLORS = {
# blue: { r: 104, g: 199, b: 232, a: 255 },
# yellow: { r: 255, g: 220, b: 1, a: 255 },
blue: { r: 0, g: 0, b: 255, a: 255 },
red: { r: 255, g: 0, b: 0, a: 255 }
}
@KonnorRogers
KonnorRogers / 11ty-tree.js
Last active September 18, 2026 02:08
11ty-tree
class Tree {
constructor (rootNode) {
this.rootNode = rootNode
}
}
// Removed parents simply becuse they make a circular dependency, and we never need to read upwards.
class TreeNode {
constructor ({
value,
@KonnorRogers
KonnorRogers / Dockerfile
Created August 26, 2026 18:48
Dockerfile for Web Awesome + 11ty
ARG NODE_VERSION="22"
# base image to use for docker-compose
FROM node:${NODE_VERSION} AS builder
# This needs to happen _inside_ of the FROM to be in "context"
ARG PG_MAJOR_VERSION="16"
# Install system dependencies.
RUN apt update -y && \
@KonnorRogers
KonnorRogers / main.rb
Created August 16, 2026 03:45
Things that trigger `codegen error: too big operand`
# > 256 locals.
def tick(args)
# This is the most common. Easiest way around it is to split up locals into separate methods as the 256 limit is per "block"
l_0 = nil; l_1 = nil; l_2 = nil;
end
# > 256 globals.
$var1 = nil
$var2 = nil
@KonnorRogers
KonnorRogers / file_watcher.rb
Created August 3, 2026 02:14
File watching (polling) in DragonRuby
class FileWatcher
# This can get potentially deep if you have a lot of files or directories. Consider a fiber if its taking up too much time.
def self.list_files_recursive(directory, max_iterations_for_fiber: 100, fiber: false)
idx = 0
files = []
all_files = []
# Seed with full paths so we never lose directory context. `.reverse_each` makes `.pop()` yield entries in listing order. This is like the old "list_files_recursive" which actually used recursion, but by using a loop we can yield to a fiber on potentially large directories.
DR.list_files(directory).reverse_each do |f|
files << File.join(directory, f)
@KonnorRogers
KonnorRogers / main.rb
Last active July 6, 2026 21:20
rotating mask
module Main
def tick args
# ./samples/07_advanced_rendering/12_blend_modes_additive_modulo/app/main.rb
# Sample app shows how to use blend modes to create a masking layer
# Special thanks to akzidenz@discord (https://akzidenz.itch.io/) for providing this sample app
#
# blendmode reference:
# 1: alpha blending (default)
# 2: additive blending
# 4: modulo blending
@KonnorRogers
KonnorRogers / index.html
Last active July 6, 2026 02:18
downflow
<div flow-controller="counter">
<button flow-action="click->counter#decrement">-</button>
<span flow-text="context.count">0</span>
<button flow-action="click->counter#increment">+</button>
</div>
<button flow-action="#decrement">-</button>
<span flow-text="context.count">0</span>
<button flow-action="#increment">+</button>
@KonnorRogers
KonnorRogers / button.astro
Created June 18, 2026 14:59
Astro button
---
import Button from "@awesome.me/webawesome/dist/components/button/button.js";
---
<Button>Hi</Button>
<script>
import "@awesome.me/webawesome/dist/components/button/button.js";
</script>
@KonnorRogers
KonnorRogers / glow.rb
Created June 11, 2026 05:02
glow outline blendmode dragonruby
# one-time setup
@glow_dirs ||= 16.times.map do |i|
a = i * Math::PI * 2 / 16
[Math.cos(a), Math.sin(a)]
end
@glow_mask_blend ||= Numeric.compose_blendmode(
BLENDFACTOR_ZERO, BLENDFACTOR_SRC_ALPHA, BLENDOPERATION_ADD,
BLENDFACTOR_ZERO, BLENDFACTOR_SRC_ALPHA, BLENDOPERATION_ADD
)
@glow_hole_punch ||= Numeric.compose_blendmode(