//======================================================================== void AHexEditorActor::UpdateBarrierPlacing() { if (m_CurrentBarrier) { check(m_InputType == InputMode::Barriers); Raycast<AHexTileActor>(this, [&](auto& resultActor, auto& traceResult) { auto& coords = resultActor->GetCoordinates(); auto tilePos = m_Grid.GetPosition(coords); auto toHit = traceResult.ImpactPoint - tilePos; auto nId = GetNeighborId(toHit); auto neighborRelativeCoordinates = T_HexGrid::HorizontalNeighborIndexes[nId]; auto pos = m_Grid.GetPositionBetweenTiles(coords, coords + neighborRelativeCoordinates); m_CurrentBarrier->SetActorLocation(pos); m_CurrentBarrier->SetActorRotation(FRotator(0, 60 * -(int)nId, 0)); m_CurrentBarrier->SetOwningTileBeforePlace(resultActor, nId); }, [&]() { m_CurrentBarrier->SetOwningTileBeforePlace(nullptr); }); } }
void LatticeBuilder::Init(Input &in) { istringstream iss(in.getAttribute<string>("dims")); copy(istream_iterator<int>(iss), istream_iterator<int>(), back_inserter(TileMat)); nD = TileMat.size(); int id = 0; Site unitCell; vector<Input> siteList = in.getChild("Site").getChildList(); for (int i=0; i<siteList.size(); ++i) { Subsite ss; ss.id = id; id += 1; ss.V = siteList[i].getAttribute<RealType>("V"); ss.U = siteList[i].getAttribute<RealType>("U"); istringstream hss(siteList[i].getAttribute<string>("J") ); copy(istream_iterator<RealType>(hss), istream_iterator<RealType>(), back_inserter(ss.J_ij)); istringstream iss(siteList[i].getAttribute<string>("T") ); copy(istream_iterator<RealType>(iss), istream_iterator<RealType>(), back_inserter(ss.T_ij)); vector<int> siteData; istringstream jss(siteList[i].getText("Topology")); copy(istream_iterator<int>(jss), istream_iterator<int>(), back_inserter(siteData)); int nn = siteData.size()/(nD+1.); for(int i=0; i<nn; i++) { Neighbor n; n.dL.resize(nD); n.ss = siteData[i*(nD+1)]; for(int j=0; j<nD; j++) n.dL[j] = siteData[1+j + i*(nD+1)]; ss.addNeighbor(n); } unitCell.add(ss); } unitCell.id = 0; nLatticeSites = 1; for(int i=0; i<nD; i++) nLatticeSites *= TileMat[i]; Sites.resize(nLatticeSites, unitCell); nSubSites = unitCell.nSubSites(); nSites = nLatticeSites*nSubSites; for(int i=0;i<nLatticeSites;i++) { Sites[i].id=i; for(int j=0;j<nSubSites;j++) { Sites[i].SubSites[j].globalId=i*nSubSites+j; Sites[i].SubSites[j].nn_ij.resize(Sites[i].SubSites[j].T_ij.size()); for(int k=0;k<Sites[i].SubSites[j].T_ij.size();k++) Sites[i].SubSites[j].nn_ij[k] = GetNeighborId(i, Sites[i].SubSites[j].nn[k])*nSubSites + Sites[i].SubSites[j].nn[k].ss; } } };