spawn area nodes improvements
This commit is contained in:
parent
7c12f31ed9
commit
987ee5c2d3
@ -77,7 +77,7 @@ pub const Areas = struct {
|
||||
return valuesToRandomise;
|
||||
}
|
||||
|
||||
pub fn getNodes(self: *Areas) ![]str_node.Node {
|
||||
pub fn getNodes(self: *const Areas) ![]str_node.Node {
|
||||
var nodes = try self.allocator.alloc(str_node.Node, self.areas.len);
|
||||
|
||||
for (0..self.areas.len) |i| {
|
||||
|
@ -24,7 +24,6 @@ pub const SpawnArea = struct {
|
||||
return new_spawn;
|
||||
}
|
||||
|
||||
// todo if window size changes this needs to be recalculated
|
||||
pub fn setLocation(self: *SpawnArea) void {
|
||||
self.location = switch (self.area) {
|
||||
.top_left => rl.Vector2{ .x = 0, .y = 0 },
|
||||
|
@ -17,6 +17,7 @@ pub fn main() !void {
|
||||
rl.initWindow(globals.getScreenWidth(), globals.getScreenHeight(), "Promet SIM");
|
||||
defer rl.closeWindow();
|
||||
|
||||
rl.setExitKey(.null);
|
||||
rl.maximizeWindow();
|
||||
rl.setTargetFPS(60);
|
||||
|
||||
@ -26,6 +27,8 @@ pub fn main() !void {
|
||||
var road_manager = roadman_str.RoadManager.init(allocator);
|
||||
defer road_manager.deinit();
|
||||
|
||||
try road_manager.addAreaNodes(area_manager);
|
||||
|
||||
while (!rl.windowShouldClose()) {
|
||||
rl.beginDrawing();
|
||||
defer rl.endDrawing();
|
||||
@ -36,6 +39,9 @@ pub fn main() !void {
|
||||
if (globals.checkWindowSizeChanged(new_width, new_height)) {
|
||||
globals.setWindowSize(new_width, new_height);
|
||||
area_manager.recalculate();
|
||||
try road_manager.updateAreaNodes(area_manager);
|
||||
// todo this will bring some trouble because what if other nodes/roads, when resized, will be placed upon existing spawn area
|
||||
|
||||
}
|
||||
|
||||
rl.clearBackground(.light_gray);
|
||||
@ -43,5 +49,6 @@ pub fn main() !void {
|
||||
try road_manager.inputHandler();
|
||||
road_manager.draw();
|
||||
area_manager.draw();
|
||||
road_manager.drawNodes();
|
||||
}
|
||||
}
|
||||
|
@ -65,6 +65,8 @@ pub const RoadManager = struct {
|
||||
|
||||
fn clearRoads(self: *RoadManager) void {
|
||||
self.roads.clearAndFree();
|
||||
// todo this will delete spawn nodes which MUST NOT be deleted
|
||||
// fix at earliest convinience
|
||||
self.nodes.clearAndFree();
|
||||
}
|
||||
|
||||
@ -181,30 +183,28 @@ pub const RoadManager = struct {
|
||||
|
||||
pub fn draw(self: *const RoadManager) void {
|
||||
// if last road is being drawn display node marker
|
||||
const last = self.roads.getLastOrNull();
|
||||
const pos = rl.getMousePosition();
|
||||
const marker_node = node_str.Node.init(pos);
|
||||
var draw_marker = false;
|
||||
|
||||
if (last != null and last.?.end_point == null) {
|
||||
draw_marker = true;
|
||||
|
||||
// might have to put it in one function because we check this two times
|
||||
// todo canCreateNode and canCreateRoad should be part of node/road struct
|
||||
if (rl.Vector2.distance(last.?.start_point, pos) < self.min_distance) {
|
||||
draw_marker = false;
|
||||
self.roads.items[self.getLastIndex().?].setColor(str.RoadState.illegal);
|
||||
}
|
||||
}
|
||||
|
||||
for (self.roads.items) |*road| {
|
||||
road.draw();
|
||||
// reset the road colour
|
||||
if (!road.isValid())
|
||||
road.*.setColor(str.RoadState.valid);
|
||||
}
|
||||
}
|
||||
|
||||
if (draw_marker)
|
||||
marker_node.draw(self.canCreateNode(pos));
|
||||
pub fn drawNodes(self: *const RoadManager) void {
|
||||
const last = self.roads.getLastOrNull();
|
||||
const pos = rl.getMousePosition();
|
||||
const marker_node = node_str.Node.init(pos);
|
||||
|
||||
if (last != null and last.?.end_point == null) {
|
||||
// todo canCreateNode and canCreateRoad should be part of node/road struct
|
||||
if (rl.Vector2.distance(last.?.start_point, pos) < self.min_distance) {
|
||||
// todo we can maybe make this at draw() fn in road struct
|
||||
self.roads.items[self.getLastIndex().?].setColor(str.RoadState.illegal);
|
||||
} else {
|
||||
marker_node.draw(self.canCreateNode(pos));
|
||||
}
|
||||
}
|
||||
|
||||
if (self.mode != str.InputMode.node) return;
|
||||
for (self.nodes.items) |node| {
|
||||
@ -228,10 +228,19 @@ pub const RoadManager = struct {
|
||||
self.selected_road = null;
|
||||
}
|
||||
|
||||
pub fn getAreaNodes(self: *RoadManager, areas: area_str.Areas) !void {
|
||||
pub fn addAreaNodes(self: *RoadManager, areas: area_str.Areas) !void {
|
||||
const nodes = try areas.getNodes();
|
||||
defer self.allocator.free(nodes);
|
||||
|
||||
try self.nodes.appendSlice(nodes);
|
||||
}
|
||||
|
||||
pub fn updateAreaNodes(self: *RoadManager, areas: area_str.Areas) !void {
|
||||
const nodes = try areas.getNodes();
|
||||
defer self.allocator.free(nodes);
|
||||
|
||||
for (0..nodes.len) |i| {
|
||||
self.nodes.items[i] = nodes[i];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user