Libove Blog

Personal Blog about anything - mostly programming, cooking and random thoughts

Tag: gamedev

#

Added walls to the room and removed the pillars in the room itself. These can still be placed in the data structure but my random generator isn't using them at the moment. The geometry is now mostly done for my purposes. The next step will be tooling to create and edit rooms manually.

#gamedev #rust #geometry


#

I've found a simple way to create UVs for my ceiling geometry, built from Bezier triangles.

For each triangle I compute a LookAt matrix with the normal of the triangle as the view direction. For the up vector I use one edge of the triangle. The UV coordinates can then be calculated by applying this matrix to each sampled points and discarding the Z component.

let mut ps = [
    self.room.surface_point(*face, 0.0, 0.0, 1.0),
    self.room.surface_point(*face, 1.0, 0.0, 0.0),
    self.room.surface_point(*face, 0.0, 1.0, 0.0),
];
ps.sort_by(|x, y| x.y.partial_cmp(&y.y).unwrap());

let v1 = ps[1] - ps[0];
let v2 = ps[2] - ps[0];
let n1 = v1.cross(&v2);

let lt = Matrix3::look_to_rh(n1.normalize().into(), v1.normalize().into());

3D Scene with UV debug textures

#gamedev #geometry #uv


#

UV coordinates on pillars and floor working. I've tinkered with UVs for the ceiling surfaces but have not found a solution yet. There are always discontinuities. The ceiling is created with quadratic Bezier triangles.

Any tips would be appreciated.

#3d #graphics #gamedev #geometry #uv

3D rendering of a room with UV debug texture. The ceiling surfaces are still gray.


#

#gamedev progress:

  • materials are loaded from a configuration file
  • Adventurers return from quests and spawn a treasure chest
  • reworked text element to automatically adjust height of element

#

#gamedev

refactored hero logic into state pattern. So much better!

Code screenshot showing state pattern (left) and previous version.


#

#gamedev progress:

  • Trader implementation: appear regularly at the tavern selling materials for crafting.
  • Adventurers implementation: Have a quest and can be booked into rooms. When the embark on a quest after their stay.
  • Reworked items: previously I had an enum to distinguish between different items. This would become infeasible once I start adding more items. Rework to have a generic item struct.
  • Reworked recipes: similar to items, each recipe is now a struct. The recipe defines the ingredient requirements and a function to generate the resulting item.

#

#gamedev progress:

  • sorting sprites by layers for drawing
  • first item crafting


#

#gamedev progress:

  • added first items. Items are always placed in slots.
  • items can be dragged between slots.

recording of a yet unnamed game


#

#gamedev progress:

  • built a UI system using "immediate mode" style.

Code for one button:

if (d.add_inter(.{ .BUTTON = .{} }, .{ .owner = i, .item = 0, .index = 0 })) {
    std.debug.print("BUTTON KITCHEN\n", .{});
}
d.down();
{
    d.add(.{ .V_LIST = .{} });
    d.down();
    {
        d.add(.{ .TEXT = .{ .text = "Kitchen", .box = rl.Vector2.init(200, 20) } });
        d.add(.{ .TEXT = .{ .text = "100 G", .box = rl.Vector2.init(200, 20) } });
    }
    d.up();
}
d.up();

gif showing UI dialogs popping up and highlighting buttons under the mouse

#zig


#

#gamedev progress on hotel game:

  • did some further refactoring to rendering function
  • added room highlighting when building new rooms and selecting bed rooms for new guests

Not sure if I should be proud or embarrassed about this #rust code :D

// mark building tile
if let Some(mut r) = match game.mouse_action {
    MouseAction::BuildGrill => Some(Room::new_grill()),
    MouseAction::BuildStairs => Some(Room::new_stairs()),
    MouseAction::BuildBedroom => Some(Room::new_bed_room()),
    MouseAction::BuildCorridor => Some(Room::new_corridor()),
    MouseAction::BuildRestaurant => Some(Room::new_restaurant()),
    MouseAction::BuildWineCellar => Some(Room::new_wine_cellar()),
    _ => None,
} {
    // rendering code
}

Screen Recording of my hotel game. It shows the highlighting of available bed rooms and placing new rooms