About

My name is Zach Haight. I graduated from the University of Utah with a B.S. degree in Computer Science. This is my Computer Science portfolio. This portfolio is a compilation of projects that I've worked on either to learn more about a subject or as a hobby.

Projects

Leviathan

Role: Lead Developer · C++ · Dart · Vulkan · ImGui

Leviathan is a modular, cross-platform game engine that I've been developing in my free time. I've developed this engine from scratch using C++ with Vulkan as the rendering backend and ImGui-based frontend graphics. The engine has a layered architecture, users must create layers and push them to the layer stack to run rendering commands and respond to events. Leviathan has been designed with extensibility and explicit control in mind.

Initially I began development of Leviathan on my own, but as the project has grown in scale I brought in my friend Brayden Graham to help me create Leviathan. We're working on Leviathan in a private GitHub repository and using Discord to coordinate development. I consider Leviathan proprietary, so I have removed the Git history to provide a public snapshot of the repository for this portfolio. Feel free to use this snapshot of Leviathan however you want.

Leviathan is still in early development. Many features and systems have not been created yet. The renderer is still very basic. For example, features such as textures are not supported yet. The physics engine has not been created yet and the structure of the audio engine is still being discussed. Many aspects of the engine's structure will change in the future as we get further along in development.

The README.md file in the top directory of the project provides instructions on how to build and run the engine I'll summarize them here:

  • On Linux and MacOS the engine assumes you're using GCC or Clang as your compiler. Ensure you already have GCC or Clang installed before continuing.
  • On Windows the engine assumes you're using MSVC as your compiler. Ensure you already have it installed before continuing. If you do not have MSVC installed the easiest way to install it is to through the Visual Studio IDE:
    • If you don't have Visual Studio installed:
      1. Follow this link to download the Visual Studio installer.
      2. Run the Visual Studio installer.
      3. While running the Visual Studio installer you'll be prompted to add workloads be sure to add the "Desktop development with C++" workload, this will install MSVC along with Visual Studio.
    • If you already have Visual Studio installed, but you don't have MSVC installed you'll need to modify your Visual Studio installation to include the "Desktop development with C++" workload:
      1. Open Visual Studio.
      2. On the tool bar at the top of the window select Tools > Get Tools and Features.
      3. You may be prompted to update the Visual Studio installer before continuing. If you are prompted then update the Visual Studio installer before continuing.
      4. You will see a list of your Visual Studio installations navigate to whichever installation you're going to be using for C++ development and select Modify.
      5. You will be prompted to modify the workloads of your installation, be sure to add the "Desktop development with C++" workload. This will install MSVC along with updating your installation of Visual Studio with your new "Desktop development with C++" workload.

Now that you've ensured you have the proper compiler for your system you can build the engine. We've included a Dart script called Bootstrap.dart that will fetch third party dependencies then build and run the engine. You simply need to run it and if prompted to confirm third party installations select yes. To run the script ensure you have Dart installed. Then open a terminal and navigate into the base directory of the Leviathan repository and then run the script.

    Linux/Mac:

dart run ./scripts/Bootstrap.dart
Copied! Copy failed!

    Windows:

dart run .\scripts\Bootstrap.dart
Copied! Copy failed!

The script may take a while to run. Fetching Git submodules typically takes the most time. When the build finishes the script will run the application. The application will display a rotating sphere on screen with an ImGui menu to modify the amount of horizontal and vertical rings the sphere has and an ImGui menu reporting the current FPS of the window.

You can rerun the Bootstrap script whenever you want to run the application as long as no source files were modified the build won't also rerun.

