object::object() { /* data */ mTrans = matrixAlloc(); mOrigin = new float[3]; mOriginEx = new float[3]; mAngle = new float[3]; mScale = new float[3]; matrixIdent(mTrans); vectorNull(mOrigin); vectorNull(mAngle); vectorUnit(mScale); /* physics */ mPosVel = new float[3]; mAngVel = new float[3]; vectorNull(mPosVel); vectorNull(mAngVel); mPosAcc = new float[3]; mAngAcc = new float[3]; vectorNull(mPosAcc); vectorNull(mAngAcc); mMovSpdMax = BIG_NUMBER; mRotSpdMax = BIG_NUMBER; mStyle = 0; mCollide = true; mTicks = -1; mTarget = NULL; /* attributes */ mParent = NULL; mChanged = true; }
float *vectorFromAngles(float *angles) { float *result; float **tempA; float **tempB; float **applyTrans; tempA = matrixRotation('x', angles[1]); tempB = matrixRotation('y', angles[2]); applyTrans = matrixIdent(4); applyTrans = matrixUpdate(applyTrans, matrixMult(applyTrans, tempA, 4), 4); applyTrans = matrixUpdate(applyTrans, matrixMult(applyTrans, tempB, 4), 4); result = vectorNull(4); result[2] = 1; result[3] = 1; result = vectorUpdate(result, vectorMatrixMult(result, applyTrans, 4)); matrixFree(tempA, 4); matrixFree(tempB, 4); matrixFree(applyTrans, 4); return result; }