Skip to content

Instantly share code, notes, and snippets.

View StagPoint's full-sized avatar

StagPoint Software StagPoint

  • StagPoint Software
  • Seattle, WA
View GitHub Profile
@StagPoint
StagPoint / QuaternionCompression.cs
Last active May 3, 2024 22:23
C# - Use "smallest three" compression for transmitting Quaternion rotations in Unity's UNET networking, from 16 bytes to 7 bytes.
// Copyright (c) 2016 StagPoint Software
namespace StagPoint.Networking
{
using System;
using UnityEngine;
using UnityEngine.Networking;
/// <summary>
/// Provides some commonly-used functions for transferring compressed data over the network using
@StagPoint
StagPoint / FloatConversion.cs
Last active May 19, 2021 17:49
Convert between floating point and integral types in C# / Unity
// Copyright (c) 2016 StagPoint Software
// NOTE: C#-style unions (structs using FieldOffset to cause multiple fields to 'overlap' in memory) may not be allowed on
// some IL2CPP platforms? If you get a compile error related to using FieldOffset on your target platform, comment the
// following #define to force this code to use another method.
//
// The UnityEngine.Networking code on BitBucket uses (#if !INCLUDE_IL2CPP) to control whether to use unions, but that code
// may be out of date (Unity has so far failed to respond), but testing confirms that this method does work on at least one
// of the IL2CPP target platforms, so we've chosen a more explicit #define instead.
#define USE_UNION_FOR_CONVERSION
@StagPoint
StagPoint / StopPlayingOnRecompile.cs
Created June 7, 2016 16:53
Stop Play Mode in the Unity Editor when recompiling the code
using UnityEditor;
[InitializeOnLoad]
public class StopPlayingOnRecompile
{
static StopPlayingOnRecompile()
{
EditorApplication.update = () =>
{
if( EditorApplication.isCompiling )
@StagPoint
StagPoint / PackedIntArray.cs
Last active September 11, 2018 10:14
Packed Integer Array (C#) - When the range of values is known ahead of time, and that range of values can be expressed in fewer bits than a full int, this class allows you to store the elements in a smaller amount of memory by packing individual elements together into fewer array elements.
// Copyright (c) 2017 StagPoint Software
namespace StagPoint.Collections
{
using System;
using System.Threading;
public class PackedIntArray
{
#region Private instance variables
@StagPoint
StagPoint / BinaryHeap.CS
Last active September 11, 2018 10:14
Basic Binary Min Heap implementation in C# that can be used to process items from lowest cost to highest cost, such as in A* pathfinding.
// Copyright (c) 2017 StagPoint Software
namespace StagPoint.Collections
{
using System;
/// <summary>
/// Implements a basic Binary Min Heap that can be used for A* pathfinding. Items are removed from
/// the list in order from lowest to highest cost
/// </summary>
@StagPoint
StagPoint / PooledArray.CS
Created March 8, 2017 20:16
Implements an Array-like interface for paged data that is object pool friendly. The internal data is stored in small "pages", each of which are obtained from an object pool and later returned to the object pool when finished. This allows the PooledArray class to obtain as much space as needed on demand from the object pool rather than have to de…
// Copyright (c) 2017 StagPoint Software
namespace StagPoint.Collections
{
using System;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// Implements an Array-like interface for paged data that is object pool friendly.
@StagPoint
StagPoint / TriangleBoxIntersect.cs
Last active February 23, 2021 19:37
Triangle/AABB Intersection Test in C#
public static bool IntersectsBox( Vector3 a, Vector3 b, Vector3 c, Vector3 boxCenter, Vector3 boxExtents )
{
// From the book "Real-Time Collision Detection" by Christer Ericson, page 169
// See also the published Errata at http://realtimecollisiondetection.net/books/rtcd/errata/
// Translate triangle as conceptually moving AABB to origin
var v0 = ( a - boxCenter );
var v1 = ( b - boxCenter );
var v2 = ( c - boxCenter );
@StagPoint
StagPoint / ListExtensions.cs
Created March 29, 2017 16:03
ListExtensions - Defines a set of extension methods to add commonly-used operations to every List instance.
// Copyright (c) 2017 StagPoint Software
namespace StagPoint.Collections
{
using System;
using System.Collections.Generic;
/// <summary>
/// Defines a set of extension methods to add commonly-used operations to every List instance.
/// </summary>
@StagPoint
StagPoint / ObjectPool.cs
Created April 2, 2017 14:21
Bare-bones generic object pooling. Object pools can improve application performance and memory footprint in many gamedev situations. When a client program requests a new object, the object pool first attempts to provide one that has already been created and returned to the pool. If none is available, only then is a new instance created.
// Copyright (c) 2017 StagPoint Software
namespace StagPoint.ObjectPooling
{
using System;
using System.Collections.Generic;
public class ObjectPool<T> where T : class
{
#region Static variables
@StagPoint
StagPoint / DoPlanesIntersectAtSinglePoint.cs
Created September 25, 2018 17:57
Find intersection point of three planes in C# for Unity
private bool planesIntersectAtSinglePoint( Plane p0, Plane p1, Plane p2, out Vector3 intersectionPoint )
{
const float EPSILON = 1e-4f;
var det = Vector3.Dot( Vector3.Cross( p0.normal, p1.normal ), p2.normal );
if( det < EPSILON )
{
intersectionPoint = Vector3.zero;
return false;
}