From 231833fb26444f12de87edadad8c48e2404923e8 Mon Sep 17 00:00:00 2001 From: Adrian Hedqvist Date: Wed, 27 Dec 2017 14:35:45 +0100 Subject: [PATCH] Remove some usage of raw pointers, fixes some segfaults --- src/FieldOfView.cpp | 14 +++++--------- src/FieldOfView.h | 6 ++---- src/Mapgen.cpp | 2 +- src/Tilemap.cpp | 3 +-- src/Tilemap.h | 3 ++- 5 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/FieldOfView.cpp b/src/FieldOfView.cpp index 3a16648..a5eb26c 100644 --- a/src/FieldOfView.cpp +++ b/src/FieldOfView.cpp @@ -12,17 +12,13 @@ FieldOfView::FieldOfView() { FieldOfView::FieldOfView(Tilemap *map) { this->map = map; - seen = new Tilemap(map->GetWidth(), map->GetHeight()); + seen = Tilemap(map->GetWidth(), map->GetHeight()); counter = 0; } -FieldOfView::~FieldOfView() { - delete seen; -} - void FieldOfView::calc(vec2i pos, float range) { counter++; - seen->set_tile(pos.x, pos.y, counter); + seen.set_tile(pos.x, pos.y, counter); // Once for each octant if (map != nullptr) { cast_light(1, 1.0f, 0.0f, 0, -1, -1, 0, pos.x, pos.y, range); @@ -40,11 +36,11 @@ void FieldOfView::calc(vec2i pos, float range) { } bool FieldOfView::can_see(vec2i pos) { - return seen->get_tile(pos.x, pos.y) >= counter; + return seen.get_tile(pos.x, pos.y) >= counter; } bool FieldOfView::has_seen(vec2i pos) { - return seen->get_tile(pos.x, pos.y) > 0; + return seen.get_tile(pos.x, pos.y) > 0; } void FieldOfView::cast_light(int row, float start, float end, int xx, int xy, int yx, int yy, int startX, int startY, @@ -70,7 +66,7 @@ void FieldOfView::cast_light(int row, float start, float end, int xx, int xy, in } if (sqrt(deltaX*deltaX + deltaY*deltaY) <= radius) { - seen->set_tile(currentX, currentY, counter); + seen.set_tile(currentX, currentY, counter); } if (blocked) { diff --git a/src/FieldOfView.h b/src/FieldOfView.h index b39ae02..eb8b062 100644 --- a/src/FieldOfView.h +++ b/src/FieldOfView.h @@ -6,19 +6,17 @@ #define DUNGEON_FIELDOFVIEW_H #include "vec2i.h" - -class Tilemap; +#include "Tilemap.h" class FieldOfView { Tilemap* map; unsigned int counter; + Tilemap seen; void cast_light(int row, float start, float end, int xx, int xy, int yx, int yy, int startX, int startY, float radius); public: - Tilemap* seen; FieldOfView(); FieldOfView(Tilemap* map); - ~FieldOfView(); void calc(vec2i pos, float range); bool can_see(vec2i pos); bool has_seen(vec2i pos); diff --git a/src/Mapgen.cpp b/src/Mapgen.cpp index d2cbfaf..ae1c592 100644 --- a/src/Mapgen.cpp +++ b/src/Mapgen.cpp @@ -5,7 +5,7 @@ Tilemap generate_level(int seed, int width, int height) { for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { - if (x == 0 || x == width || y == 0 || y == height) { + if (x == 0 || x == width-1 || y == 0 || y == height-1) { map.set_tile(x,y, '#'); } else { diff --git a/src/Tilemap.cpp b/src/Tilemap.cpp index 4025aa4..8187142 100644 --- a/src/Tilemap.cpp +++ b/src/Tilemap.cpp @@ -15,12 +15,11 @@ Tilemap::Tilemap(int width, int height) { this->width = width; this->height = height; - tilemap = new unsigned int[width*height]{0}; + tilemap = std::vector(width*height, 0); } Tilemap::~Tilemap() { - delete tilemap; for (auto var : entities) { delete var; } diff --git a/src/Tilemap.h b/src/Tilemap.h index 52e8678..a8952f7 100644 --- a/src/Tilemap.h +++ b/src/Tilemap.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include "Tileset.h" #include "Entity.h" @@ -8,7 +9,7 @@ class Renderer; class FieldOfView; class Tilemap { - unsigned int* tilemap; + std::vector tilemap; std::vector entities; int width; int height;