This is the collision-detection and subsequent translation of the city chunks.
public override void _PhysicsProcess(float deltaTime) {
Transform transform = base.GetTransform();
Vector3 dir;
if (!flying)
dir = new Vector3(transform.basis.z.x*(float)deltaTime*100f, transform.basis.z.y*(float)deltaTime*100f, transform.basis.z.z*(float)deltaTime*100f);
else dir = new Vector3(transform.basis.y.x*(float)deltaTime*300f*currentSpeed, transform.basis.y.y*(float)deltaTime*300f*currentSpeed+(up*deltaTime), transform.basis.y.z*(float)deltaTime*300f*currentSpeed);
KinematicCollision collision = MoveAndCollide(dir);
if (collision == null)
return;
Transform globalT = GetGlobalTransform();
// Vector3 xTranslation = new Vector3(globalT.basis.x*new Vector3(-9126f, 0f, 0f));
// GD.Print("Translation: "+xTranslation);
Vector3 xTranslation = new Vector3(-9126f, 0f, 0f);
StaticBody collider = collision.GetCollider() as StaticBody;
if (collider.GetName().Equals("Chunk1StaticBody") && (int.Parse(OS.GetTime()["minute"].ToString()) > lastColMinute || int.Parse(OS.GetTime()["second"].ToString()) > lastColSecond+2)) {
chunk3.Translate(xTranslation);
string minute = OS.GetTime()["minute"].ToString(), second = OS.GetTime()["second"].ToString();
lastColMinute = int.Parse(minute);
lastColSecond = int.Parse(second);
(collider.GetNode("CollisionShape") as CollisionShape).Disabled = true;
GD.Print("Moved chunk 3. Time: "+lastColMinute +": "+lastColSecond);
}
else if (collider.GetName().Equals("Chunk2StaticBody")) {
city.Translate(xTranslation);
(collider.GetNode("CollisionShape") as CollisionShape).Disabled = true;
}
else if (collider.GetName().Equals("Chunk3StaticBody")) {
(collider.GetNode("CollisionShape") as CollisionShape).Disabled = true;
chunk2.Translate(xTranslation);
}
}