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());
57 bool hit =
iModel->IntersectRay(modRay, distance, pStopAtFirstHit, ignoreFlags);
71 std::cout <<
"<object not loaded>\n";
83 Vector3 zDirModel =
iInvRot * Vector3(0.f, 0.f, -1.f);
87 if (
iModel->GetLocationInfo(pModel, zDirModel, zDist, groupInfo))
89 Vector3 modelGround = pModel + zDist * zDirModel;
123 uint32 check = 0, nameLen;
124 check += fread(&spawn.
flags,
sizeof(
uint8), 1, rf);
129 std::cout <<
"Error reading ModelSpawn!\n";
132 check += fread(&spawn.
adtId,
sizeof(
uint8), 1, rf);
133 check += fread(&spawn.
ID,
sizeof(
uint32), 1, rf);
134 check += fread(&spawn.
iPos,
sizeof(
float), 3, rf);
135 check += fread(&spawn.
iRot,
sizeof(
float), 3, rf);
136 check += fread(&spawn.
iScale,
sizeof(
float), 1, rf);
141 check += fread(&bLow,
sizeof(
float), 3, rf);
142 check += fread(&bHigh,
sizeof(
float), 3, rf);
143 spawn.
iBound = G3D::AABox(bLow, bHigh);
145 check += fread(&nameLen,
sizeof(
uint32), 1, rf);
146 if (check !=
uint32(has_bound ? 17 : 11))
148 std::cout <<
"Error reading ModelSpawn!\n";
154 std::cout <<
"Error reading ModelSpawn, file name too long!\n";
157 check = fread(nameBuff,
sizeof(
char), nameLen, rf);
158 if (check != nameLen)
160 std::cout <<
"Error reading ModelSpawn!\n";
163 spawn.
name = std::string(nameBuff, nameLen);
170 check += fwrite(&spawn.
flags,
sizeof(
uint8), 1, wf);
171 check += fwrite(&spawn.
adtId,
sizeof(
uint8), 1, wf);
172 check += fwrite(&spawn.
ID,
sizeof(
uint32), 1, wf);
173 check += fwrite(&spawn.
iPos,
sizeof(
float), 3, wf);
174 check += fwrite(&spawn.
iRot,
sizeof(
float), 3, wf);
175 check += fwrite(&spawn.
iScale,
sizeof(
float), 1, wf);
179 check += fwrite(&spawn.
iBound.low(),
sizeof(
float), 3, wf);
180 check += fwrite(&spawn.
iBound.high(),
sizeof(
float), 3, wf);
183 check += fwrite(&nameLen,
sizeof(
uint32), 1, wf);
184 if (check !=
uint32(has_bound ? 17 : 11))
return false;
185 check = fwrite(spawn.
name.c_str(),
sizeof(
char), nameLen, wf);
186 if (check != nameLen)
return false;
bool GetLiquidLevel(const G3D::Vector3 &pos, float &liqHeight) const
std::shared_ptr< WorldModel > iModel
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
const GroupModel * hitModel
GroupModel const * hitModel
ModelInstance const * hitInstance
static bool readFromFile(FILE *rf, ModelSpawn &spawn)
static bool writeToFile(FILE *rw, ModelSpawn const &spawn)