00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _MATERIAL_
00019 #define _MATERIAL_
00020
00021 #include <iostream>
00022 #include <map>
00023 #include <string>
00024
00025 #include "resource/ResourceHandle.h"
00026
00027 #include "util/Macros.h"
00028
00029 struct Material
00030 {
00031 Material()
00032 :_fRestitution(0.0f), _fFriction(0.0f), _fDensity(0.0f)
00033 {
00034 }
00035
00036 Material(float fRestitution, float fFriction, float fDensity)
00037 :_fRestitution(fRestitution), _fFriction(fFriction), _fDensity(fDensity)
00038 {
00039 }
00040
00041 Material(const Material & other)
00042 :_fRestitution(other._fRestitution), _fFriction(other._fFriction), _fDensity(other._fDensity)
00043 {
00044 }
00045
00046 float _fRestitution;
00047 float _fFriction;
00048 float _fDensity;
00049 };
00050
00051 DEFINE_STL_TYPE(std::map<CONCAT(std::string, Material)>, MaterialMap);
00052
00053 extern MaterialMap g_materials;
00054
00055 void InitializeMaterials(ResourceHandlePtr pResource);
00056 bool GetMaterial(const std::string & name, Material & materialOut);
00057
00058 inline std::ostream & operator<<(std::ostream& os, const Material & material)
00059 {
00060 os << material._fRestitution << " " << material._fFriction << " " << material._fDensity << " ";
00061
00062 return os;
00063 }
00064
00065 inline std::istream & operator>>(std::istream& is, Material & material)
00066 {
00067 is >> material._fRestitution >> material._fFriction >> material._fDensity;
00068
00069 return is;
00070 }
00071
00072 #endif