diff --git a/libopenage/pathfinding/cost_field.cpp b/libopenage/pathfinding/cost_field.cpp index 708f4f0682..a1142f8873 100644 --- a/libopenage/pathfinding/cost_field.cpp +++ b/libopenage/pathfinding/cost_field.cpp @@ -14,7 +14,8 @@ namespace openage::path { CostField::CostField(size_t size) : size{size}, valid_until{time::TIME_MIN}, - cells(this->size * this->size, COST_MIN) { + cells(this->size * this->size, COST_MIN), + cell_cost_history() { log::log(DBG << "Created cost field with size " << this->size << "x" << this->size); } @@ -52,6 +53,7 @@ void CostField::set_costs(std::vector &&cells, const time::time_t &valid << "; expected: " << this->cells.size()); + this->cell_cost_history.set_insert_range(valid_until, this->cells.begin(), this->cells.end()); this->cells = std::move(cells); this->valid_until = valid_until; } diff --git a/libopenage/pathfinding/cost_field.h b/libopenage/pathfinding/cost_field.h index eb72780076..df04a6ab89 100644 --- a/libopenage/pathfinding/cost_field.h +++ b/libopenage/pathfinding/cost_field.h @@ -6,6 +6,7 @@ #include #include +#include "curve/container/array.h" #include "pathfinding/types.h" #include "time/time.h" @@ -15,6 +16,8 @@ namespace coord { struct tile_delta; } // namespace coord +const unsigned int CHUNK_SIZE = 100; + namespace path { /** @@ -88,6 +91,7 @@ class CostField { * @param valid_until Time at which the cost value expires. */ inline void set_cost(size_t idx, cost_t cost, const time::time_t &valid_until) { + this->cell_cost_history.set_insert(valid_until, idx, this->cells[idx]); this->cells[idx] = cost; this->valid_until = valid_until; } @@ -162,6 +166,12 @@ class CostField { * Cost stamp vector. */ std::vector> cost_stamps; + + + /** + * Array curve recording cell cost history, + */ + curve::Array cell_cost_history; }; } // namespace path