abstract
auto
as
await
base
bool
break
byte
double
case
catch
char
class
constexpr
consteval
const
continue
decimal
decltype
default
delegate
delete
do
dynamic_cast
else
elseif
enum
event
extern
false
final
finally
fixed
float
for
foreach
goto
if
implicit
#include
int
interface
internal
is
inline
lock
long
namespace
new
null
nullptr
object
operator
out
override
params
private
protected
public
readonly
ref
return
reinterpret_cast
sealed
static
short
sizeof
static
string
static_assert
static_cast
struct
switch
this
template
throw
true
try
typedef
typename
typeof
uint
ulong
union
unsigned
unsafe
ushort
using
virtual
void
volatile
while
[]
{}
||
&&
!value
"Hello World"
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<section>
</section>
<main>
</main>
<html lang="en">
</html>
<footer>
</footer>
<header>
</header>
<nav>
</nav>
Liam Robinson

Welcome

I'm Liam Robinson, a software developer based in Hove.

Professional Work

These are projects I have worked on professionally throughout the course of my career.

Personal Projects

These are projects I have worked on in my own spare time, or as part of my coursework while studying my Games Progamming BSc and MSc at Goldsmiths.

Urban Environments Cat-Si

Cat-Si logo

Cat-Si is a health & safety compliance audit application developed in-house at Urban Environments. It allows easy tracking, management, and reporting of building assets and focusses primarily on water hygiene (e.g. Legionella and Pseudomonas).


I have been responsible for making contributions to the back-end infrastructure, management portal, CI-CD pipelines, and Flutter-based front-end application.


For more information you can go to cat-si.com

Simpson Strong-Tie - Outdoor Living Solutions

Screenshot of the Simpson Strong-Tie Deck Planner Application

Produced by West Pier Studio for Simpson Strong-Tie, the Outdoor Living Solutions family of applications provide tools for deck, pergola and fence planning. They enable a user to design structures to their liking, visualize them in-context with AR on the IOS version, get a report with a breakdown of materials, and locate a dealer to buy the materials from.


I contributed to the .Net-based backend infrastructure and the Unity-based frontend. This involved bug-fixes and implementing new features such as a revamp of the app's offline-mode data synchronization processes and creation of internal management tools to streamline deployments.

Try The Apps

All 3 apps are available via WebGL:

Additionally, Deck Planner is available for iPad

Technology

The OLS family of apps are built with the following technologies:

  • Unity Engine
  • .Net Core API with Entity Framework and Blazor
  • MySql Database
  • AWS S3 Cloud Storage

Data Pack System (DPS) – A C++17 Serialization Library

Data Pack System Logo

DPS is an open-source header-only C++17 serialization library with no external dependencies that I wrote while working at SoundChalk. It is designed to:

  • Be fast (really fast)
  • Be non-invasive
  • Require the user to write as little code as possible
  • Provide full control of how data is formatted

Currently the library provides 3 formats:

  • Binary
  • Portable Binary
  • JSON

Portable Binary and JSON are good for saving to disk or network transfer. Binary isn’t portable between machines, but is lightning fast, making it good for quickly saving/loading states of objects in memory for quickly implementing undo/redo systems for example.

Source Code

Check out the source code here.

Getting Started

To get started using DataPackSystem do the following:

  1. Download the source code and ensure that the DataPackSystem folder is added to your compiler’s include path
  2. Include the header(s) from the Formats folder for the format(s) you want to serialize your data in
  3. Include the appropriate headers from the StandardLibrary folder if you want to serialize any standard library types
  4. Write Translator specializations for any of your own types you want to serialize
  5. Create a DataPack in your code with the format you want your data to be in and pack that data!

License

DPS uses the BSD license.

Documentation

For documentation, check out the examples in the Examples directory. They come with comments that explain the syntax and its usage. These are currently the main form of documentation for the library.

Dart Packages

While working on personal projects with Flutter I have made and published a number of Dart packages to provide utilities for serialization, resource management, etc.

Most will be listed here, but for a fully up-to-date list please check out my publisher page on pub.dev.

auto_json_converter

@JsonSerializable()
@AutoJsonConverter()
class Example {
  String name;

  Example(this.name);

  factory Example.fromJson(Map<String, dynamic> json) =>
      _$ExampleFromJson(json);

  Map<String, dynamic> toJson() => _$ExampleToJson(this);
}

Provides code generation to reduce boilerplate when working with JSON serialization via JsonConverters from the json_serializable package.

disposable_resource_management

void main() async {
  final ffi = SomeAsyncFFIInteropService();

  final resourceManager = AsyncResourceManager<SomeFFIWrapper>(
    loadResource: () => SomeFFIWrapper.create(ffi),
    releaseResource: (wrapper) => wrapper.disposeAsync(),
  );

  // The resource gets obtained on the first obtainToken() call.
  final token1 = await resourceManager.obtainToken();

  // We can also propagate the token to get another token.
  // This is done synchronously, since propagation isn't allowed for disposed
  // tokens and therefore does not require loading the resource as it is
  // guaranteed to already be loaded.
  final token2 = token1.propagate();

  // The resource will not be released yet because the propagated token2 still
  // is not disposed.
  await token1.disposeAsync();

  // The resource gets released when all tokens for the resource are disposed.
  await token2.disposeAsync();
}

