added parent tracking, changed spiral placement ui, preparing for placing by pointOnParent

This commit is contained in:
FreezeDriedMangoes 2022-06-02 11:45:06 -04:00
parent 53437974eb
commit 6d62d2cebf
2 changed files with 77 additions and 36 deletions

View File

@ -332,7 +332,8 @@ namespace NewHorizons.Builder.Props
var parent = parentID == -1 ? null : arcsByID[parentID]; var parent = parentID == -1 ? null : arcsByID[parentID];
GameObject arc = MakeArc(arcInfo, conversationZone, parent, textEntryID, i); GameObject arc = MakeArc(arcInfo, conversationZone, parent, textEntryID);
arc.name = $"Arc {i} - Child of {parentID}";
arcsByID.Add(textEntryID, arc); arcsByID.Add(textEntryID, arc);
@ -340,7 +341,7 @@ namespace NewHorizons.Builder.Props
} }
} }
internal static GameObject MakeArc(PropModule.NomaiTextArcInfo arcInfo, GameObject conversationZone, GameObject parent, int textEntryID, int i) internal static GameObject MakeArc(PropModule.NomaiTextArcInfo arcInfo, GameObject conversationZone, GameObject parent, int textEntryID)
{ {
GameObject arc; GameObject arc;
var type = arcInfo != null ? arcInfo.type : PropModule.NomaiTextArcInfo.NomaiTextArcType.Adult; var type = arcInfo != null ? arcInfo.type : PropModule.NomaiTextArcInfo.NomaiTextArcType.Adult;
@ -398,7 +399,6 @@ namespace NewHorizons.Builder.Props
arc.GetComponent<NomaiTextLine>().SetEntryID(textEntryID); arc.GetComponent<NomaiTextLine>().SetEntryID(textEntryID);
arc.GetComponent<MeshRenderer>().enabled = false; arc.GetComponent<MeshRenderer>().enabled = false;
arc.name = $"Arc {i}";
arc.SetActive(true); arc.SetActive(true);

View File

@ -6,6 +6,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
using static NewHorizons.External.Modules.PropModule; using static NewHorizons.External.Modules.PropModule;
@ -45,6 +46,9 @@ namespace NewHorizons.Utility.DebugMenu
public string planetName; public string planetName;
public int id; public int id;
public int parentID;
public int pointOnParent = -1;
} }
List<ConversationMetadata> conversations = new List<ConversationMetadata>(); List<ConversationMetadata> conversations = new List<ConversationMetadata>();
@ -117,6 +121,12 @@ namespace NewHorizons.Utility.DebugMenu
id = id id = id
}; };
string regex = @"Arc \d+ - Child of (\d*)"; // $"Arc {i} - Child of {parentID}";
var parentID = (new Regex(regex)).Matches(metadata.spiralGo.name)[0].Groups[1].Value;
metadata.parentID = parentID == "" ? -1 : int.Parse(parentID);
Logger.Log("Parent id for '" + metadata.spiralGo.name + "' : " + parentID);
conversationMetadata.spirals.Add(metadata); conversationMetadata.spirals.Add(metadata);
} }
} }
@ -253,41 +263,58 @@ namespace NewHorizons.Utility.DebugMenu
GUI.enabled = true; GUI.enabled = true;
GUILayout.EndHorizontal(); GUILayout.EndHorizontal();
// x var shouldBeInManual = spiralMeta.parentID < 0 || GUILayout.Toggle(spiralMeta.pointOnParent < 0, "Manual Positioning");
GUILayout.BeginHorizontal(); if ( shouldBeInManual && spiralMeta.pointOnParent >= 0) spiralMeta.pointOnParent = -1;
GUILayout.Label("x: " + (spiralMeta.spiral.position?.x ?? 0), GUILayout.Width(100)); if (!shouldBeInManual && spiralMeta.pointOnParent < 0 ) spiralMeta.pointOnParent = 0;
//var deltaX = GUILayout.HorizontalSlider(0, -1, 1);
float deltaX = 0;
if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) deltaX += dx;
if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) deltaX -= dx;
dx = float.Parse(GUILayout.TextField(dx+"", GUILayout.Width(100)));
GUILayout.EndHorizontal();
// y
GUILayout.BeginHorizontal();
GUILayout.Label("y: " + (spiralMeta.spiral.position?.y ?? 0), GUILayout.Width(100));
//var deltaY = GUILayout.HorizontalSlider(0, -1, 1);
float deltaY = 0;
if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) deltaY += dy;
if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) deltaY -= dy;
dy = float.Parse(GUILayout.TextField(dy+"", GUILayout.Width(100)));
GUILayout.EndHorizontal();
// theta
GUILayout.BeginHorizontal();
GUILayout.Label("theta: " + spiralMeta.spiral.zRotation, GUILayout.Width(100));
//var deltaTheta = GUILayout.HorizontalSlider(0, -1, 1);
float deltaTheta = 0;
if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) deltaTheta += dT;
if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) deltaTheta -= dT;
dT = float.Parse(GUILayout.TextField(dT+"", GUILayout.Width(100)));
GUILayout.EndHorizontal();
if (deltaX != 0 || deltaY != 0 || deltaTheta != 0) if (shouldBeInManual)
{ {
spiralMeta.spiral.position = (spiralMeta.spiral.position??Vector2.zero) + new Vector2(deltaX, deltaY); // x
spiralMeta.spiral.zRotation += deltaTheta; GUILayout.BeginHorizontal();
var positionX = (spiralMeta.spiral.position?.x ?? 0);
GUILayout.Label("x: ", GUILayout.Width(50));
float deltaX = float.Parse(GUILayout.TextField(positionX+"", GUILayout.Width(50))) - positionX;
if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) deltaX += dx;
if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) deltaX -= dx;
dx = float.Parse(GUILayout.TextField(dx+"", GUILayout.Width(100)));
GUILayout.EndHorizontal();
// y
GUILayout.BeginHorizontal();
var positionY = (spiralMeta.spiral.position?.y ?? 0);
GUILayout.Label("y: ", GUILayout.Width(50));
float deltaY = float.Parse(GUILayout.TextField(positionY+"", GUILayout.Width(50))) - positionY;
if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) deltaY += dy;
if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) deltaY -= dy;
dy = float.Parse(GUILayout.TextField(dy+"", GUILayout.Width(100)));
GUILayout.EndHorizontal();
// theta
GUILayout.BeginHorizontal();
var theta = spiralMeta.spiral.zRotation;
GUILayout.Label("theta: ", GUILayout.Width(50));
float deltaTheta = float.Parse(GUILayout.TextField(theta+"", GUILayout.Width(50))) - theta;
if (GUILayout.Button("+", GUILayout.ExpandWidth(false))) deltaTheta += dT;
if (GUILayout.Button("-", GUILayout.ExpandWidth(false))) deltaTheta -= dT;
dT = float.Parse(GUILayout.TextField(dT+"", GUILayout.Width(100)));
GUILayout.EndHorizontal();
spiralMeta.spiralGo.transform.localPosition = new Vector3(spiralMeta.spiral.position.x, spiralMeta.spiral.position.y, 0); if (deltaX != 0 || deltaY != 0 || deltaTheta != 0)
spiralMeta.spiralGo.transform.localRotation = Quaternion.Euler(0, 0, spiralMeta.spiral.zRotation); {
spiralMeta.spiral.position = (spiralMeta.spiral.position??Vector2.zero) + new Vector2(deltaX, deltaY);
spiralMeta.spiral.zRotation += deltaTheta;
spiralMeta.spiralGo.transform.localPosition = new Vector3(spiralMeta.spiral.position.x, spiralMeta.spiral.position.y, 0);
spiralMeta.spiralGo.transform.localRotation = Quaternion.Euler(0, 0, spiralMeta.spiral.zRotation);
spiralMeta.pointOnParent = -1; // since tweaks have been made, we're setting this to manual mode
UpdateChildrenLocations(spiralMeta);
}
}
else
{
// var newPointOnParent = GUI.HorizontalSlider(); // stepped horizontal slider
// if new value, set spiral GO positioning (and spiral's x/y/theta)
// UpdateChildPositions()
} }
GUILayout.EndVertical(); GUILayout.EndVertical();
GUILayout.Space(5); GUILayout.Space(5);
@ -300,7 +327,7 @@ namespace NewHorizons.Utility.DebugMenu
var conversationZone = spiralMeta.spiralGo.transform.parent.gameObject; var conversationZone = spiralMeta.spiralGo.transform.parent.gameObject;
var textEntryId = spiralMeta.spiralGo.GetComponent<NomaiTextLine>()._entryID; var textEntryId = spiralMeta.spiralGo.GetComponent<NomaiTextLine>()._entryID;
GameObject.Destroy(spiralMeta.spiralGo); GameObject.Destroy(spiralMeta.spiralGo);
spiralMeta.spiralGo = NomaiTextBuilder.MakeArc(spiralMeta.spiral, conversationZone, null, textEntryId, 0); spiralMeta.spiralGo = NomaiTextBuilder.MakeArc(spiralMeta.spiral, conversationZone, null, textEntryId);
} }
GUILayout.Space(10); GUILayout.Space(10);
@ -318,6 +345,20 @@ namespace NewHorizons.Utility.DebugMenu
GUILayout.EndScrollView(); GUILayout.EndScrollView();
} }
private void UpdateChildrenLocations(SpiralMetadata parentSprialMetadata)
{
ConversationMetadata convoMeta = conversations.Where(m => m.conversation == parentSprialMetadata.conversation).First();
convoMeta.spirals
.Where(spiralMeta => spiralMeta.parentID == parentSprialMetadata.id)
.ToList()
.ForEach(spiralMeta => {
if (spiralMeta.pointOnParent == -1) return; // this spiral is positioned manually
// TODO: set x, y, and theta of spiralMeta based on spiralMeta.pointOnParent and parentSprialMetadata's x,y,theta
UpdateChildrenLocations(spiralMeta);
});
}
private int GetVarietyCountForType(NomaiTextArcInfo.NomaiTextArcType type) private int GetVarietyCountForType(NomaiTextArcInfo.NomaiTextArcType type)
{ {
switch(type) switch(type)