Brandon’s Update: Week 7 (23May 2017)

Concrete Goals

This week all of my concrete goals revolved around cities. I wanted to create a UI to create cities on slots and a UI to create units from cities. Further, I wanted to make cities properly give players their resources. As a side-goal, I wanted to make sure that no one was blocked on their work by making code reviews fairly high priority.

Accomplished Goals

Things were very productive this week! Although there were the usual hiccups (The unit’s toWorld matrix was being improperly calculated, for instance), I got all of my city goals complete. There is a (crappy, but usable) UI available for creating cities on slots and creating units from cities. Further, I feel like our team was pretty productive this week because things moved right along on the PR front.

I was also able to get some work done on other fronts as well (I helped with unit movement and unit attacking).

Unaccomplished Goals

Unfortunately, the UI elements are not as polished as I would have liked due to a lack of knowledge regarding NanoGUI (I plan to get all this sorted out next week). I was also unable to finish making units cost resources to create.

Next Week’s Goals

Next week, I would like to continue my goal of keeping code-reviews moving along quickly. In addition, I’d like to complete my work on making spawning units cost resources as well as taking time to create. Further, I’d like to polish some of the UI elements with creating cities and spawning units.

Unfortunately, our client is a little sluggish and work on moving units/attacking units has been moving a little slower than expected. Next week is seriously crunch-week, and I will try to prioritize getting unit movement and unit attacking solidified, polished, and in the game. I also want to spend some time looking into some small client-side optimizations (only 80% optimizations .. I will not spend any time on 20%ers).

Next week I plan to do a lot of work on the game.

This Week’s Learnings

This week, I learned a lot about NanoGUI as well as how to better arrange our slot, city, and unit design. I also learned the important fact that quickly tackling code-reviews increases overall team productivity.

Most importantly, when we are all together, we get the most done.

Morale

My morale is high! The game is making steady progress and I contributed a lot this week. I would say that my morale is directly related to how much progress I made during the week..

I’m also very happy to have elements of the UI in. Now let’s tackle some more core gameplay elements!

Week 6 (15 May 2017): Team & Individual Reports

Overall Status

 

Our overall goal for this week was to add game functionality. We wanted to shore up unit combat with both visuals and server side logic, continue work on a trading system, add a UI to the game, and continue integrating the server and client. In addition, we wanted to fix up a lot of issues that arose last week.

Server: On the server side of things, we updated a lot of the logic already in place like the unit manager and unit attack logic to behave more in accordance with our design goals. We also introduced the notion of trades between players to the server so it can pass messages between players to do so.

Client: The client was more of a focus this week. We got the UI in with some basic windows, we got a lot of good graphics updates with unit visualization for attacking and destructing. There were lots of input updates for handling user input to control the various camera types, and controlling units with click events. A lot of work was put in to getting orientation to properly be communicated to the client through the server and for having the server correctly perform the computations in the first place. We are experiencing some growing pains in this area because of our initial design philosophy of keeping anything visual related (such as orientation) out of the server logic. Additionally we officially have HDR and bloom shading going on (thanks JJ!).

We now have a few different demos developed with unit selection and orders such as attacking and moving around, and a very simple UI that we plan to add onto heavily in the coming weeks.

Group Morale

Group morale is a bit low this week (or so it appears to me). We have been getting pretty lazy about reviewing others’ code regularly and the reviews are being done in big sweeps, which causes your work to go undeveloped and unmerged for quite a while. We have made some good progress this week, and as people are getting exposed to more parts of the code, excitement is increasing a bit, and hopefully this next week we can get to lots of exciting parts of the project.

Individual Report

Brandon’s Update

Dylan’s Update

Ethan’s Update

Jessica’s Update

Raj’s Update

Sylvia’s Update

Sylvia’s Update Week 6

What I Planned

My primary goal this week is to finish some sort of battling system for the units. This part is absolutely essential towards our game play, and many other core elements, such as ordering spaceship to attack cities, adding complex animations and so on, are all dependent on its implementation. Since object selection is almost out of the oven, I can start by selecting two random spaceships (spawned by pressing F3 key) through key press. After that, we will migrate the attack logic to be triggered by clicking on two separate units. I will also be working on orienting the ship towards the destination, adding shooting animation as well as triggering explosion before death.

