This commit is contained in:
2025-05-30 19:55:24 +08:00
15 changed files with 206 additions and 1713 deletions

View File

@@ -15,7 +15,7 @@ namespace Ichni.RhythmGame
{
public partial class GameCamera : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule
{
public new Camera camera;
[FormerlySerializedAs("camera")] public new Camera gameCamera;
public Transform rotationPoint;
public Transform positionPoint;
public Transform cameraTransform;
@@ -44,13 +44,13 @@ namespace Ichni.RhythmGame
gameCamera.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
cameraManager.gameCamera = gameCamera;
cameraManager.backgroundCamera.GetComponent<UniversalAdditionalCameraData>().cameraStack.Add(gameCamera.camera);
if (cameraManager.isSceneCameraActive) gameCamera.camera.enabled = false;
cameraManager.backgroundCamera.GetComponent<UniversalAdditionalCameraData>().cameraStack.Add(gameCamera.gameCamera);
if (cameraManager.isSceneCameraActive) gameCamera.gameCamera.enabled = false;
gameCamera.parentElement = parentElement;
gameCamera.cameraViewType = cameraViewType;
gameCamera.camera.orthographic = cameraViewType == CameraViewType.Orthographic;
gameCamera.gameCamera.orthographic = cameraViewType == CameraViewType.Orthographic;
gameCamera.perspectiveAngle = perspectiveAngle;
gameCamera.orthographicSize = orthographicSize;
gameCamera.cameraTransform = gameCamera.transform;
@@ -75,6 +75,10 @@ namespace Ichni.RhythmGame
var swirlButton = inspector.GenerateButton(this, generateAnimation, "Swirl",
() => Swirl.GenerateElement("New Swirl", Guid.NewGuid(), new List<string>(), true, this,
new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat()));
var extensionButton = inspector.GenerateButton(this, generateAnimation, "Extension",
() => GameCameraExtension.GenerateElement("New Extension", Guid.NewGuid(),
new List<string>(), true, this, 1000f));
}
}

View File

@@ -1,18 +1,87 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
using UnityEngine;
using UnityEngine.Serialization;
public class GameCameraExtension : MonoBehaviour
namespace Ichni.RhythmGame
{
// Start is called before the first frame update
void Start()
public partial class GameCameraExtension : GameElement
{
public GameCamera gameCamera;
public SceneCamera sceneCamera => EditorManager.instance.cameraManager.sceneCamera;
public float farClipRange = 1000f;
public static GameCameraExtension GenerateElement(string elementName, Guid id,
List<string> tags, bool isFirstGenerated, GameElement parentElement, float farClipRange)
{
GameCameraExtension gameCameraExtension = Instantiate(EditorManager.instance.basePrefabs.emptyObject)
.AddComponent<GameCameraExtension>();
gameCameraExtension.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
gameCameraExtension.gameCamera = parentElement as GameCamera;
gameCameraExtension.farClipRange = farClipRange;
gameCameraExtension.ApplyExtension();
return gameCameraExtension;
}
public void ApplyExtension()
{
gameCamera.gameCamera.farClipPlane = farClipRange;
sceneCamera.sceneCamera.farClipPlane = farClipRange;
}
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
base.SetUpInspector();
var container = inspector.GenerateContainer("Settings");
var settingsSubcontainer = container.GenerateSubcontainer(3);
var farClipRangeButton = inspector.GenerateInputField(this, settingsSubcontainer, "Far Clip Range",
nameof(farClipRange)).AddListenerFunction(ApplyExtension);
}
}
public partial class GameCameraExtension
{
public override void SaveBM()
{
matchedBM = new GameCameraExtension_BM(elementName, elementGuid, tags,
parentElement.matchedBM as GameElement_BM, farClipRange);
}
}
// Update is called once per frame
void Update()
namespace Beatmap
{
public class GameCameraExtension_BM : GameElement_BM
{
public float farClipRange;
public GameCameraExtension_BM()
{
}
public GameCameraExtension_BM(string elementName, Guid elementGuid, List<string> tags,
GameElement_BM attachedElement, float farClipRange)
: base(elementName, elementGuid, tags, attachedElement)
{
this.farClipRange = farClipRange;
}
public override void ExecuteBM()
{
matchedElement = GameCameraExtension.GenerateElement(elementName, elementGuid, tags, false,
GetElement(attachedElementGuid), farClipRange);
}
public override GameElement DuplicateBM(GameElement parent)
{
return GameCameraExtension.GenerateElement(elementName, Guid.NewGuid(), tags, false,
parent, farClipRange);
}
}
}
}
}

View File

@@ -211,7 +211,7 @@ namespace Ichni.RhythmGame
if (EditorManager.instance.cameraManager.haveGameCamera)
{
noteScreenPosition = EditorManager.instance.cameraManager.gameCamera.camera.WorldToScreenPoint(noteVisual.transform.position);
noteScreenPosition = EditorManager.instance.cameraManager.gameCamera.gameCamera.WorldToScreenPoint(noteVisual.transform.position);
}
}
}

View File

@@ -124,7 +124,7 @@ namespace Ichni.RhythmGame
if (EditorManager.instance.cameraManager.haveGameCamera)
{
noteScreenPosition = EditorManager.instance.cameraManager.gameCamera.camera.WorldToScreenPoint(noteVisual.transform.position);
noteScreenPosition = EditorManager.instance.cameraManager.gameCamera.gameCamera.WorldToScreenPoint(noteVisual.transform.position);
}
}
}

View File

@@ -19,7 +19,7 @@ namespace Ichni.Editor
public GameCamera gameCamera;
public bool haveGameCamera => gameCamera != null;
public Camera currentCamera => haveGameCamera && !isSceneCameraActive ? gameCamera.camera : sceneCamera.sceneCamera;
public Camera currentCamera => haveGameCamera && !isSceneCameraActive ? gameCamera.gameCamera : sceneCamera.sceneCamera;
public BaseElement_BM matchedBM { get; set; }
@@ -33,7 +33,7 @@ namespace Ichni.Editor
isSceneCameraActive = !isSceneCameraActive;
sceneCamera.sceneCamera.enabled = isSceneCameraActive;
gameCamera.camera.enabled = !isSceneCameraActive;
gameCamera.gameCamera.enabled = !isSceneCameraActive;
}
public void SetUpInspector()