Added Monq page to portfolio.
This commit is contained in:
parent
f0defed282
commit
5c0ff7b47b
8 changed files with 157 additions and 8 deletions
|
|
@ -48,8 +48,8 @@ class GameProjects extends Component {
|
||||||
to the nature of working in a small team I was able to contribute to
|
to the nature of working in a small team I was able to contribute to
|
||||||
puzzle design and texture generation through shaders.`,
|
puzzle design and texture generation through shaders.`,
|
||||||
buttonText: "Learn More",
|
buttonText: "Learn More",
|
||||||
buttonLink: "https://d-tail-entertainment.itch.io/monq",
|
buttonLink: "/monq",
|
||||||
newtab: true
|
newtab: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: "University Graphics Project",
|
header: "University Graphics Project",
|
||||||
|
|
|
||||||
145
src/Monq.jsx
Normal file
145
src/Monq.jsx
Normal file
|
|
@ -0,0 +1,145 @@
|
||||||
|
import { h, render, Component } from "preact";
|
||||||
|
import Header from "./Header";
|
||||||
|
import {
|
||||||
|
Button,
|
||||||
|
Container,
|
||||||
|
Card,
|
||||||
|
CardHeader,
|
||||||
|
CardContent,
|
||||||
|
Typography,
|
||||||
|
Grid,
|
||||||
|
Box
|
||||||
|
} from "@material-ui/core";
|
||||||
|
|
||||||
|
|
||||||
|
const tigerPicture = new URL("../static/images/MonqPage/TigerAI.png", import.meta.url);
|
||||||
|
const sandPicture = new URL("../static/images/MonqPage/Sand.png", import.meta.url);
|
||||||
|
const mirrorPicture = new URL("../static/images/MonqPage/MirrorReflection.png", import.meta.url);
|
||||||
|
|
||||||
|
class Monq extends Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<span>
|
||||||
|
<Header />
|
||||||
|
<p />
|
||||||
|
<Container maxWidth="md">
|
||||||
|
<Card>
|
||||||
|
<CardHeader title="Monq" />
|
||||||
|
<CardContent>
|
||||||
|
<Typography variant="p">
|
||||||
|
This is my most complete game project. I made it in my second
|
||||||
|
year of university with some friends, and we were going to use
|
||||||
|
it to form a successful startup. I learned a lot about how a
|
||||||
|
multidisciplinary team works and tinkered with creating
|
||||||
|
frameworks in C++ with inheritance both to blueprints and
|
||||||
|
further C++ sub-classes, covering concepts such as all the AI
|
||||||
|
using unreal's tools, puzzle implementation, shader
|
||||||
|
implementation using noise and more. Most of the mechanics for
|
||||||
|
which I was responsible, used a variety of vector and
|
||||||
|
positional mathematics to implement.
|
||||||
|
</Typography>
|
||||||
|
<p />
|
||||||
|
<Typography variant="h5"> Project and Team </Typography>
|
||||||
|
<Grid container spacing={2}>
|
||||||
|
<Grid item sm={6} xs={12}>
|
||||||
|
<Typography variant="h6"> Programming: </Typography>
|
||||||
|
<Typography variant="p"> Warwick New, </Typography>
|
||||||
|
<Typography variant="p"> James Hellman </Typography>
|
||||||
|
|
||||||
|
<Typography variant="h6"> Designers: </Typography>
|
||||||
|
<Typography variant="p"> James Hellman, </Typography>
|
||||||
|
<Typography variant="p"> Nicholas Stankowski </Typography>
|
||||||
|
|
||||||
|
<Typography variant="h6"> Art: </Typography>
|
||||||
|
<Typography variant="p"> Harri Slee, </Typography>
|
||||||
|
<Typography variant="p"> Robert Adolfson </Typography>
|
||||||
|
|
||||||
|
<Typography variant="h6"> Music: </Typography>
|
||||||
|
<Typography variant="p"> Jason Read </Typography>
|
||||||
|
|
||||||
|
<Typography variant="h6"> Writing: </Typography>
|
||||||
|
<Typography variant="p"> Michael Wheatley </Typography>
|
||||||
|
|
||||||
|
<Typography variant="h6"> Animation: </Typography>
|
||||||
|
<Typography variant="p"> George Evans, </Typography>
|
||||||
|
<Typography variant="p"> Ross Everson </Typography>
|
||||||
|
</Grid>
|
||||||
|
<Grid item sm={6}>
|
||||||
|
<iframe
|
||||||
|
style={{ display: "block", margin: "auto", float: "right" }}
|
||||||
|
width="560" height="315"
|
||||||
|
src="https://www.youtube-nocookie.com/embed/fRSD64D0LUw"
|
||||||
|
title="YouTube video player" frameborder="0"
|
||||||
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media;
|
||||||
|
gyroscope; picture-in-picture" allowfullscreen>
|
||||||
|
</iframe>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
<p />
|
||||||
|
<iframe
|
||||||
|
style={{ display: "block", margin: "0 auto" }}
|
||||||
|
src="https://itch.io/embed/131406" height="167" width="552"
|
||||||
|
frameborder="0">
|
||||||
|
<a
|
||||||
|
href="https://d-tail-entertainment.itch.io/monq">MONQ by
|
||||||
|
dtailent
|
||||||
|
</a>
|
||||||
|
</iframe>
|
||||||
|
<p />
|
||||||
|
<Typography variant="h5"> What I worked on </Typography>
|
||||||
|
<Typography variant="h6"> Tiger AI </Typography>
|
||||||
|
<Grid container spacing={2}>
|
||||||
|
<Grid item sm={6} xs={12}>
|
||||||
|
Here I created an AI that guards an arena. The puzzle part
|
||||||
|
of this boss was based on trying to get the ai to get a
|
||||||
|
chain stuck on pillars left around the arena reducing the
|
||||||
|
range it could navigate. I did this by calculating the
|
||||||
|
distance between the previous attachment point and the next
|
||||||
|
and reducing the available navigatable circumference of the
|
||||||
|
tiger appropriately. Since this was my first more
|
||||||
|
complicated AI, I now know that It would have been far
|
||||||
|
easier to restrict the AI's movement through the use of a
|
||||||
|
more complex steering system rather than calculating where
|
||||||
|
it should end up.
|
||||||
|
</Grid>
|
||||||
|
<Grid item sm={6}>
|
||||||
|
<Box
|
||||||
|
component="img"
|
||||||
|
alt="Image of Tiger AI"
|
||||||
|
src={tigerPicture}
|
||||||
|
style={{ width: "100%", "float": "right" }}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
<Typography variant="h6"> Mirror Reflections </Typography>
|
||||||
|
<Grid container spacing={2}>
|
||||||
|
<Grid item sm={6}>
|
||||||
|
<Box
|
||||||
|
component="img"
|
||||||
|
alt="Image of Tiger AI"
|
||||||
|
src={mirrorPicture}
|
||||||
|
style={{ width: "100%", "float": "left" }}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
<Grid item sm={6} xs={12}>
|
||||||
|
Here is an example of me simulating reflections in monq to
|
||||||
|
create a light bounce puzzle. Each mirror triggers the next
|
||||||
|
to recursively make light reflection beams. Here I had to
|
||||||
|
work out angles of reflection before creating a new cast to
|
||||||
|
attach a beam particle.
|
||||||
|
<p />
|
||||||
|
I also worked on the sand texture in this image mixing
|
||||||
|
various forms of noise to create the ripples based on
|
||||||
|
changes in topography.
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
<p />
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
</Container>
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Monq;
|
||||||
|
|
@ -20,7 +20,7 @@ class Ramble extends Component {
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader title="Ramble" />
|
<CardHeader title="Ramble" />
|
||||||
<CardContent>
|
<CardContent>
|
||||||
<Typography varient="p">
|
<Typography variant="p">
|
||||||
Ramble was a web project I created during my master's degree to
|
Ramble was a web project I created during my master's degree to
|
||||||
create a startup. In this project, I was the CTO and built a
|
create a startup. In this project, I was the CTO and built a
|
||||||
website that allowed users to stream their podcasts live and
|
website that allowed users to stream their podcasts live and
|
||||||
|
|
@ -29,13 +29,13 @@ class Ramble extends Component {
|
||||||
streaming to DevOps in order to make it a reality.
|
streaming to DevOps in order to make it a reality.
|
||||||
</Typography>
|
</Typography>
|
||||||
<p />
|
<p />
|
||||||
<Typography varient="p">
|
<Typography variant="p">
|
||||||
It also had chatroom functionality with the ability to
|
It also had chatroom functionality with the ability to
|
||||||
re-stream to audiences much like other apps that came out in
|
re-stream to audiences much like other apps that came out in
|
||||||
the time since, such as Clubhouse.
|
the time since, such as Clubhouse.
|
||||||
</Typography>
|
</Typography>
|
||||||
<p />
|
<p />
|
||||||
<Typography varient="p">
|
<Typography variant="p">
|
||||||
During the project's lifespan of just under two years, I mostly
|
During the project's lifespan of just under two years, I mostly
|
||||||
worked on creating the streaming functionality of the project
|
worked on creating the streaming functionality of the project
|
||||||
and managing how the project was designed to function behind
|
and managing how the project was designed to function behind
|
||||||
|
|
@ -45,7 +45,7 @@ class Ramble extends Component {
|
||||||
today.
|
today.
|
||||||
</Typography>
|
</Typography>
|
||||||
<p />
|
<p />
|
||||||
<Typography varient="p">
|
<Typography variant="p">
|
||||||
Here's a demo of the project I took before we moved on.
|
Here's a demo of the project I took before we moved on.
|
||||||
</Typography>
|
</Typography>
|
||||||
<p />
|
<p />
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ class UniGraphics extends Component {
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader title="University Graphics Project" />
|
<CardHeader title="University Graphics Project" />
|
||||||
<CardContent>
|
<CardContent>
|
||||||
<Typography varient="p">
|
<Typography variant="p">
|
||||||
I made this project for a module at uni. It's a terrain map
|
I made this project for a module at uni. It's a terrain map
|
||||||
based on Perlin noise with flat face lighting, It was the first
|
based on Perlin noise with flat face lighting, It was the first
|
||||||
project where I picked up a lot of the 3D maths used in games
|
project where I picked up a lot of the 3D maths used in games
|
||||||
|
|
@ -32,7 +32,7 @@ class UniGraphics extends Component {
|
||||||
design.
|
design.
|
||||||
</Typography>
|
</Typography>
|
||||||
<p />
|
<p />
|
||||||
<Typography varient="p">
|
<Typography variant="p">
|
||||||
Here's a build and a video demo:  
|
Here's a build and a video demo:  
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@ class App extends Component {
|
||||||
import("./Ramble").then((module) => module.default)
|
import("./Ramble").then((module) => module.default)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
<AsyncRoute path="/monq" getComponent={() =>
|
||||||
|
import("./Monq").then((module) => module.default)
|
||||||
|
}
|
||||||
|
/>
|
||||||
<AsyncRoute path="/uni-graphics" getComponent={() =>
|
<AsyncRoute path="/uni-graphics" getComponent={() =>
|
||||||
import("./UniGraphics").then((module) => module.default)
|
import("./UniGraphics").then((module) => module.default)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
BIN
static/images/MonqPage/MirrorReflection.png
Executable file
BIN
static/images/MonqPage/MirrorReflection.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 692 KiB |
BIN
static/images/MonqPage/Sand.png
Executable file
BIN
static/images/MonqPage/Sand.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
BIN
static/images/MonqPage/TigerAI.png
Executable file
BIN
static/images/MonqPage/TigerAI.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
Loading…
Reference in a new issue