Final Project - 3D Exploration Game
This assignment is intended to test and maake something nice from the engine we build during the semester. During the semester we mostly learned basic engineering practices though building easy to understand and expandable asset system. As most of the time, we spent time on building various builders for the project, I chose to create a game which will use most out of it. I chose to create a 3D exploration game in which you roam around and interact with the object (Unfortunately, due to lack of time, I didn't finished as what I had in mind). I thought to create multiple textures for some meshes which will keep on changing every frame and some mesh will change their texture/material upon some interactivity - keyboard controlled.
Biggest problem, and time consuming, was to get the correct mesh with right textures. I chose to use "Realistic Rendering - Unreal Tutorial Demo" mesh which contains a lot ofdifferent of meshes. But I faced a lot of problem with that. As per our current build system, I can't export a mesh with different materials in one go. Due to which I need to explicitly export almost all of the mesh separately. Unlickily, I resized the complete mesh and increase the complete srtucture by almost 5-7 times.Due to which I need to redo the things again with that mesh and appropriate material. Below is link to the the game play video.
In my engine, I have used few of the small system which I created in the last semester. Below are the list of the things which I brought from last semester.
Smart Pointers: I used smart pointer for almost all of my custom objects - gameobjects, materials, textures, effect. This helped me a lot in using the pointers nicely and and not to much worry about the its deletion.
Timer Class: I used this for calculating the delta time andused that to move the objects in the game using that delta.
Messaging system: I used the messaging system for sending the windows messages and to pass it to appropriate handler in the game. This makes my enngine much easier to use as I included mouse and keyboar events from windows callback to send messages to the messaging system.
StringPool: Initializing and storing strings are always expensive. To minimize this, I used a String Pool system which keeps only one copy of the string in Debug version of the engine and Hash of that string in the Release mode of the engine. This makes the comparison, storage very minimistic especially in the usage of strings - string comparison.
This class was really interesting and I learnt few things which I, always, was curious about. First thing which I like learning was how to use visual studio macros and properties to make the project/solution. Using this we can separate out codes/asets/ temporary folder/ log files separately. In our design, we created a temp folder which cantains all the executables and libraries which can always be generated, if we build our solution. Moreover, we kept the code in the Code Solution folder so that actual code will take very minimal of space in any code repo when pusing it to any remote repo with a better 'ignore' files. Moreover, with this settings, things become very simpler, even for accessing.
Another thing, I would say, I learnt is Lua integration. It was really interesting to implement and to see the interoperability of functions between two languages - Using C++ functions in Lua. Another thing I learnt in the class, how to manage and use the various projects in the same solution and how to debug them; which definitely going to be helpful in the industry. I also learnt how to write shaders in a platform independent way and how to use some other tool to compile them to make it ready to use for the devices to render scenes.
There is no perect solution to a problem; and this is the important thing I learnt in this class. There was alway a better solution to a problem better than I/one came up with. Interactivity in the class with assignement implementation was really interesting as it gives opportunity to understand possible solutions to a problem. I always tries to make my engine better and easy to use in the game play. But, unfortunately, due to all deadlines, i wasn't able to utilize and show up all of the features of it in the gameplay. Perhaps, I will update my gameplay later on upload it back here to make look better.
Here is the DirectX link to the executable. Controls 'WASD' for Camera Movement and Arrow Keys Left/right Movement.