Da ich über alle Daten der Fahrzeuge verfüge, wollte ich das gesamte Vehicle-Geschwindigkeits-System überarbeitet bzw. überrechnen und somit die Velocity neuberechnen, um auch gegen Cheater vorzubeugen, ob es sich als effizient erweisen wird, werde ich ja dann sehen.
Momentan habe ich die Velocity immer folgendermaßen manipuliert (basiert auf keine Formeln und ist auch fehlerhaft, zB bei spontanen Richtungsänderungen):
//maxSpeed ist die maximale Geschwindigkeit eines Fahrzeuges
//newSpeed ist die Differenz zwischen der maximalen Geschwindigkeit eines Fahrzeuges und der momentanen Geschwindigkeit
newSpeed = maxSpeed - newSpeed;
newSpeed /= acceleration; //acceleration entspricht der Beschleunigung
//x, y, z sind die Vektorkoordinaten der Velocity
//z habe ich erstmal ausgelassen
x += x * (float) newSpeed;
y += x * (float) newSpeed;
velocity.set(x, y, z);
vehicle.setVelocity(velocity);
Nun habe ich Formeln wie folgt gefunden:
Vf = Vi + (a * t)
Vf -- final velocity
Vi -- initial velocity
a -- acceleration
t -- time
P = m * v (Ich muss die Masse mitbeachten)
oder
Vfinal = (F*t) / m
Nun stellt sich die eigentliche Frage: Wie wird die eigentliche Velocity berechnet? Wie groß ist die Zeit, also t? Wie berechne ich die Masse mitein? Was muss ich noch beachten beim Beschleunigen? Oder ist das alles in SAMP gar nicht machbar?
//edit das habe ich im Source gefunden:
void CPhysical::GetSpeed(CVector &speed, CVector point)
{
CVector inertiaTensor;
if(!bInfiniteMass)
{
inertialTensor = m_xyz->matrix * m_center_of_mass
}
point -= inertialTensor;
CVector total_momentum = m_angular_velocity + m_friction_turn_force;
speed = m_friction_move_force + m_linear_velocity + total_momentum.CrossProduct(point);
}
Alles anzeigen
//weiteres hier:
https://github.com/jte/GTASA/b…ine/Physics/CPhysical.cpp