|
|
|
@ -7,20 +7,29 @@ public partial class Box : Node3D {
|
|
|
|
private RigidBody3D rb;
|
|
|
|
private RigidBody3D rb;
|
|
|
|
private Vector3 rotation;
|
|
|
|
private Vector3 rotation;
|
|
|
|
private const double randomRange = 1;
|
|
|
|
private const double randomRange = 1;
|
|
|
|
|
|
|
|
|
|
|
|
public override void _Ready() {
|
|
|
|
public override void _Ready() {
|
|
|
|
rb = GetChild<RigidBody3D>(0);
|
|
|
|
rb = GetChild<RigidBody3D>(0);
|
|
|
|
rb.Position = new(GD.RandRange(-50, 50), GD.RandRange(50, 100), GD.RandRange(-50, 50));
|
|
|
|
rb.Position = new(GD.RandRange(-50, 50), GD.RandRange(50, 100), GD.RandRange(-50, 50));
|
|
|
|
rb.Rotation = new(GD.RandRange(-30, 30), GD.RandRange(-30, 30), GD.RandRange(-30, 30));
|
|
|
|
rb.Rotation = new(GD.RandRange(-30, 30), GD.RandRange(-30, 30), GD.RandRange(-30, 30));
|
|
|
|
|
|
|
|
|
|
|
|
float mass =(float)GD.RandRange(0.1, 3);
|
|
|
|
float mass =(float)GD.RandRange(0.1, 3);
|
|
|
|
rb.Mass = mass;
|
|
|
|
rb.Mass = mass;
|
|
|
|
|
|
|
|
|
|
|
|
CollisionShape3D cs = rb.GetChild<CollisionShape3D>(0);
|
|
|
|
CollisionShape3D cs = rb.GetChild<CollisionShape3D>(0);
|
|
|
|
cs.Scale = new(mass, mass, mass);
|
|
|
|
cs.Scale = new(mass, mass, mass);
|
|
|
|
|
|
|
|
|
|
|
|
rotation = new((float)GD.RandRange(-randomRange, randomRange), (float)GD.RandRange(-randomRange, randomRange), (float)GD.RandRange(-randomRange, randomRange));
|
|
|
|
rotation = new((float)GD.RandRange(-randomRange, randomRange), (float)GD.RandRange(-randomRange, randomRange), (float)GD.RandRange(-randomRange, randomRange));
|
|
|
|
rb.AddConstantTorque(rotation);
|
|
|
|
rb.AddConstantTorque(rotation);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Label3D numberLabel = cs.GetChild<CsgBox3D>(0).GetChild<Label3D>(0);
|
|
|
|
|
|
|
|
numberLabel.Text = $"{World.Instance.BoxCount}";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void _Process(double delta) {
|
|
|
|
public override void _Process(double delta) {
|
|
|
|
// rb.AngularVelocity = rotation * (float)delta;
|
|
|
|
if (rb.Position.Y < -50) {
|
|
|
|
if (rb.Position.Y < -50) QueueFree(); //Clear all boxes outside
|
|
|
|
World.Instance.DestroyBox();
|
|
|
|
|
|
|
|
QueueFree();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|