What I Have Accomplished

  • The first iteration of a working attack system. By pressing the F6 key, two random spaceships are selected (must be spawned from different client, thus belonging to enemy players). The client receiving the key instruction will command its own spaceship to attack the target. The ship travels to the target, and once in range will start dealing damage. The ship that reaches 0 health will be permanently removed from the server and client side.
  • A half-working rotation animation
  • Particle shooting animation incorporated when attack command is triggered
  • Death animation, though unit is not yet correctly deleted from memory

The Unexpected Factors

I started to incorporate animations after finishing the attack logic, however, it was much more complicated than I assume. Right now, our unit manager handles a list of active and idle units and dictates when to send updates. The updates are cut off once a command is finished, swapping the unit to the idle queue. Therefore, we had to send one last tail update to wrap up what unit needs to do. Also, it is extremely hard to determine the best place to handle animation. Neither server nor client could handle the animation singlehandedly, because it requires communication of an exact timing for rendering on the screen. However, we also want to regulate the amount of information sent through server. Right now, we could not help but send a while rotation matrix, which is less than ideal. There also seems to be unexpected issues from race conditions, where the objects are drawn before they receive crucial updates. We could not attach to any logics because new flaws are constantly found, and thus must be modified.

For the Future…

This week, I want to get the rotation animation perfected (probably with TA’s help). After we get all the other teammate’s pull requests into master, I will have to update the attack and animation logic. Besides that, I want to start helping out on user interface side (writing the underlying logic and design the aesthetic outlook). A stretch goal would be making the enemy spaceships look a little different (perhaps with a visual outline) for individual clients.

What I Gained

While implementing more functions, I realized that we need to constantly change the system logic to accommodate new abilities. My teammates were able to point out loopholes and brainstorm a more concrete architectural design, which is much better than me thinking about it alone.  I have been working with different teammates each week so that I get to work on every aspect of the game and also get to know the people. It has been working wonderfully.

How I Felt

I am pretty happy with our team progress this week. I was working with two to three teammates at the same time, on multiple functionalities. Raj took over unit attack logic and modified it to be more rigid and resistant. Jessica added all the particle effects for explosion and shooting under the correct class, while I helped her send the updates to notify server. We continued our super-work day which is going really well.

Raj’s Update: Week 6 (15 May 2017)

What were your concrete goals for the week?

My goals for this week included finishing working out the issues with the combat system that I recognized late last week. I wanted to decouple combat from unit management, which would lay the foundation for integrating cities into the combat system. After this, I aimed to finish up the combat demo on the client, so we can get some visualization going.

What goals were you able to accomplish?

This week, I worked predominantly on setting up a unit combat demo on the client side. Earlier in the week, I was able to refactor our unit manager on the server-side so it could more elegantly and efficiently aggregate unit updates to send to the client. This solution also abates having the unit manager handling updates for other attackable objects that may engage a Unit, like Cities.  After that, I put together a quick client demo for unit-attack, which includes allowing one client select a Unit with the left mouse button, then select a target with the right mouse button. The attacking unit is shown moving towards the target, then engaging in combat (no animation, so it just stops), then the target dies.

If there were goals you were unable to meet, what were the reasons?

For the most part, I was able to get through all my goals for this week. There were some changes made to camera controls and key handlers, so I will need to refactor my demo a little to get it working with those updates.

What are your specific goals for the next week?

For the upcoming week, I plan to start working on city combat — getting units to attack cities, and vice-versa. Further, I would like to help Sylvia and Jessica with integrating rotation with the changes I made to Units and the Unit Manager. Lastly, I want to get to adding the ability for Units to follow other objects and group unit selection on the server side.

What did you learn this week, if anything (and did you expect to learn it)?

Poor management of C++ iterators can present interesting bugs (cough, cough.. I mean features).

What is your individual morale?

My morale is higher than it was last week, since I was able to sort out some of the issues with the combat system and unit management in general. With some unit combat action going on the client-side, we’ve not got something that resembles a  game! I look forward to playing with what we plan to add this week!

Jessica’s Updates Week 6 20170515

1) what were your concrete goals for the week?

My goals were to have the ship animation done and a UI set up for the team.

2) what goals were you able to accomplish?

The ships are able to rotate towards the target with some degree of error that needs to be fixed, and they’re able to shoot lazers and explode…however –> to the next section

3) if there were goals you were unable to meet, what were the reasons?

  • I was having trouble turning shooting on and off. As of writing this post, Sylvia says that she has it handled it, but sometimes the animation is too fast.
  • In addition, there’s no trigger for the explosion and any waiting for it to be deleted yet either. So it’s also an all or nothing deal.

Most of the issues are that I’m not really sure how the server is being handled so, I have a lot of trouble figuring out what needs to be updated, how it is updated, and where.

