Custom player/ship rotation upon warp (#128)

Closes #128
This commit is contained in:
Nick 2022-05-19 17:05:09 -04:00
parent 39840b18a7
commit ef24245c60
3 changed files with 33 additions and 5 deletions

View File

@ -18,7 +18,16 @@ namespace NewHorizons.Builder.General
spawnGO.transform.localPosition = module.PlayerSpawnPoint; spawnGO.transform.localPosition = module.PlayerSpawnPoint;
playerSpawn = spawnGO.AddComponent<SpawnPoint>(); playerSpawn = spawnGO.AddComponent<SpawnPoint>();
if(module.PlayerSpawnRotation != null)
{
spawnGO.transform.rotation = Quaternion.Euler(module.PlayerSpawnRotation);
}
else
{
spawnGO.transform.rotation = Quaternion.FromToRotation(Vector3.up, (playerSpawn.transform.position - planetGO.transform.position).normalized); spawnGO.transform.rotation = Quaternion.FromToRotation(Vector3.up, (playerSpawn.transform.position - planetGO.transform.position).normalized);
}
spawnGO.transform.position = spawnGO.transform.position + spawnGO.transform.TransformDirection(Vector3.up) * 4f; spawnGO.transform.position = spawnGO.transform.position + spawnGO.transform.TransformDirection(Vector3.up) * 4f;
} }
if (module.ShipSpawnPoint != null) if (module.ShipSpawnPoint != null)
@ -34,9 +43,17 @@ namespace NewHorizons.Builder.General
var ship = GameObject.Find("Ship_Body"); var ship = GameObject.Find("Ship_Body");
ship.transform.position = spawnPoint.transform.position; ship.transform.position = spawnPoint.transform.position;
if(module.ShipSpawnRotation != null)
{
ship.transform.rotation = Quaternion.Euler(module.ShipSpawnRotation);
}
else
{
ship.transform.rotation = Quaternion.FromToRotation(Vector3.up, (spawnPoint.transform.position - planetGO.transform.position).normalized); ship.transform.rotation = Quaternion.FromToRotation(Vector3.up, (spawnPoint.transform.position - planetGO.transform.position).normalized);
// Move it up a bit more // Move it up a bit more when aligning to surface
ship.transform.position = ship.transform.position + ship.transform.TransformDirection(Vector3.up) * 4f; ship.transform.position = ship.transform.position + ship.transform.TransformDirection(Vector3.up) * 4f;
}
ship.GetRequiredComponent<MatchInitialMotion>().SetBodyToMatch(owRigidBody); ship.GetRequiredComponent<MatchInitialMotion>().SetBodyToMatch(owRigidBody);

View File

@ -4,7 +4,9 @@ namespace NewHorizons.External.Modules
public class SpawnModule public class SpawnModule
{ {
public MVector3 PlayerSpawnPoint { get; set; } public MVector3 PlayerSpawnPoint { get; set; }
public MVector3 PlayerSpawnRotation { get; set; }
public MVector3 ShipSpawnPoint { get; set; } public MVector3 ShipSpawnPoint { get; set; }
public MVector3 ShipSpawnRotation { get; set; }
public bool StartWithSuit { get; set; } public bool StartWithSuit { get; set; }
} }
} }

View File

@ -1099,8 +1099,17 @@
"$ref": "#/$defs/vector3", "$ref": "#/$defs/vector3",
"description": "If you want the player to spawn on the new body, set a value for this. Press \"P\" in game with Debug mode on to have the game log the position you're looking at to find a good value for this." "description": "If you want the player to spawn on the new body, set a value for this. Press \"P\" in game with Debug mode on to have the game log the position you're looking at to find a good value for this."
}, },
"playerSpawnRotation": {
"$ref": "#/$defs/vector3",
"description": "Euler angles by which the player will be oriented."
},
"shipSpawnPoint": { "shipSpawnPoint": {
"$ref": "#/$defs/vector3" "$ref": "#/$defs/vector3",
"description": "Required for the system to be accessible by warp drive."
},
"shipSpawnRotation": {
"$ref": "#/$defs/vector3",
"description": "Euler angles by which the ship will be oriented."
}, },
"startWithSuit": { "startWithSuit": {
"type": "boolean", "type": "boolean",