Ejemplo n.º 1
0
void CEditShape::Attach(CEditShape* from)
{
	ApplyScale				();
	// transfer data
    from->ApplyScale		();
	Fmatrix M 				= from->_Transform();
    M.mulA_43				(_ITransform());
	for (ShapeIt it=from->shapes.begin(); it!=from->shapes.end(); it++){
		switch (it->type){
		case cfSphere:{
            Fsphere& T		= it->data.sphere;
            M.transform_tiny(T.P);
            add_sphere		(T);
		}break;
		case cfBox:{
            Fmatrix B		= it->data.box;
            B.mulA_43		(M);
            add_box			(B);
		}break;
        default: THROW;
		}
    }
    // common
    Scene->RemoveObject		(from,true,true);
    xr_delete				(from);

	ComputeBounds			();
}
Ejemplo n.º 2
0
void CSceneObject::OnShowHint(AStringVec& dest)
{
	inherited::OnShowHint(dest);
    dest.push_back(AnsiString("Reference: ")+*m_ReferenceName);
    dest.push_back(AnsiString("-------"));
    float dist			= UI->ZFar();
    SRayPickInfo pinf;
    if (m_pReference->RayPick(dist,UI->m_CurrentRStart,UI->m_CurrentRNorm,_ITransform(),&pinf)){
	    dest.push_back(AnsiString("Object Type: ")+get_token_name(eo_type_token,pinf.e_obj->m_Flags.flags));
        R_ASSERT(pinf.e_mesh);
        CSurface* surf=pinf.e_mesh->GetSurfaceByFaceID(pinf.inf.id);
        dest.push_back(AnsiString("Surface: ")+AnsiString(surf->_Name()));
        dest.push_back(AnsiString("2 Sided: ")+AnsiString(surf->m_Flags.is(CSurface::sf2Sided)?"on":"off"));
        if (pinf.e_obj->m_Flags.is(CEditableObject::eoSoundOccluder)){
	        dest.push_back(AnsiString("Game Mtl: ")+AnsiString(surf->_GameMtlName()));
            int gm_id			= surf->_GameMtl(); 
            if (gm_id!=GAMEMTL_NONE_ID){ 
                SGameMtl* mtl 	= GMLib.GetMaterialByID(gm_id);
                if (mtl)		dest.push_back(AnsiString().sprintf("Occlusion Factor: %3.2f",mtl->fSndOcclusionFactor));
            }
        }else if (pinf.e_obj->m_Flags.is(CEditableObject::eoHOM)){
        }else{
	        dest.push_back(AnsiString("Texture: ")+AnsiString(surf->_Texture()));
    	    dest.push_back(AnsiString("Shader: ")+AnsiString(surf->_ShaderName()));
        	dest.push_back(AnsiString("LC Shader: ")+AnsiString(surf->_ShaderXRLCName()));
	        dest.push_back(AnsiString("Game Mtl: ")+AnsiString(surf->_GameMtlName()));
        }
    }
}
Ejemplo n.º 3
0
bool CSceneObject::RayPick(float& dist, const Fvector& S, const Fvector& D, SRayPickInfo* pinf)
{
	if (!m_pReference) return false;
    if (::Render->occ_visible(m_TBBox))
		if (m_pReference->RayPick(dist, S, D, _ITransform(), pinf)){
        	if (pinf) pinf->s_obj = this;
            return true;
        }
	return false;
}
Ejemplo n.º 4
0
void CSceneObject::GetFullTransformToLocal( Fmatrix& m )
{
    m.set(_ITransform());
}
Ejemplo n.º 5
0
bool CSceneObject::BoxPick(const Fbox& box, SBoxPickInfoVec& pinf)
{
	if (!m_pReference) return false;
	return m_pReference->BoxPick(this, box, _ITransform(), pinf);
}
Ejemplo n.º 6
0
void CSceneObject::BoxQuery(SPickQuery& pinf)
{
	if (!m_pReference) return;
    m_pReference->BoxQuery(_Transform(), _ITransform(), pinf);
}