4) what are your specific goals for the next week?

I need the animation working with all of its triggers. I also want to help out with more things. Now that the UI library is integrated, depending on how much Dylan has already done with it, I would like to be able to design it too.

5) what did you learn this week, if anything (and did you expect to learn it?)

I probably should have stayed more on top of the code reviews. I had mainly paid attention only to things that were the client side.

Brandon on the other hand, takes the time to review everyone’s code, so I feel like he knows most, if not all, that’s going on in the project. However, I was mostly lost when I had to use the server side code.

In addition, taking time to document our software architecture might have been helpful, but we put it off because our architecture was changing so often that it would not have been worth it.

 

6) what is your individual morale (which might be different from the
overall group morale)?

Morale is still low. I feel like I was the least contributing member on the team. Dylan is doing so many things at once, one of his Trello cards was setting up the UI so I wanted to take that off of his hands. On Thursday, I started in the morning with trying to set up the nanogui library and trying to link it properly with our project. Once I had everything linked, I spent another few hours trying to figure out why the program was crashing each time I was trying to instantiate a UI screen. By 3pm or so Dylan said that he would take care of it so I wouldn’t have to worry. Reluctantly, I left it up to him.

Next, I switched to integrating animation with Syliva. I already had a client only version working, but there had been debates back and forth about how to handle rotation and whether it should be on the server or the client. The idea was that most of the load should be on the client side so that all the calculations wouldn’t slow down the server if there were hundreds of units.

I was told that the only thing I would have to work with in order to calculate rotation was an orientation vector sent by the server. I struggled with trying to figure out how I would work with such little information, but we decided that we could lerp from the original  orientation vector to the final orientation vector, and that I could build the rotation matrix based off of that vector.

This worked only sometimes, and other times the ship would be pointing the wrong way. I was also really unhappy with how inaccurate the lerping method was. It was also not going to fly because maybe 1/10 times it would rotate correctly. I ended up deciding that I wanted to go with my quaternion slerping implementation, even if I had to stick all the calculations on the server for the sake of having the right functionality. However, the math I had used before was not working anymore and sometimes the ship wouldn’t even rotate. In the end, I spent 12+ hours that day working with no results while my other team members seemed to have gotten a lot accomplished.

Several days passed, and after pulling my hair out, I finally had rotation working (mostly, but not perfect yet) by Saturday afternoon. After digging through all of the classes I figured out that nothing I wanted to update was updating because I had a misconception about how things worked on the server side. Rather than assigning the value to the variable in just the class it belongs to, I also have to set the same value to another class which sets it properly for the class I was trying to set it in originally (?).

I thought that I had figured out how the server side works once rotation was in, but then I spent the next entire day just trying to turn a boolean on and off so that I could turn on and off shooting lasers,  but once I turned it on, the variable was never updated properly for me to turn it off, and once again I had made no progress on a simple task the entire day.

I feel like I didn’t have a hard task, nor did I have many tasks, but I wasn’t able to accomplish anything.

Looking at some of the other team’s projects, they look really nice. With me being one of the people handling graphics, I feel like it’s on me for our project not looking as nice.

Ethan’s Update: Week 6

1) What were your concrete goals for the week?

My goal this week was to finish up the basic trading system, and potentially get started with implementing tech tree.

2) What goals were you able to accomplish?

I did manage to finish most of the trading system. The core functionalities are there, but there are still quite a few refinements waiting to be done. Now players can send a trade deal to another player, and the other player will be able to choose to accept, deny the trade deal, or to counter offer a deal.

3) If there were goals you were unable to meet, what were the reasons?

As I said, the trading system isn’t “completely” finished yet, and I wasn’t able to get tech tree started yet. I probably should’ve put more time into getting trading system finished quickly, but I was busier over the weekend than I imagined.

4) What are your specific goals for the next week?

Definitely I will need to get tech tree done, but still not sure what should can I do — I’m definitely willing to help with what other people are working on. We don’t have much time left, but we still have lots of features to implement in this game, not to mention that we might need quite a lot of time to debug.

5) What did you learn this week, if anything (and did you expect to learn it?)

By diving into networking more thoroughly, I got more familiar with how to deal with unique_ptr and shared_ptr in C++. They’ve been there since the very beginning, I’ve heard of them and I searched C++ reference for how to use them, but never really used them in this game until I started dealing with interplayer trading, which deals with quite a lot of data transmission. I learned quite a lot from the discussion with Brandon about how to design the trade system as well.

