00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "eggMaterial.h"
00016
00017 #include "indent.h"
00018
00019 TypeHandle EggMaterial::_type_handle;
00020
00021
00022
00023
00024
00025
00026
00027 EggMaterial::
00028 EggMaterial(const string &mref_name)
00029 : EggNode(mref_name)
00030 {
00031 _flags = 0;
00032 }
00033
00034
00035
00036
00037
00038
00039 EggMaterial::
00040 EggMaterial(const EggMaterial ©)
00041 : EggNode(copy),
00042 _diff(copy._diff),
00043 _amb(copy._amb),
00044 _emit(copy._emit),
00045 _spec(copy._spec),
00046 _shininess(copy._shininess),
00047 _local(copy._local),
00048 _flags(copy._flags)
00049 {
00050 }
00051
00052
00053
00054
00055
00056
00057
00058
00059 void EggMaterial::
00060 write(ostream &out, int indent_level) const {
00061 write_header(out, indent_level, "<Material>");
00062
00063 if (has_diff()) {
00064 indent(out, indent_level + 2)
00065 << "<Scalar> diffr { " << get_diff()[0] << " }\n";
00066 indent(out, indent_level + 2)
00067 << "<Scalar> diffg { " << get_diff()[1] << " }\n";
00068 indent(out, indent_level + 2)
00069 << "<Scalar> diffb { " << get_diff()[2] << " }\n";
00070 if (get_diff()[3] != 1.0) {
00071 indent(out, indent_level + 2)
00072 << "<Scalar> diffa { " << get_diff()[3] << " }\n";
00073 }
00074 }
00075
00076 if (has_amb()) {
00077 indent(out, indent_level + 2)
00078 << "<Scalar> ambr { " << get_amb()[0] << " }\n";
00079 indent(out, indent_level + 2)
00080 << "<Scalar> ambg { " << get_amb()[1] << " }\n";
00081 indent(out, indent_level + 2)
00082 << "<Scalar> ambb { " << get_amb()[2] << " }\n";
00083 if (get_amb()[3] != 1.0) {
00084 indent(out, indent_level + 2)
00085 << "<Scalar> amba { " << get_amb()[3] << " }\n";
00086 }
00087 }
00088
00089 if (has_emit()) {
00090 indent(out, indent_level + 2)
00091 << "<Scalar> emitr { " << get_emit()[0] << " }\n";
00092 indent(out, indent_level + 2)
00093 << "<Scalar> emitg { " << get_emit()[1] << " }\n";
00094 indent(out, indent_level + 2)
00095 << "<Scalar> emitb { " << get_emit()[2] << " }\n";
00096 if (get_emit()[3] != 1.0) {
00097 indent(out, indent_level + 2)
00098 << "<Scalar> emita { " << get_emit()[3] << " }\n";
00099 }
00100 }
00101
00102 if (has_spec()) {
00103 indent(out, indent_level + 2)
00104 << "<Scalar> specr { " << get_spec()[0] << " }\n";
00105 indent(out, indent_level + 2)
00106 << "<Scalar> specg { " << get_spec()[1] << " }\n";
00107 indent(out, indent_level + 2)
00108 << "<Scalar> specb { " << get_spec()[2] << " }\n";
00109 if (get_spec()[3] != 1.0) {
00110 indent(out, indent_level + 2)
00111 << "<Scalar> speca { " << get_spec()[3] << " }\n";
00112 }
00113 }
00114
00115 if (has_shininess()) {
00116 indent(out, indent_level + 2)
00117 << "<Scalar> shininess { " << get_shininess() << " }\n";
00118 }
00119
00120 if (has_local()) {
00121 indent(out, indent_level + 2)
00122 << "<Scalar> local { " << get_local() << " }\n";
00123 }
00124
00125 indent(out, indent_level) << "}\n";
00126 }
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 bool EggMaterial::
00147 is_equivalent_to(const EggMaterial &other, int eq) const {
00148 if (eq & E_attributes) {
00149 if (_flags != other._flags ||
00150 (has_diff() && get_diff() != other.get_diff()) ||
00151 (has_amb() && get_amb() != other.get_amb()) ||
00152 (has_emit() && get_emit() != other.get_emit()) ||
00153 (has_spec() && get_spec() != other.get_spec()) ||
00154 (has_shininess() && get_shininess() != other.get_shininess()) ||
00155 (has_local() && get_local() != other.get_local())) {
00156 return false;
00157 }
00158 }
00159
00160 if (eq & E_mref_name) {
00161 if (get_name() != other.get_name()) {
00162 return false;
00163 }
00164 }
00165
00166 return true;
00167 }
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 bool EggMaterial::
00179 sorts_less_than(const EggMaterial &other, int eq) const {
00180 if (eq & E_attributes) {
00181 if (_flags != other._flags) {
00182 return _flags < (int)other._flags;
00183 }
00184 if (has_diff() && get_diff() != other.get_diff()) {
00185 return get_diff().compare_to(other.get_diff()) < 0;
00186 }
00187 if (has_amb() && get_amb() != other.get_amb()) {
00188 return get_amb().compare_to(other.get_amb()) < 0;
00189 }
00190 if (has_emit() && get_emit() != other.get_emit()) {
00191 return get_emit().compare_to(other.get_emit()) < 0;
00192 }
00193 if (has_spec() && get_spec() != other.get_spec()) {
00194 return get_spec().compare_to(other.get_spec()) < 0;
00195 }
00196 if (has_shininess() && get_shininess() != other.get_shininess()) {
00197 return get_shininess() < other.get_shininess();
00198 }
00199 if (has_local() && get_local() != other.get_local()) {
00200 return get_local() < other.get_local();
00201 }
00202 }
00203
00204 if (eq & E_mref_name) {
00205 if (get_name() != other.get_name()) {
00206 return get_name() < other.get_name();
00207 }
00208 }
00209
00210 return false;
00211 }