Provides base types and utilities for managing the loading and disposal of resources. For example when working with packages that do so via ffi such as flutter_soloud.

This Website

This portfolio website. Hosted via GitHub pages and built using Jekyll, Liquid, HTML, SCSS, and just a touch of JavaScript.

Source Code

Check out the source code here.

Sacrifices Must Be Made

Sacrifices Must Be Made is a game where you get to:

  • Play a cultist
  • Represent your malevolent deity in an endless tournament of the damned
  • Fight endless hordes of enemies
  • Loot
  • Upgrade your defences
  • Loot some more
  • Survive for as long as you can!
  • Die!
  • Do it all again!

Made with Unity Engine.

Play it!

Grab the latest build here.

See The Source Code

Take a look at the source code here.

Disclaimer

Please note, for legal reasons certain assets are omitted from the source code because they were purchased from the Unity asset store and cannot be redistributed. Because of this the game can not be built from the source code alone as the repo contains only my own work.

Shader Experiments

Shader Experiments is the result of me playing around with writing my own water shaders in Unity. The shader has the following features that are customizable by via a UI in the application:

  • Procedurally generated Gerstner Waves courtesy of Catlike Coding
  • "Shallow" tinting and "Deep" fog using the depth buffer
  • Planar reflections that are achieved using a copy of the main camera flipped across the reflection axis with a custom clipping plane, and then screen-space mapping the render onto the water’s surface with screen space normal distortions
  • Underwater refraction using a grab pass and screen space normals to shift the screen space UVs
  • Caustics using light space texture mapping and world normals grabbed from the depth buffer. Inspired by Alan Zucconi and Flogelz
  • Specular shine using combined surface and texture normals

Have a Poke Around With the Settings

Grab the latest build here.

See The Source Code

Take a look at the source code here.

Go Fetchie!

Go Fetchie! is a puzzle game based around one core mechanic: the player has a robot dog named Fetchie that will chase his ball. The player must use their abilities to control the ball and Fetchie in order to solve puzzles and challenges.

Built in Unreal Engine 4 using a combination of C++ and Blueprints.

Play It!

Grab the latest build here.

Source Code

For legal reasons I cannot share the entire project because it uses some purchased assets which cannot be redistributed.

However, you can download a .zip file of the C++ code behind the game here.

Games Dev Examples

A screenshot of the Games Dev Examples project running A screenshot of the Games Dev Examples project code

Games Dev Unity Examples is a repository full of code snippets, example scenes, and teaching materials for making games in Unity and C#.

Some examples are more code based and have large amounts of code comments accompanying them to explain them. Other examples that are more visual in nature (e.g. the post processing stack example) have slides to accompany them instead. Links to the slides are included in the Lecture Slide Links.txt file in the Assets folder.

Contents

The project includes examples for:

  • C# Collections (Arrays, Lists, HashSets, Dictionaries)
  • XML Code Documentation Comments
  • Code Regions
  • Unity Inspector Attributes
  • Structs, Classes, and Interfaces
  • Physics Ray/Spherecasting
    • Non-Allocating physics callbacks
  • Custom Camera and Rigidbody Character Controls with Character Animation:
    • Enums
    • Update vs FixedUpdate
    • Basic Euler and AngleAxis rotation using Quaternions
    • Vector Lerping
    • Input handling
    • Rigidbody Physics
    • The Unity Mecanim System
      • Blend trees
      • Transitions
    • The Animator Component and animation Scripting
    • Root Motion
  • ScriptableObjects, Audio, and Animation Events
    • Storing groups of assets in a reusable way using ScriptableObjects
    • OnTriggerEnter/Exit physics callbacks
    • The AudioSource component
    • Using animation events to trigger weapon hit and footstep sounds
  • Legacy Animation, Nav Mesh Agents
    • Playing basic animations using the legacy Animation Clip system
    • Basic chase player behaviour using nav mesh agents
    • Fake jumping using off mesh links
  • Graphics In Unity
    • PBR
    • The Standard Shader
    • Reflection Probes
    • Colour Spaces
    • The Post Processing Stack
  • Building Projects In Unity
    • Release vs Development builds
    • Scene Selection
    • Built App Icon
    • Splash Screen
    • IL2CPP vs Mono
    • Platform specific build requirements (e.g. app store size limits)
    • Methods of tweaking build size
    • Debugging and Profiling builds

Source Code

Check out the project here.

3D Assets

These are a series of 3D assets modelled, textured, and animated using Maya, ArmorPaint, and Blender for various coursework projects as part of my masters degree.

Download Them

You can find all the asset files here.

Contact Me

If you would like to contact me you can do so in the following ways: