const CellStates = require("./Cell/CellStates"); const BodyCellFactory = require("./Cell/BodyCells/BodyCellFactory"); const SerializeHelper = require("../Utils/SerializeHelper"); class Anatomy { constructor(owner) { this.owner = owner; this.birth_distance = 4; this.clear(); } clear() { this.cells = []; this.is_producer = false; this.is_mover = false; this.has_eyes = false; } canAddCellAt(c, r) { for (var cell of this.cells) { if (cell.loc_col == c && cell.loc_row == r){ return false; } } return true; } addDefaultCell(state, c, r) { var new_cell = BodyCellFactory.createDefault(this.owner, state, c, r); this.cells.push(new_cell); return new_cell; } addRandomizedCell(state, c, r) { if (state==CellStates.eye && !this.has_eyes) { this.owner.brain.randomizeDecisions(); } var new_cell = BodyCellFactory.createRandom(this.owner, state, c, r); this.cells.push(new_cell); return new_cell; } addInheritCell(parent_cell) { var new_cell = BodyCellFactory.createInherited(this.owner, parent_cell); this.cells.push(new_cell); return new_cell; } replaceCell(state, c, r, randomize=true) { this.removeCell(c, r, true); if (randomize) { return this.addRandomizedCell(state, c, r); } else { return this.addDefaultCell(state, c, r); } } removeCell(c, r, allow_center_removal=false) { if (c == 0 && r == 0 && !allow_center_removal) return false; for (var i=0; i