From: Andrew C. <ac...@us...> - 2004-02-17 01:34:07
|
Update of /cvsroot/planeshift/planeshift/src/client In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23209/src/client Modified Files: pscelclient.cpp pscelclient.h psclientchar.cpp psengine.cpp psengine.h Log Message: Updated Equipment message to allow for material changes on character parts. For example can place different textures for the Torso mesh for different types of jackets ( or whatever ) Index: pscelclient.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/client/pscelclient.cpp,v retrieving revision 1.131 retrieving revision 1.132 diff -C2 -d -r1.131 -r1.132 *** pscelclient.cpp 9 Feb 2004 04:19:15 -0000 1.131 --- pscelclient.cpp 17 Feb 2004 01:25:37 -0000 1.132 *************** *** 504,508 **** return psengine->Detach( pcmesh->GetMesh(), socketName ); } ! bool GEMClientActor::InitCharData( const char* textParts, const char* equipment ) { --- 504,519 ---- return psengine->Detach( pcmesh->GetMesh(), socketName ); } ! ! bool GEMClientActor::ChangeMaterial( csString& partName, csString& newMaterial ) ! { ! return psengine->ChangeMaterial( pcmesh->GetMesh(), partName, newMaterial ); ! } ! ! bool GEMClientActor::RemoveMaterial( csString& partName ) ! { ! return psengine->DefaultMaterial( pcmesh->GetMesh(), partName ); ! } ! ! bool GEMClientActor::InitCharData( const char* textParts, const char* equipment ) { Index: pscelclient.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/client/pscelclient.h,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** pscelclient.h 9 Feb 2004 04:19:15 -0000 1.42 --- pscelclient.h 17 Feb 2004 01:25:37 -0000 1.43 *************** *** 167,170 **** --- 167,182 ---- bool RemoveFromSocket( const char* socketName ); + /** Change the material that is on one of the submeshes ( part ). + * + * @param partName The name of the submesh the material is for. + * @param material The name of the material to place on this part. + * + * @return true If the material was successfully placed onto part ( mesh ). + */ + bool ChangeMaterial( csString& partName, csString& newMaterial ); + + /// Remove the material and use the default one for a part ( mesh ). + bool RemoveMaterial( csString& partName ); + const char* GetGuildName() { return guildName; } csRef<iPcLinearMovement> pcmove; Index: psclientchar.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/client/psclientchar.cpp,v retrieving revision 1.85 retrieving revision 1.86 diff -C2 -d -r1.85 -r1.86 *** psclientchar.cpp 2 Feb 2004 00:01:51 -0000 1.85 --- psclientchar.cpp 17 Feb 2004 01:25:37 -0000 1.86 *************** *** 242,245 **** --- 242,275 ---- entity = object->GetEntity(); + if ( equip.type == psEquipmentMessage::EQUIP ) + { + // If there is a mesh to attach then attach to socket on model. + if ( equip.mesh.Length() > 0 ) + { + equip.mesh.Append( ".spr" ); + object->AttachToSocket( equip.slot, equip.mesh ); + } + + // This is a part( ie texture ) change so change the texture for that part. + if ( equip.part.Length() > 0 ) + { + object->ChangeMaterial( equip.part, equip.texture ); + } + } + else + { + if ( equip.mesh.Length() > 0 ) + { + object->RemoveFromSocket( equip.slot ); + } + + // This is a part( ie texture ) change so change the texture for that part. + if ( equip.part.Length() > 0 ) + { + object->RemoveMaterial( equip.part ); + } + } + + /* if ( equip.type == psEquipmentMessage::EQUIP ) *************** *** 259,262 **** --- 289,293 ---- sub->HandleMessage( me ); } + */ } Index: psengine.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/client/psengine.cpp,v retrieving revision 1.336 retrieving revision 1.337 diff -C2 -d -r1.336 -r1.337 *** psengine.cpp 14 Feb 2004 06:42:58 -0000 1.336 --- psengine.cpp 17 Feb 2004 01:25:37 -0000 1.337 *************** *** 973,976 **** --- 973,1010 ---- } + bool psEngine::ChangeMaterial( iMeshWrapper* mesh, csString& part, csString& meshName ) + { + csRef<iSpriteCal3DState> state = SCF_QUERY_INTERFACE( mesh->GetMeshObject(), iSpriteCal3DState ); + if ( state ) + { + iMaterialWrapper* material = LoadMaterial( meshName, meshName ); + if ( !material ) + return false; + else + { + state->SetMaterial( part, material ); + return true; + } + } + else + { + return false; + } + } + + bool psEngine::DefaultMaterial( iMeshWrapper* mesh, csString& part ) + { + csRef<iSpriteCal3DFactoryState> state = SCF_QUERY_INTERFACE( mesh->GetMeshObject()->GetFactory(), iSpriteCal3DFactoryState ); + + if ( state ) + { + csString materialName = state->GetDefaultMaterial( part ); + return ChangeMaterial( mesh, part, materialName ); + } + else + { + return false; + } + } // ---------------------------------------------------------------------------- Index: psengine.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/client/psengine.h,v retrieving revision 1.108 retrieving revision 1.109 diff -C2 -d -r1.108 -r1.109 *** psengine.h 14 Feb 2004 06:42:59 -0000 1.108 --- psengine.h 17 Feb 2004 01:25:37 -0000 1.109 *************** *** 218,221 **** --- 218,239 ---- + /** Changes the material that is on a mesh. + * Assumes that the mesh is infact a cal3d state mesh. + * @param mesh The main mesh wrapper + * @param part The name of the sub mesh that we want to change the material on. + * @param material The name of the new material that this part( submesh ) should be. + * + * @return true if the material was placed on the mesh successfully. + */ + bool ChangeMaterial( iMeshWrapper* mesh, csString& part, csString& material ); + + /** Changes the materail on a submesh back to the default material. + * @param mesh The main mesh wrapper + * @param part The name of the sub mesh that we want to revert back to using default. + * + * @return true if the default material was placed back on the submesh. + */ + bool DefaultMaterial( iMeshWrapper* mesh, csString& part ); + private: /// queries all needed plugins |