29 iInvRot = G3D::Matrix3::fromEulerAnglesZYX(G3D::pif() * spawn.
iRot.y / 180.f, G3D::pif() * spawn.
iRot.x / 180.f, G3D::pif() * spawn.
iRot.z / 180.f).inverse();
40 float time = pRay.intersectionTime(
iBound);
41 if (time == G3D::finf())
55 Ray modRay(p,
iInvRot * pRay.direction());
71 std::cout <<
"<object not loaded>\n";
83 Vector3 zDirModel =
iInvRot * Vector3(0.f, 0.f, -1.f);
89 Vector3 modelGround = pModel + zDist * zDirModel;
124 uint32 check = 0, nameLen;
125 check += fread(&spawn.
flags,
sizeof(
uint8), 1, rf);
130 std::cout <<
"Error reading ModelSpawn!\n";
133 check += fread(&spawn.
adtId,
sizeof(
uint8), 1, rf);
134 check += fread(&spawn.
ID,
sizeof(
uint32), 1, rf);
135 check += fread(&spawn.
iPos,
sizeof(
float), 3, rf);
136 check += fread(&spawn.
iRot,
sizeof(
float), 3, rf);
137 check += fread(&spawn.
iScale,
sizeof(
float), 1, rf);
142 check += fread(&bLow,
sizeof(
float), 3, rf);
143 check += fread(&bHigh,
sizeof(
float), 3, rf);
144 spawn.
iBound = G3D::AABox(bLow, bHigh);
146 check += fread(&nameLen,
sizeof(
uint32), 1, rf);
147 if (check !=
uint32(has_bound ? 17 : 11))
149 std::cout <<
"Error reading ModelSpawn!\n";
155 std::cout <<
"Error reading ModelSpawn, file name too long!\n";
158 check = fread(nameBuff,
sizeof(
char), nameLen, rf);
159 if (check != nameLen)
161 std::cout <<
"Error reading ModelSpawn!\n";
164 spawn.
name = std::string(nameBuff, nameLen);
171 check += fwrite(&spawn.
flags,
sizeof(
uint8), 1, wf);
172 check += fwrite(&spawn.
adtId,
sizeof(
uint8), 1, wf);
173 check += fwrite(&spawn.
ID,
sizeof(
uint32), 1, wf);
174 check += fwrite(&spawn.
iPos,
sizeof(
float), 3, wf);
175 check += fwrite(&spawn.
iRot,
sizeof(
float), 3, wf);
176 check += fwrite(&spawn.
iScale,
sizeof(
float), 1, wf);
180 check += fwrite(&spawn.
iBound.low(),
sizeof(
float), 3, wf);
181 check += fwrite(&spawn.
iBound.high(),
sizeof(
float), 3, wf);
184 check += fwrite(&nameLen,
sizeof(
uint32), 1, wf);
185 if (check !=
uint32(has_bound ? 17 : 11))
return false;
186 check = fwrite(spawn.
name.c_str(),
sizeof(
char), nameLen, wf);
187 if (check != nameLen)
return false;
bool GetLiquidLevel(const G3D::Vector3 &pos, float &liqHeight) const
bool GetLocationInfo(G3D::Vector3 const &p, LocationInfo &info) const
bool GetLiquidLevel(G3D::Vector3 const &p, LocationInfo &info, float &liqHeight) const
bool intersectRay(G3D::Ray const &pRay, float &pMaxDist, bool pStopAtFirstHit, ModelIgnoreFlags ignoreFlags) const
bool IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit, ModelIgnoreFlags ignoreFlags) const
bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, GroupLocationInfo &info) const
const GroupModel * hitModel
GroupModel const * hitModel
ModelInstance const * hitInstance
static bool readFromFile(FILE *rf, ModelSpawn &spawn)
static bool writeToFile(FILE *rw, ModelSpawn const &spawn)