mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
feat: placed props now initially rotate to face player
This commit is contained in:
parent
b47677a94e
commit
671f0910bf
@ -13,8 +13,6 @@ namespace NewHorizons.Utility
|
|||||||
{
|
{
|
||||||
private struct PropPlacementData
|
private struct PropPlacementData
|
||||||
{
|
{
|
||||||
public Vector3 initial_pos;
|
|
||||||
public Vector3 initial_rotation;
|
|
||||||
public string body;
|
public string body;
|
||||||
|
|
||||||
public string propPath;
|
public string propPath;
|
||||||
@ -33,7 +31,7 @@ namespace NewHorizons.Utility
|
|||||||
// TODO: RegisterProp function, call it in DetailBuilder.MakeDetail
|
// TODO: RegisterProp function, call it in DetailBuilder.MakeDetail
|
||||||
// TODO: Add default rotation and position offsets
|
// TODO: Add default rotation and position offsets
|
||||||
|
|
||||||
public static void PlaceObject(DebugRaycastData data)
|
public static void PlaceObject(DebugRaycastData data, Vector3 playerAbsolutePosition)
|
||||||
{
|
{
|
||||||
if (!data.hitObject.name.EndsWith("_Body"))
|
if (!data.hitObject.name.EndsWith("_Body"))
|
||||||
{
|
{
|
||||||
@ -51,12 +49,44 @@ namespace NewHorizons.Utility
|
|||||||
|
|
||||||
GameObject prop = DetailBuilder.MakeDetail(data.hitObject, data.hitObject.GetComponentInChildren<Sector>(), currentObject, data.pos, data.norm, 1, false);
|
GameObject prop = DetailBuilder.MakeDetail(data.hitObject, data.hitObject.GetComponentInChildren<Sector>(), currentObject, data.pos, data.norm, 1, false);
|
||||||
PropPlacementData propData = RegisterProp_WithReturn(data.bodyName, prop);
|
PropPlacementData propData = RegisterProp_WithReturn(data.bodyName, prop);
|
||||||
propData.initial_pos = data.pos;
|
|
||||||
propData.initial_rotation = data.norm;
|
|
||||||
|
|
||||||
// TODO: rotate around vertical axis to face player
|
// TODO: rotate around vertical axis to face player
|
||||||
string origEul = prop.transform.localEulerAngles.ToString();
|
//var dirTowardsPlayer = playerAbsolutePosition - prop.transform.position;
|
||||||
prop.transform.localRotation = Quaternion.LookRotation(data.norm) * Quaternion.FromToRotation(Vector3.up, Vector3.forward);
|
//dirTowardsPlayer.y = 0;
|
||||||
|
|
||||||
|
// align with surface normal
|
||||||
|
Vector3 alignToSurface = (Quaternion.LookRotation(data.norm) * Quaternion.FromToRotation(Vector3.up, Vector3.forward)).eulerAngles;
|
||||||
|
prop.transform.localEulerAngles = alignToSurface;
|
||||||
|
|
||||||
|
// rotate facing dir
|
||||||
|
GameObject g = new GameObject();
|
||||||
|
g.transform.parent = prop.transform.parent;
|
||||||
|
g.transform.localPosition = prop.transform.localPosition;
|
||||||
|
g.transform.localRotation = prop.transform.localRotation;
|
||||||
|
|
||||||
|
System.Random r = new System.Random();
|
||||||
|
prop.transform.parent = g.transform;
|
||||||
|
|
||||||
|
var dirTowardsPlayer = prop.transform.parent.transform.InverseTransformPoint(playerAbsolutePosition) - prop.transform.localPosition;
|
||||||
|
dirTowardsPlayer.y = 0;
|
||||||
|
float rotation = Quaternion.LookRotation(dirTowardsPlayer).eulerAngles.y;
|
||||||
|
prop.transform.localEulerAngles = new Vector3(0, rotation, 0);
|
||||||
|
|
||||||
|
prop.transform.parent = g.transform.parent;
|
||||||
|
GameObject.Destroy(g);
|
||||||
|
|
||||||
|
//// rotate to face player
|
||||||
|
//var dirTowardsPlayer = prop.transform.parent.transform.InverseTransformPoint(playerAbsolutePosition) - prop.transform.localPosition;
|
||||||
|
//dirTowardsPlayer.z = 0;
|
||||||
|
//float rotation = Quaternion.LookRotation(dirTowardsPlayer).eulerAngles.z;
|
||||||
|
|
||||||
|
//Logger.Log("===");
|
||||||
|
//Logger.Log(dirTowardsPlayer.ToString());
|
||||||
|
//Logger.Log(Quaternion.LookRotation(dirTowardsPlayer).eulerAngles.ToString());
|
||||||
|
//Logger.Log(alignToSurface.ToString());
|
||||||
|
//prop.transform.localEulerAngles = new Vector3(0, alignToSurface.y, alignToSurface.z);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -67,7 +67,7 @@ namespace NewHorizons.Utility
|
|||||||
internal void PlaceObject()
|
internal void PlaceObject()
|
||||||
{
|
{
|
||||||
DebugRaycastData data = Raycast();
|
DebugRaycastData data = Raycast();
|
||||||
DebugPropPlacer.PlaceObject(data);
|
DebugPropPlacer.PlaceObject(data, this.gameObject.transform.position);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void PrintRaycast()
|
internal void PrintRaycast()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user