void CellAutomataAgent::setupLayers() { Range localRect = _local->rect; Tuple memorySize = localRect.grow(1).getSize(); _computeRange = Range(memorySize).shrink(1); _globalToLocal = _computeRange.getBegin() - _local->rect.getBegin(); ALOG << "localRect: " << localRect << EL; ALOG << "computeRange: " << _computeRange << EL; _layer1 = new KGridBasic(cell_grid_t(), memorySize, true); _layer2 = new KGridBasic(cell_grid_t(), memorySize, true); evaluate(_layer2, _layer1, 0); // Setup Neighbours for(int i = _neighbours->getSize() - 1; i >= 0; i--) { PPtr<Partition> p = _neighbours->at(i); Range border = _local->rect.intersectWith(p->rect.grow(1)); Range borderOnLocal = border.translate(_globalToLocal); p->window = new KGridWindow(_layer1.AS(KGrid), borderOnLocal); p->toSend = new KRecord(border_t()); p->toSend->setGrid(BORDER_T_DATA, p->window.AS(KGrid)); p->phase = -1; KPoint(border.getBegin()).toKRecord(p->toSend->getRecord(BORDER_T_OFSET)); } }
void theme::add_object(const config& cfg) { if(const config& c = cfg.child("main_map")) { main_map_ = object(c); } if(const config& c = cfg.child("mini_map")) { mini_map_ = object(c); } if(const config& c = cfg.child("palette")) { palette_ = object(c); } if(const config& status_cfg = cfg.child("status")) { for(const config::any_child& i : status_cfg.all_children_range()) { status_.emplace(i.key, status_item(i.cfg)); } if(const config& unit_image_cfg = status_cfg.child("unit_image")) { unit_image_ = object(unit_image_cfg); } else { unit_image_ = object(); } } for(const config& p : cfg.child_range("panel")) { panel new_panel(p); set_object_location(new_panel, p["rect"], p["ref"]); panels_.push_back(new_panel); } for(const config& lb : cfg.child_range("label")) { label new_label(lb); set_object_location(new_label, lb["rect"], lb["ref"]); labels_.push_back(new_label); } for(const config& m : cfg.child_range("menu")) { menu new_menu(m); DBG_DP << "adding menu: " << (new_menu.is_context() ? "is context" : "not context") << "\n"; if(new_menu.is_context()) context_ = new_menu; else { set_object_location(new_menu, m["rect"], m["ref"]); menus_.push_back(new_menu); } DBG_DP << "done adding menu...\n"; } for(const config& a : cfg.child_range("action")) { action new_action(a); DBG_DP << "adding action: " << (new_action.is_context() ? "is context" : "not context") << "\n"; if(new_action.is_context()) action_context_ = new_action; else { set_object_location(new_action, a["rect"], a["ref"]); actions_.push_back(new_action); } DBG_DP << "done adding action...\n"; } for(const config& s : cfg.child_range("slider")) { slider new_slider(s); DBG_DP << "adding slider\n"; set_object_location(new_slider, s["rect"], s["ref"]); sliders_.push_back(new_slider); DBG_DP << "done adding slider...\n"; } if(const config& c = cfg.child("main_map_border")) { border_ = border_t(c); } }
void border_t::reset() { *this = border_t(); }