From 631c1226691505624c08995b6a2ac81e46a9b17e Mon Sep 17 00:00:00 2001 From: tslil clingman <> Date: Sun, 5 Sep 2021 21:30:31 -0400 Subject: In response to issue #9629, correct usingnamespace usage --- src/level.zig | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/level.zig (limited to 'src/level.zig') diff --git a/src/level.zig b/src/level.zig new file mode 100644 index 0000000..5a63ebb --- /dev/null +++ b/src/level.zig @@ -0,0 +1,68 @@ +// This file is part of ZiRC +// +// Copyright (C) 2021, tslil clingman +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +const std = @import("std"); + +pub const Object = struct { + height : f32, + width : f32, + texture : u8, + pos_x : f32, + pos_y : f32, +}; + +pub const Cell = struct { + height: f32, + wall_texture: u8 = 0, + floor_texture: u8 = 0, + ceiling_texture: u8 = 0, + + const floor = Cell{ .height = 0 }; +}; + +pub const Map = struct { + width: u32, + height: u32, + size: f32 = 64, + cells: std.ArrayList(Cell), + objects: std.ArrayList(Object), + + pub fn deinit(self: Map) void { + self.cells.deinit(); + self.objects.deinit(); + } + + pub fn new(width: u32, height: u32, alloc: *std.mem.Allocator) !Map { + var cells = std.ArrayList(Cell).init(alloc); + try cells.ensureTotalCapacity(width * height); + try cells.appendNTimes(Cell.floor, width * height); + + var objects = std.ArrayList(Object).init(alloc); + + return Map{ .width = width, .height = height, .cells = cells, .objects = objects }; + } + + pub fn inBounds(self: Map, x: i32, y: i32) bool { + return (x < self.width and x >= 0 and y < self.height and y >= 0); + } + + pub fn lookup(self: Map, x: i32, y: i32) Cell { + // live dangerously, no bounds check + std.debug.assert(x >= 0 and y >= 0); // compiler hint? + return self.cells.items[@intCast(u32, y) * self.width + @intCast(u32, x)]; + } +}; -- cgit v1.3.1