Цитата:
Сообщение от Vasya
Поковырял FM водоплавающего Авенжера...
|
Берем DJ и ковыряем класс Gear....
Это чтоб иметь представления о параметрах, которыми приходится оперировать в ФМ...
Код:
........
public void ground(FlightModel flightmodel, boolean flag, boolean flag1)
{
FM = flightmodel;
bIsMaster = flag;
onGround = flag1;
FM.Vrel.x = -FM.Vwld.x;
FM.Vrel.y = -FM.Vwld.y;
FM.Vrel.z = -FM.Vwld.z;
for(int i = 0; i < 2; i++)
if(fatigue[i] > 0)
fatigue[i]--;
Pn.set(FM.Loc);
Pn.z = Engine.cur.land.HQ(Pn.x, Pn.y);
double d1 = Pn.z;
screenHQ = d1;
if(FM.Loc.z - d1 > 50D && !bFlatTopGearCheck)
{
turnOffEffects();
arrestorVSink = -50F;
return;
}
isWater = Engine.cur.land.isWater(Pn.x, Pn.y);
if(isWater)
roughness = 0.5D;
D0 = Engine.cur.land.EQN(Pn.x, Pn.y, Normal);
bUnderDeck = false;
BigshipGeneric bigshipgeneric = null;
if(bFlatTopGearCheck)
{
corn.set(FM.Loc);
corn1.set(FM.Loc);
corn1.z -= 20D;
Actor actor = Engine.collideEnv().getLine(corn, corn1, false, clipFilter, Pship);
if(actor instanceof BigshipGeneric)
{
Pn.z = Pship.z + 0.5D;
d1 = Pn.z;
isWater = false;
bUnderDeck = true;
actor.getSpeed(Vship);
FM.Vrel.add(Vship);
bigshipgeneric = (BigshipGeneric)actor;
bigshipgeneric.addRockingSpeed(FM.Vrel, Normal, FM.Loc);
if(flightmodel.AS.isMaster() && bigshipgeneric.getAirport() != null && flightmodel.CT.bHasArrestorControl)
{
if(!bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor) && FM.Vrel.lengthSquared() > 10D && flightmodel.CT.getArrestor() > 0.1F)
{
bigshipgeneric.requestTowAircraft((Aircraft)flightmodel.actor);
if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor))
{
flightmodel.AS.setFlatTopString(bigshipgeneric, bigshipgeneric.towPortNum);
if((FM instanceof RealFlightModel) && bIsMaster && ((RealFlightModel)FM).isRealMode())
((RealFlightModel)FM).producedShakeLevel = 5F;
((Aircraft)flightmodel.actor).sfxTow();
}
}
if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor) && FM.Vrel.lengthSquared() < 1.0D && World.Rnd().nextFloat() < 0.008F)
{
bigshipgeneric.requestDetowAircraft((Aircraft)flightmodel.actor);
flightmodel.AS.setFlatTopString(bigshipgeneric, -1);
}
}
if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor))
{
int k = bigshipgeneric.towPortNum;
Point3d apoint3d[] = bigshipgeneric.getShipProp().propAirport.towPRel;
bigshipgeneric.pos.getAbs(l0);
l0.transform(apoint3d[k * 2], p0);
l0.transform(apoint3d[k * 2 + 1], p1);
p0.x = 0.5D * (p0.x + p1.x);
p0.y = 0.5D * (p0.y + p1.y);
p0.z = 0.5D * (p0.z + p1.z);
flightmodel.actor.pos.getAbs(l0);
l0.transformInv(p0);
l0.set(0.0D, 0.0D, 0.0D, 0.0F, 0.0F, 0.0F);
bigshipgeneric.towHook.computePos(flightmodel.actor, new Loc(l0), l0);
v0.sub(p0, l0.getPoint());
if(v0.x > 0.0D)
{
if(bigshipgeneric.isTowAircraft((Aircraft)flightmodel.actor))
{
bigshipgeneric.requestDetowAircraft((Aircraft)flightmodel.actor);
flightmodel.AS.setFlatTopString(bigshipgeneric, -1);
}
} else
{
tmpV.set(FM.Vrel);
flightmodel.actor.pos.getAbsOrient().transformInv(tmpV);
if(tmpV.x < 0.0D)
{
double d3 = v0.length();
v0.normalize();
arrestorVAngle = (float)Math.toDegrees(Math.asin(v0.z));
v0.scale(1000D * d3);
flightmodel.GF.add(v0);
v0.scale(0.29999999999999999D);
v0.cross(l0.getPoint(), v0);
flightmodel.GM.add(v0);
}
}
} else
{
arrestorVAngle = 0.0F;
}
}
}
.........