6) What is your individual morale (which might be different from the
overall group morale)?

My morale is as high as before. I was a little bit down when I found trading system to be much more complex than when I took this task, but it turned out to be quite fun to design it. I’m quite happy to have it mostly done.

Dylan’s Update: Week 6 (15 May 2017)

1) What were your concrete goals for the week?

Get the UI linked and working with basic windows, finalize unit selection and orders. Adding a basic lobby system and box selection were stretch goals.

2) What goals were you able to accomplish?

I was able to link the UI after some pain and quite a bit of tinkering with openGL loaders and dependency building. I added some basic windows as examples that display information about your current selection and set up a lot of infrastructure for further UI development. I also refactored the camera system quite a bit to allow switching between free and orbital camera modes with some QoL improvements for each as well.
I spent some of my extra time doing some serious client optimization, reducing our memory usage by quite a bit, speeding up loading, and improving the framerate, etc.
I made some progress on box selection as well, but it still needs some time before it’s ready.

3) if there were goals you were unable to meet, what were the reasons?

I finished all of my specific goals and even did some extra work on top of them this week.

4) What are your specific goals for the next week?

Lots of UI improvements. More windows with better information, buttons to do in game actions, displaying unit statistics when units are selected, context menus, etc.
Finish box selection.
Stretch: Get some kind of basic lobby system with other players information visible.

5) What did you learn this week, if anything (and did you expect to learn it?)

I learned that Nuget package manager is beautiful and manually adding and linking dependencies can be a pain. I learned about openGL cross platform loading and that you can pass C++ lambdas to C style APIs which let me strip a lot of ugly code that was shielding us from some gross GLFW stuff.

6) what is your individual morale (which might be different from the
overall group morale)?

Very high! Got lots done and set up a lot of solid infrastructure to make further development on the UI and camera movement really easy as well!

Brandon’s Update: Week 6 (16 May 2017)

Concrete Goals

This week I had concrete goals of integrating slots/cities with the UI layer, creating a mechanism for attack cooldowns, and helping others with their changes (with emphasis on unit management, unit selection, and the trade system).

Accomplished Goals

Unfortunately, I ended up being pretty busy this week with non-school related things, especially this past weekend. I wasn’t able to do as much as I wanted, but I was still able to accomplish some things. I was able to complete an initial mechanism for attack cooldowns as well as help with unit selection and the trade system. These things aren’t yet merged into the main branch, but they’re on their way!

Unaccomplished Goals

I was unable to refine my solution for attack cooldowns and I was unable to integrate my slots/cities work with the user-interface. This is mainly because of how busy I was during the week, but there were also some issues that came up that I had to prioritize instead.

Next Week’s Goals

Next week, I would like to finalize my new “Attack scheme” as well as help with the unit selection, city, and slot user interfaces. At the time of writing, there are also a lot of outstanding pull-requests that need reviewing. Next week, I really want to strap down on helping people move their code along.

This Week’s Learnings

This week I learned a decent amount about different strategies for implementing the attack and trade systems. However, my learnings didn’t go much beyond that. Of course, I also learned that this class should always be my number one priority, lest I feel bad at the time of writing this status report.

Morale

My morale seems to be restored. I’m really happy with the progress made this week (I think the weeks leading up to midterms really slowed us down). Although I am a little bit disappointed in my own progress, I really like the way that the game is shaping up! YAY TEAM SOLARWARE!

Brandon’s Update: Week 5 (09 May 2017)

Concrete Goals

My concrete goal for this week was simple: Get city slots and cities working, meaning that the player should be able to see slots, establish a city on a slot, and interact with that city. I also had a small concrete goal of doing some optimization work that would help us in the long run.

Accomplished Goals

I did it. I made slots visible and the player can found a city at a random slot with the simple hit of an F5. This, as always, took far more effort than I predicted. I realized that our previous definition for what a “City Slot” would be was a little off, so I had to rethink it. Further, I had to implement a way for us to define positions of objects on the surface of planets. To do so, I implemented a Spherical Coordinate System. Then, I had the slots drawn as spheres in one texture and cities as spheres in another texture.

I also got some optimization work done – namely singly-loaded-textures. This helped reduce our clients’ startup time and memory footprint by about 50%. Wow!

In the above clip, you can see slots being displayed on planets (They are the tiny suns on the sides of planets). You can also see my “founding” a city on the Sun, which creates the city model and displays it (A tiny Jupiter).

Unmet Goals

