Merge pull request #38 from j6t/master

Synthesize power functions linear actuators.
This commit is contained in:
Leonardo Zide 2017-03-18 10:19:04 -07:00 committed by GitHub
commit 29aae2b6be
2 changed files with 40 additions and 7 deletions

View file

@ -40,7 +40,9 @@ void lcSynthInit()
{ "73129", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 }, // Technic Shock Absorber 6.5L { "73129", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 }, // Technic Shock Absorber 6.5L
{ "41838", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 }, // Technic Shock Absorber 6.5L Soft { "41838", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 }, // Technic Shock Absorber 6.5L Soft
{ "76138", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 }, // Technic Shock Absorber 6.5L Stiff { "76138", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 }, // Technic Shock Absorber 6.5L Stiff
{ "76537", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 } // Technic Shock Absorber 6.5L Extra Stiff { "76537", LC_SYNTH_PIECE_SHOCK_ABSORBER, 110.00f, 1 }, // Technic Shock Absorber 6.5L Extra Stiff
{ "61927C01", LC_SYNTH_PIECE_ACTUATOR, 270.00f, 1 }, // Technic Power Functions Linear Actuator (Extended)
{ "61927", LC_SYNTH_PIECE_ACTUATOR, 170.00f, 1 } // Technic Power Functions Linear Actuator (Contracted)
}; };
for (unsigned int InfoIdx = 0; InfoIdx < sizeof(HoseInfo) / sizeof(HoseInfo[0]); InfoIdx++) for (unsigned int InfoIdx = 0; InfoIdx < sizeof(HoseInfo) / sizeof(HoseInfo[0]); InfoIdx++)
@ -86,6 +88,7 @@ lcSynthInfo::lcSynthInfo(lcSynthType Type, float Length, int NumSections, PieceI
break; break;
case LC_SYNTH_PIECE_SHOCK_ABSORBER: case LC_SYNTH_PIECE_SHOCK_ABSORBER:
case LC_SYNTH_PIECE_ACTUATOR:
EdgeSectionLength = 0.0f; EdgeSectionLength = 0.0f;
MidSectionLength = 0.0f; MidSectionLength = 0.0f;
mRigidEdges = false; mRigidEdges = false;
@ -93,7 +96,7 @@ lcSynthInfo::lcSynthInfo(lcSynthType Type, float Length, int NumSections, PieceI
break; break;
} }
if (mType != LC_SYNTH_PIECE_SHOCK_ABSORBER) if (mType != LC_SYNTH_PIECE_SHOCK_ABSORBER && mType != LC_SYNTH_PIECE_ACTUATOR)
{ {
mStart.Transform = lcMatrix44(lcMatrix33(lcVector3(0.0f, 0.0f, 1.0f), lcVector3(1.0f, 0.0f, 0.0f), lcVector3(0.0f, 1.0f, 0.0f)), lcVector3(0.0f, 0.0f, 0.0f)); mStart.Transform = lcMatrix44(lcMatrix33(lcVector3(0.0f, 0.0f, 1.0f), lcVector3(1.0f, 0.0f, 0.0f), lcVector3(0.0f, 1.0f, 0.0f)), lcVector3(0.0f, 0.0f, 0.0f));
mMiddle.Transform = lcMatrix44Identity(); mMiddle.Transform = lcMatrix44Identity();
@ -132,6 +135,7 @@ void lcSynthInfo::GetDefaultControlPoints(lcArray<lcPieceControlPoint>& ControlP
break; break;
case LC_SYNTH_PIECE_SHOCK_ABSORBER: case LC_SYNTH_PIECE_SHOCK_ABSORBER:
case LC_SYNTH_PIECE_ACTUATOR:
Scale = 1.0f; Scale = 1.0f;
break; break;
} }
@ -139,15 +143,22 @@ void lcSynthInfo::GetDefaultControlPoints(lcArray<lcPieceControlPoint>& ControlP
float HalfLength = mLength / 2.0f; float HalfLength = mLength / 2.0f;
Scale = lcMin(Scale, HalfLength); Scale = lcMin(Scale, HalfLength);
if (mType != LC_SYNTH_PIECE_SHOCK_ABSORBER) switch (mType)
{ {
default:
ControlPoints[0].Transform = lcMatrix44Translation(lcVector3(-HalfLength, 0.0f, 0.0f)); ControlPoints[0].Transform = lcMatrix44Translation(lcVector3(-HalfLength, 0.0f, 0.0f));
ControlPoints[1].Transform = lcMatrix44Translation(lcVector3( HalfLength, 0.0f, 0.0f)); ControlPoints[1].Transform = lcMatrix44Translation(lcVector3( HalfLength, 0.0f, 0.0f));
} break;
else
{ case LC_SYNTH_PIECE_SHOCK_ABSORBER:
ControlPoints[0].Transform = lcMatrix44Translation(lcVector3(0.0f, 0.0f, -mLength)); ControlPoints[0].Transform = lcMatrix44Translation(lcVector3(0.0f, 0.0f, -mLength));
ControlPoints[1].Transform = lcMatrix44Translation(lcVector3(0.0f, 0.0f, 0.0f)); ControlPoints[1].Transform = lcMatrix44Translation(lcVector3(0.0f, 0.0f, 0.0f));
break;
case LC_SYNTH_PIECE_ACTUATOR:
ControlPoints[0].Transform = lcMatrix44(lcMatrix33(lcVector3(1.0f, 0.0f, 0.0f), lcVector3(0.0f, 0.0f, -1.0f), lcVector3(0.0f, 1.0f, 0.0f)), lcVector3(0.0f, 0.0f, 0.0f));
ControlPoints[1].Transform = lcMatrix44(lcMatrix33(lcVector3(1.0f, 0.0f, 0.0f), lcVector3(0.0f, 0.0f, -1.0f), lcVector3(0.0f, 1.0f, 0.0f)), lcVector3(0.0f, mLength, 0.0f));
break;
} }
ControlPoints[0].Scale = Scale; ControlPoints[0].Scale = Scale;
@ -623,6 +634,22 @@ void lcSynthInfo::AddShockAbsorberParts(lcMemFile& File, lcArray<lcMatrix44>& Se
File.WriteBuffer(Line, strlen(Line)); File.WriteBuffer(Line, strlen(Line));
} }
void lcSynthInfo::AddActuatorParts(lcMemFile& File, lcArray<lcMatrix44>& Sections) const
{
char Line[256];
lcVector3 Offset;
Offset = Sections[0].GetTranslation();
sprintf(Line, "1 25 %f %f %f 0 1 0 -1 0 0 0 0 1 47157.DAT\n", Offset[0], Offset[1], Offset[2]);
File.WriteBuffer(Line, strlen(Line));
sprintf(Line, "1 16 %f %f %f 1 0 0 0 1 0 0 0 1 62271c01.DAT\n", Offset[0], Offset[1], Offset[2]);
File.WriteBuffer(Line, strlen(Line));
Offset = Sections[1].GetTranslation();
sprintf(Line, "1 72 %f %f %f 1 0 0 0 1 0 0 0 1 62274c01.DAT\n", Offset[0], Offset[1], Offset[2]);
File.WriteBuffer(Line, strlen(Line));
}
lcMesh* lcSynthInfo::CreateMesh(const lcArray<lcPieceControlPoint>& ControlPoints) const lcMesh* lcSynthInfo::CreateMesh(const lcArray<lcPieceControlPoint>& ControlPoints) const
{ {
lcArray<lcMatrix44> Sections; lcArray<lcMatrix44> Sections;
@ -652,6 +679,10 @@ lcMesh* lcSynthInfo::CreateMesh(const lcArray<lcPieceControlPoint>& ControlPoint
case LC_SYNTH_PIECE_SHOCK_ABSORBER: case LC_SYNTH_PIECE_SHOCK_ABSORBER:
AddShockAbsorberParts(File, Sections); AddShockAbsorberParts(File, Sections);
break; break;
case LC_SYNTH_PIECE_ACTUATOR:
AddActuatorParts(File, Sections);
break;
} }
File.WriteU8(0); File.WriteU8(0);

View file

@ -9,7 +9,8 @@ enum lcSynthType
LC_SYNTH_PIECE_RIBBED_HOSE, LC_SYNTH_PIECE_RIBBED_HOSE,
LC_SYNTH_PIECE_FLEXIBLE_AXLE, LC_SYNTH_PIECE_FLEXIBLE_AXLE,
LC_SYNTH_PIECE_STRING_BRAIDED, LC_SYNTH_PIECE_STRING_BRAIDED,
LC_SYNTH_PIECE_SHOCK_ABSORBER LC_SYNTH_PIECE_SHOCK_ABSORBER,
LC_SYNTH_PIECE_ACTUATOR
}; };
struct lcSynthComponent struct lcSynthComponent
@ -47,6 +48,7 @@ protected:
void AddFlexibleAxleParts(lcMemFile& File, lcLibraryMeshData& MeshData, const lcArray<lcMatrix44>& Sections) const; void AddFlexibleAxleParts(lcMemFile& File, lcLibraryMeshData& MeshData, const lcArray<lcMatrix44>& Sections) const;
void AddStringBraidedParts(lcMemFile& File, lcLibraryMeshData& MeshData, lcArray<lcMatrix44>& Sections) const; void AddStringBraidedParts(lcMemFile& File, lcLibraryMeshData& MeshData, lcArray<lcMatrix44>& Sections) const;
void AddShockAbsorberParts(lcMemFile& File, lcArray<lcMatrix44>& Sections) const; void AddShockAbsorberParts(lcMemFile& File, lcArray<lcMatrix44>& Sections) const;
void AddActuatorParts(lcMemFile& File, lcArray<lcMatrix44>& Sections) const;
PieceInfo* mPieceInfo; PieceInfo* mPieceInfo;
lcSynthType mType; lcSynthType mType;