Skip to content

Instantly share code, notes, and snippets.

View lucasteles's full-sized avatar
:shipit:
Ship it!

Lucas Teles lucasteles

:shipit:
Ship it!
View GitHub Profile
@lucasteles
lucasteles / OptionalSwitch.cs
Created June 22, 2026 21:36
optional switch enum
public enum OptionalSwitch : byte
{
Undefined,
Enabled,
Disabled,
}
public static class OptionalSwitchEx
{
extension(OptionalSwitch value)
@lucasteles
lucasteles / MathI.cs
Last active June 11, 2026 16:49
C# Int math helpers
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Vector2I = (int X, int Y);
/// <summary>
/// Integer Math Helpers
/// </summary>
public static class MathI
@lucasteles
lucasteles / FacingSide.cs
Created June 5, 2026 19:12
Godot Billboard "2.5D" Node
public enum FacingSide : sbyte
{
None = 0,
Left = -1,
Right = 1,
}
@lucasteles
lucasteles / NativeArray.cs
Last active June 19, 2026 23:13
C# mutable NativeArray
using System.Collections;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
namespace FGScript.Data;
using MImpl = MethodImplAttribute;
using MO = MethodImplOptions;
@lucasteles
lucasteles / Easing.cs
Created May 17, 2026 19:05
Easing Funcs
public static class Easing
{
public static Fix Apply(EasingFn fn, Fix k, Fix value) => Calc(fn, k.ToFloat()) * value;
public static float Apply(EasingFn fn, float k, float value) => Calc(fn, k) * value;
public static float Calc(EasingFn fn, float k) => fn switch
{
EasingFn.Linear => Linear(k),
EasingFn.Backward => Backward(k),
EasingFn.QuadraticIn => Quadratic.In(k),
@lucasteles
lucasteles / PlayerInput.cs
Last active October 2, 2025 17:13
C# Enum player input viewer
[Flags]
public enum PlayerInput : ushort
{
None = 0,
Up = 1 << 0,
Down = 1 << 1,
Left = 1 << 2,
Right = 1 << 3,
@lucasteles
lucasteles / Coroutines.cs
Last active August 28, 2025 17:50
Godot Coroutine (unity like)
global using Coroutine = System.Collections.Generic.IEnumerable<Coroutines.Wait>;
global using Wait = Coroutines.Wait;
using System;
// ReSharper disable AsyncVoidMethod
public static class Coroutines
{
public static async void Start(this Coroutine steps)
{
var mainLoopTree = Engine.GetMainLoop();
@lucasteles
lucasteles / Trail3D.cs
Created July 16, 2025 22:46
Godot C# custom 3D trail renderer
using System;
using Godot;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Based on
// https://gist.github.com/geegaz/8dfd61f600828c02acbbdaa749a2bbd5
// https://www.youtube.com/watch?v=vKrrxKS-lcA
@lucasteles
lucasteles / Granblue.gdshader
Created May 13, 2025 23:04
Godot ArcSys Style Shader
// author: @ijiru_masu
shader_type spatial;
uniform float specularThreshold : hint_range(0,1) = 0.5;
uniform float lightThreshold : hint_range(0,1) = 0.1;
uniform sampler2D BASE: source_color;
uniform sampler2D SSS: source_color;
uniform sampler2D ILM;
uniform sampler2D DETAIL: source_color;
@lucasteles
lucasteles / PopCount.cs
Created April 5, 2025 14:23
Calculate span pop count
static class Mem
{
public static int PopCount<T>(in T[] values) where T : unmanaged => PopCount<T>(values.AsSpan());
public static int PopCount<T>(in ReadOnlySpan<T> values) where T : unmanaged
{
#pragma warning disable S907
var count = 0;
var bytes = MemoryMarshal.AsBytes(values);
ref var current = ref MemoryMarshal.GetReference(bytes);