示例#1
0
//========================================================================
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);
			});
	}
}
示例#2
0
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;
    }
  }

};