diff --git a/assets/tower-vr-cover.jpg b/assets/tower-vr-cover.jpg new file mode 100644 index 0000000..9816d67 Binary files /dev/null and b/assets/tower-vr-cover.jpg differ diff --git a/index.html b/index.html index 22fe4d0..66568a6 100644 --- a/index.html +++ b/index.html @@ -33,6 +33,16 @@ For school my projects are mainly in Unity with programming in C#, though recently I have gotten opportunities to work in Unreal Engine 5 with blueprints and C++ which is rather fun. For personal projects I like working in C or C++ depending on the project's complexity.

+ +
+
+

unreal engine

+

team

+

hlo

+
+

Tower VR

+

C++ Programmer

+
diff --git a/projects/hlo-projectvtd.html b/projects/hlo-projectvtd.html index 93e1d7e..00d29fa 100644 --- a/projects/hlo-projectvtd.html +++ b/projects/hlo-projectvtd.html @@ -11,7 +11,7 @@
-

VR Tower Defense

+

Tower VR

Info

@@ -21,10 +21,15 @@

Video

+ +

Product Overview

- A VR tower defence game where the player builds towers by drawing patterns on a magic circle. + A VR tower defence game where the player can fight enemies with their sword, or build towers by drawing patterns on a magic circle.

Project Overview

@@ -32,7 +37,44 @@

Code

-

+

Tower Selection

+
+

+ One of the mechanics I was responsible for was the tower selection circles. The code calls them spell circles as they were initially supposed to cast spells. + Spell circles spawn a pattern of orbs with colliders, these orbs have their own logic to send a message to a 'spell map' contained within the spell circle. +

+ spell circle - interface declaration +
+ +
+ spell circle - implementation +
+ +
+

+ These 'orbs' all know their own index within the spell circle's list of orbs. When an orb is hit, it sends its own index to the spell map component of the spell circle. This number is then converted to a string and appended to the spell map's pattern string. Because of the way the system works, only 1 digit indexes are used, though the code does not enforce this. + Whenever a new character is added, the spell map compares the formed string to a list of 'correct' patterns. + If the string produced after the last addition does not match a substring of the same length in a 'correct' pattern, the pattern is considered failed and the corresponding event is triggered. + When the string produced is equal to a 'correct' pattern, the event signalling a correct pattern is triggered. + Because a large part of the team prefered working with blueprints, a lot of the C++ architecture was designed with an eye on its blueprint interface. This lead to some odd decisions regarding the "success" event, as blueprints were unable to interact with the map of delegates to patterns that was used in the initial version of the spell map (hence the name). +

+ spell map - interface declaration +
+ +
+ spell circle - implementation +
+ +
+ spell orb - interface declaration +
+ +
+ spell orb - implementation +
+ +
+
diff --git a/shared/projects.css b/shared/projects.css index 0fb7804..5aea659 100644 --- a/shared/projects.css +++ b/shared/projects.css @@ -74,6 +74,10 @@ background-image: url('../assets/gml-tile-movement-cover.jpg'); } +.project-card[tower-vr] { + background-image: url('../assets/tower-vr-cover.jpg'); +} + .project-labels { margin-top: 20px; }