private void ProcessSite(MapSiteInstance site, HierarchyTransform t) { if (Process()) { if (site.Def.SubSites.Count != site.SubSites.Count) { for (int i = 0; i < site.Def.SubSites.Count; i++) { //has free subSites if (TryAttach()) { foreach (var siteDef in _def.Palette.Shuffle()) { if (site.Def.SubSites[i].CanPlace(site.World, siteDef.Def, t)) { if (DoAttach()) { var instance = site.SubSites[i] = new MapSiteInstance(siteDef, site.Def.SubSites[i].Pos, site.Def.SubSites[i].Rot, false); //var localT = new HierarchyTransform(site.Pos, site.Rot, t); var subT = new HierarchyTransform(instance.Pos, instance.Rot, t); instance.GlobalPos = subT.GlobalPos; instance.GlobalRot = subT.GlobalRot; Sites.Add(instance); var box = new OverlapBox(instance.GlobalPos, Vec2.New(instance.Def.SizeX, instance.Def.SizeY), instance.GlobalRot, instance.AttachedToBottom); site.World.Add(box); _sitesCount++; if (_sitesCount >= _def.SitesCount) { return; } break; } } } } } } } foreach (var subSite in site.SubSites) { var localT = new HierarchyTransform(subSite.Value.Pos, subSite.Value.Rot, t); if (Process()) { ProcessSite(subSite.Value, localT); } if (Process()) { ProcessConnections(site, subSite.Value, localT); } } }
internal void AddFailedBox(OverlapBox box) { _failedShapes.Add(box); }