November 8, 2020
This week I worked on the
Bowman skill that allows players to use a bow and arrow for ranged attacks.
I mentioned in 091 that I was not expecting to finish the
Bowman prototype this week because I knew that
there are some larger one-off implementations that were needed.
So this week I'll talk about some of the work that has gone into setting that foundation, and then next week I'll have a video of a player firing a bow.
It is now possible to see equipment that is being held, such as a bow in a players hand.
As part of my work on the
Bowman skill I implemented being able to see equipped items.
This is powered by a new addition to the engine that I am calling
Named Point is a point in model space that can optionally be influenced by an armature's bones.
A renderable can have any number of
Named Points. Right now the
RenderableId::Human's corresponding render descriptor contains
When rendering equipped weapons the
RenderSystem looks up the appropriate
Named Point along with the corresponding dual quaternions for
the bones that influence that point and uses them to calculate the transformation matrix to apply to the equipment.
After taking some time to figure out the data structures and a clean implementation I am now happy with how things are set up.
The system should work well for future mount points that I need for different scenarios such as describing where to display particle effects or for specifying inverse kinematic targets.
This week I implemented the concept of a
CoordinatedSequence is used to describe a series of things that should happen.
CoordinatedSequence can have one or more tracks that are driven simultaneously, each containing one or more steps that describe what should happen.
Here's a list of the steps for the sequence triggered by firing a bow, with the ones that I implemented this week marked as
the work remaining for next week marked as
(SUPPORTED) Receive indication that a bow was fired
(SUPPORTED) Trigger fire bow animation on human armature
(SUPPORTED) Wait for pose marker for reaching towards back (quiver)
(SUPPORTED) Spawn an arrow in the main hand
(SUPPORTED) Wait until pose marker for touching bow
(TODO) Trigger animation for bow's string pulling back and recoiling forwards
(SUPPORTED) Wait for pose marker for releasing bow
(TODO) Start spawned arrow mesh on a trajectory towards the target
(TODO) Update the arrow's position every frame as we interpolate the trajectory
(TODO) End sequence when arrow hits target
So there are a few more things to implement to be able to see a player fire a bow. I'll have them working by the next journal entry.
All of this is being implemented in a re-usable way so that future sequences will be easier to add in.
Continued familiarizing myself with WebGPU.
Broke out an enum
ItemIdfrom variants inside of
IconName. Icons and items were previously stuffed into one enum. One of a handful of poor decisions that I made when I was first learning Rust back in 2018.
crates/recipesin the engine to generically power crafting systems. The recipes system still needs a fair bit of work to begin to crystallize, but I'm making progress.
Came up with a 6 day per week training regiment for improving my art skills. Let's see how it goes.
By the next journal entry I will have a prototype of the
Bowman skill live.
If I get that in place early I will continue to work on the recipes system since it in an important foundation that will power several skills in the game.
Cya next time!