If you want you can modify the code in Client/src/ClientApp.cpp to display something else. The rotating sphere is just a demo, you can render anything you want. You just need to create a vertex buffer, create an index buffer for that vertex buffer, create a vertex array from the buffers you created, then submit your vertex array to the renderer once per frame. Be sure your camera is positioned correctly so you can see the object that you're rendering. Of course you'll need to rebuild the engine if you modify the code, fortunately all you have to do is rerun the Bootstrap script and the engine will rebuild automatically. Read the comments in the code and the documentation to know how to work with Leviathan's API.
It should be noted that the documentation, like the rest of the engine, is still a work in progress so some information in the documentation may be outdated.

There are two different ways I've provided for you to download the repository in the links below:

  • Click the "GitHub" link below to view the repository on GitHub and clone it.
  • Click the "Download" link below to download a zip file containing the repository.

Deck Designer

Role: Developer · Typescript · Tauri · React · SQLite · Swagger

Deck Designer is the project I worked on for my Capstone at the University of Utah. Capstone projects are done in groups of four. I've worked on this project with Joshua Beatty, Justin Zhu, and Lucas Jones. Deck Designer is an application for streamlining the design of card games. It provides tools to quickly and efficiently design your own card game. More specifically, Deck Designer is used to design the cards in a card game.

Deck Designer was coded in Typescript and built using Tauri. React was utilized to build the UI of Deck Designer. All projects created in Deck Designer all saved locally to SQL databases in the user's APPDATA directory. The SQL databases were created using SQLite. The reason project's are saved locally is so that Deck Designer can be used entirely offline, but we do have server's that users can use to back up and share their projects with other users. We used Swagger to program those servers.

My role in the project was working on the SQL databases that user's projects were saved to. I planned and created the structure for the project databases. Then I created a user friendly API that the rest of my team could use to create new project databases, modify a project's database, delete a project database, etc. The API, I created, was structured with low-level functions that acted as Typescript wrappers around SQL commands and higher-level functions that utilized these low-level functions to do more complex tasks. These higher-level functions are the functions that my team called in their code, while the low-level functions were used exclusively by me.