I definitely didn’t get as much done as I wanted to this week. This was mainly due to some totally awesome food poisoning that I got halfway through the week. Sad.

My unmet goals this week are twofold: First, I was unable to get a full-fledged slot/city system working due to our lack of progress on some other features (We’re running into some hitches in selection). Second, I was unable to meet all of my optimization goals. This was mainly because I had a hard time designing an optimization strategy for models, meshes, and textures since I did not design those systems. I do think I made some decent headway, however.

Next Week’s Goals

As always, my goals for next week are not yet set since we have not met as a team. However, I would personally like to complete my optimization work involving single-loaded-models and single-calculated-mesh-geometries. (Currently we re-calculate geometries every time we load a model or mesh).

Further, I want to get my slot/city functionality integrated with the unit selection system once that is complete. I also want to focus my attention on getting the UI off the ground. For our game, UI will play a very heavy role, and I want to make sure that we have something in place.

This Week’s Learnings

During this week, too much time was spent fixing bugs. I definitely learned my lessons in that OpenGL, by default, does not let you do graphics things in a non-main thread. I also learned a bit about graphics in order to optimize and display my cities.

Most importantly, this week I learned to always carry a trash can around the house with you when you have food poisoning.

Individual Morale

I’d say my morale is higher than last week, but lower than previous weeks. I’m very happy with the individual progress I made. However, I do feel like we have gone a bit stagnant as a team this week. The amount of new features that got pushed was noticeably smaller than previous weeks.

However, we did have an all-day meeting on Thursday where we got a lot of work done. It was a good opportunity for us to flesh out some details and solve some bugs. That event seriously boosted my morale.

I think the biggest hit to my morale is the continuous roadblock I run into while trying to implement features. I find that a lot of the classes we defined and architectures we created during the first few weeks are just far from reality. Our implementations differ from what we imagined. This is fine, however, it’s really a shame that we had to lose ~2 weeks of work in a 10 week class. As I’ve said in previous reports, we should have always prioritized implementation. We’ve learned our lesson and we are definitely doing a good job of prioritization now, but it’s a hard lesson to learn.

Jessica’s Updates Week5 20170508

1) what were your concrete goals for the week?
On my trello board I had:

  • making the skybox fixed in place so that you can’t zoom outside of the box
  • making texture references
  • looking up a ui library
  • creating the animation of a spaceship attacking another one and having the other one die

2) what goals were you able to accomplish?

  • the skybox is fixed at infinity
  • I tested out a library called imgui
  • The spaceship can turn towards a point and be torn apart
  • As a bonus, we now have geometry shaders, and the particles are actually billboarded!

 

3) if there were goals you were unable to meet, what were the reasons?

  • I have not actually done anything with the library yet. I had asked what kind of items we might need for the UI so I could see if the library would be feasible to use, but I didn’t seem to get a response. I guess I should have poked my teammates more.
  • The texture references have not been done yet. It seemed like a quick refactoring task, so I left it for last. But I was distracted with particles again. One of my weaknesses is that I’m never satisfied with something and it bothers me to keep fixing it if I have no deadline. In addition, my schedule was filled this week due to midterms starting and having to grade a bunch of projects for one of the classes I tutor for.
  • The pieces for the spaceship animation are in place but not integrated yet. Now that our parts are more intertwined, I need to work with Sylvia who is working on some unit stuff and classes on the server side so that I can fit the parts in the right places. Unfortunately we were unable to meet over the weekend and on Monday, so hopefully it will be done this week.

4) what are your specific goals for the next week?

  • finish integrating with Sylvia.
  • get the texture references done by the Thursday team meeting when we go over our code. (Tuesday I have a midterm, and Wednesday I have a music assignment, and I still have one project to finish grading, so it will have to be done Wednesday night)
  • other goals to be discussed by team needs

5) what did you learn this week, if anything (and did you expect to learn it?)

I started learning about how geometry shaders work. I’ve heard of them but never used them before, so they were a magical mystery to me.

I also learned that as the quarter progresses, I need a better way of figuring out time management.

 

6) what is your individual morale (which might be different from the
overall group morale)?

My morale slightly dipped this week. The times for this class are concurrent with my music GE, so I have not attended a single music class lecture since this class and our team meetings are the same time as my music class. Although I’m taking it pass/no pass, attendance is 20% of my grade, and I didn’t seem to do well on my midterm, so there’s now a possibility that I won’t be able to graduate and that I’ll lose my job offer. Of course, it’s on me for deciding to take two classes at the same time, but the mood seemed to affect my development this week.