int CLuaUnitScript::GetPieceRotation(lua_State* L) { if (activeScript == NULL) return 0; LocalModelPiece* piece = ParseLocalModelPiece(L, activeScript, __FUNCTION__); return ToLua(L, piece->GetRotation()); }
int CLuaUnitScript::GetPieceTranslation(lua_State* L) { if (activeScript == NULL) return 0; LocalModelPiece* piece = ParseLocalModelPiece(L, activeScript, __FUNCTION__); return ToLua(L, piece->GetPosition() - piece->original->offset); }
void CUnitScript::TurnNow(int piece, int axis, float destination) { if (!PieceExists(piece)) { ShowScriptError("Invalid piecenumber"); return; } LocalModelPiece* p = pieces[piece]; float3 rot = p->GetRotation(); rot[axis] = destination; p->SetRotation(rot); }
void CUnitScript::MoveNow(int piece, int axis, float destination) { if (!PieceExists(piece)) { ShowScriptError("Invalid piecenumber"); return; } LocalModelPiece* p = pieces[piece]; float3 pos = p->GetPosition(); pos[axis] = pieces[piece]->original->offset[axis] + destination; p->SetPosition(pos); }
int CLuaUnitScript::GetPiecePosDir(lua_State* L) { if (activeScript == NULL) { return 0; } LocalModelPiece* piece = ParseLocalModelPiece(L, activeScript, __FUNCTION__); float3 pos, dir; if (!piece->GetEmitDirPos(pos, dir)) { return 0; } ToLua(L, pos); ToLua(L, dir); return 6; }
LocalModelPiece* LocalModel::CreateLocalModelPieces(const S3DModelPiece* mpParent, size_t pieceNum) { LocalModelPiece* lmpParent = new LocalModelPiece(mpParent); pieces.push_back(lmpParent); LocalModelPiece* lmpChild = NULL; for (unsigned int i = 0; i < mpParent->GetChildCount(); i++) { lmpChild = CreateLocalModelPieces(mpParent->GetChild(i), ++pieceNum); lmpChild->SetParent(lmpParent); lmpParent->AddChild(lmpChild); } return lmpParent; }