I programmed a website for Deck Designer (using HTML, CSS, and Javascript) that goes into more detail about the application. The website is hosted on my CADE account at the University of Utah, if the university decides to delete my CADE account (because I'm no longer a student there) then the website won't work. Fortunately, as of the time I'm writing this the website is still up.

The links I've included below don't include any source code, it's just binaries and installer files. The reason for this is I only own 25% of Deck Designer's IP (the project's IP is divided evenly among my team), so I can't provide the source code without their permission and we've been out of contact since graduation. So you won't be able to view the source code, but you will be able to install Deck Designer and try it for yourself.

The links below contain a link to the Deck Designer website, a link tutorial videos, and the installer files for each platform supported by Deck Designer (Linux, MacOS, and Windows). I've included instructions on how to install and run Deck Designer for each of these platforms:

  • For more information about Deck Designer click the "Website" link below to view the Deck Designer website. The website includes all the other resources that I also link belowed and has more information about Deck Designer, but as I said above there's a possibility the website will be taken down, so just in case the Deck Designer website is taken down the other links I've included are to resources that the site has (tutorials and download links).
  • To learn how to use Deck Designer click the "Tutorials" link below to view a playlist of YouTube videos that each show a brief tutorial on how to use a feature of Deck Designer. These videos are on the website, but I'm putting them here in case the website is taken down.
  • To install Deck Designer for Debian distributions of Linux (such as Ubuntu) click the "Linux (.deb)" link below to download the Debian installation package for Deck Designer. Installing the file is simple:
    1. After downloading the Debian installation package file open a terminal and navigate to the directory the file has been downloaded to.
    2. Run the following command to install Deck Designer:

      sudo apt install ./deckdesigner_0.1.0_amd64.deb
      Copied! Copy failed!
    3. Then run Deck Designer:

      deckdesigner
      Copied! Copy failed!
  • To install Deck Designer for Red Hat distributions of Linux (such as Fedora) click the "Linux (.rpm)" link below to download the Red Hat installation package for Deck Designer. Installing the file is simple:
    1. After downloading the Red Hat installation package file open a terminal and navigate to the directory the file has been downloaded to.
    2. Run the following command to install Deck Designer:

      sudo dnf install ./deckdesigner-0.1.0-1.x86_64.rpm
      Copied! Copy failed!
    3. Then run Deck Designer:

      deckdesigner
      Copied! Copy failed!
  • To install Deck Designer for any Linux distribution click the "Linux (.AppImage)" link below to download the portable Linux software package for Deck Designer. Unlike other download links this is not an installation file this is the binary for Deck Designer packaged in a way that it can be run on any Linux system. I'd recommend only downloading the AppImage if you're running a Linux platform that isn't a Debian distro or a Red Hat distro. Here's how to run the AppImage file:
    1. After downloading the AppImage file open a terminal and navigate to the directory the AppImage has been downloaded to.
    2. Give the AppImage file executable privileges by running chmod:

      chmod a+x deckdesigner_0.1.0_amd64.AppImage
      Copied! Copy failed!
    3. You may need to install additional programs to run AppImages on your computer. For example, I'm running Ubuntu, so I needed to install FUSE to run AppImages. Apparently other Linux distros come with FUSE already installed, but Ubuntu doesn't, so I ran this command to install FUSE:

      sudo apt install libfuse2
      Copied! Copy failed!
      Your system may require you to install FUSE as well or maybe you'll need to install other programs to run AppImage files the process may vary among different Linux distros. You'll just need to troubleshoot it if you aren't able to immediately run the AppImage after giving it executable privileges.
    4. Run the AppImage file and Deck Designer should start up:

      ./deckdesigner_0.1.0_amd64.AppImage
      Copied! Copy failed!
    5. Optionally you can move the file into one of your PATH directories or put the file in a directory and add that directory to your PATH so that you can easily run the AppImage file from any directory you're currently working in by just running: deckdesigner_0.1.0_amd64.AppImage, instead of needing to run: path/to/DeckDesigner-AppImage/deckdesigner_0.1.0_amd64.AppImage every time you want to run Deck Designer.
      You should be able to find instructions for how to do this for your specific Linux distribution online.
  • To install Deck Designer for MacOS click the "MacOS" link to download the Apple Disk Image (.dmg) file for Deck Designer. This file should work on most versions of MacOS. Installing the file is simple:
    1. After downloading the Apple Disk Image (.dmg) file open your Finder application and go to the directory you've downloaded the Apple Disk Image (.dmg) file to (most likely the file will be in your Downloads folder).
    2. Double click the file to mount it as a virtual disk. The file's name will show up in Finder's sidebar and a window should open up, displaying the content of the Apple Disk Image (.dmg) file.
    3. In the window that opened up drag the application from that window to /Applications to install Deck Designer.
    4. Eject the Application Disk Image (.dmg) virtual disk by clicking the eject button for the Application Disk Image (.dmg) file on the sidebar of Finder.
    5. Now you can safely delete the Application Disk Image (.dmg) file.
    6. You can run Deck Designer in several different ways:
      • In Finder you can go to /Applications, find Deck Designer and double click the app.
      • You can open up Spotlight Search by pressing Command(⌘) + Spacebar then search the app's name (deckdesigner). Then double click Deck Designer when you've found it in the search results.
      • You could ask Siri to open Deck Designer for you.
  • To install Deck Designer for Windows click the "Windows" link to download the Microsoft Installer file for Deck Designer. Running the MSI file is simple:
    1. Open File Explorer and navigate to the directory you've installed the MSI file to (most likely it will be in your Downloads directory).
    2. Double click the file to start the installation wizard.
    3. Follow the instructions in the installation wizard to install Deck Designer.
    4. To run Deck Designer you can either double click the desktop shortcut that you should have been prompted to create while following the instructions in the installation wizard or if you don't have the desktop shortcut press Windows Key + R to open the "Run" box then type in the app's name (deckdesigner).