Skip to content

Iteration 1: Recap

Sean Kleinjung edited this page Nov 7, 2021 · 2 revisions

Progress

Initial planning and design document was completed.

Released v0.07 with application navigation, random dungeons, monsters, basic combat and equipment, and more.

Key Lessons

  • Spent several hours on the project's build and release system, partially due to being unfamiliar with Electron. Initially this seemed not to be worth it, but I think the ability to easily cut releases is paying off even early in the project.
  • Electron is not a great platform for game development so far. The application is very large. Additionally, HTML/CSS and React turned out to be more difficult to use for creating a UI than expected. Specific difficulties exist around focus and event handling, scrolling, and detecting component size changes
  • The React.js state model doesn't interact well with how I tend to structure games. Integrating a mutable game engine model with React state in a way that rerenders appropriately (and with sufficient performance) took a significant amount of time this week, and I'm not really happy with the current state of it. Since the game is turn-based, I probably should have considered using an immutable game model and building a more traditional React application.
  • I probably should have spent more time in general planning how I was going to implement some systems before diving into coding. I will chalk this up to a combination of excitement, and the competing forces of compressed timeline, 'crunchless' constraints, and what was probably to ambitious of a project scope.
  • Staying on task is key! It's very noticeable when I start to meander away from the actual feature I am working on, and adding unrelated things or over-polishing the current work. I'm trying very hard to focus on getting the features in place, so I can prototype and play with a working system before perfecting any individual part.

Specific Technical Learnings

  • release-drafter ignores name-template and names everything 'Draft' if there are no prior releases
  • Have to line up the package.json version, tags, and release names with release-drafter and electron-build:
    • Release name must not have 'v' prefix
    • Tag name must have 'v' prefix
    • Release name must equal package.json version at the time electron build runs
  • Elements that aren't normally focusable require tabindex={0|-1|#} to be focused via .focus()
  • React 'Callback refs' are handy, and solve the problem of 'run this whenever the ref changes'
  • React styling - classes are global, modules, probably want 'styled-components' at some point

Clone this wiki locally