void EDetailManager::GetSlotRect(Frect& rect, int sx, int sz){ float x = fromSlotX(sx); float z = fromSlotZ(sz); rect.x1 = x-DETAIL_SLOT_SIZE_2+EPS_L; rect.y1 = z-DETAIL_SLOT_SIZE_2+EPS_L; rect.x2 = x+DETAIL_SLOT_SIZE_2-EPS_L; rect.y2 = z+DETAIL_SLOT_SIZE_2-EPS_L; }
void EDetailManager::OnRender(int priority, bool strictB2F) { if (dtSlots){ if (1==priority){ if (false==strictB2F){ if (m_Flags.is(flSlotBoxesDraw)){ RCache.set_xform_world(Fidentity); Device.SetShader (Device.m_WireShader); Fvector c; Fbox bbox; u32 inactive = 0xff808080; u32 selected = 0xffffffff; float dist_lim = 75.f*75.f; for (u32 z=0; z<dtH.size_z; z++){ c.z = fromSlotZ(z); for (u32 x=0; x<dtH.size_x; x++){ bool bSel = m_Selected[z*dtH.size_x+x]; DetailSlot* slot = dtSlots+z*dtH.size_x+x; c.x = fromSlotX(x); c.y = slot->r_ybase()+slot->r_yheight()*0.5f; //(slot->y_max+slot->y_min)*0.5f; float dist = Device.m_Camera.GetPosition().distance_to_sqr(c); if ((dist<dist_lim)&&::Render->ViewBase.testSphere_dirty(c,DETAIL_SLOT_SIZE_2)){ bbox.min.set(c.x-DETAIL_SLOT_SIZE_2, slot->r_ybase(), c.z-DETAIL_SLOT_SIZE_2); bbox.max.set(c.x+DETAIL_SLOT_SIZE_2, slot->r_ybase()+slot->r_yheight(), c.z+DETAIL_SLOT_SIZE_2); bbox.shrink (0.05f); DU_impl.DrawSelectionBox(bbox,bSel?&selected:&inactive); } } } } }else{ RCache.set_xform_world (Fidentity); if (m_Flags.is(flBaseTextureDraw)) m_Base.Render (m_Flags.is(flBaseTextureBlended)); if (m_Flags.is(flObjectsDraw)) CDetailManager::Render (); } } } }