123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using UnityEngine;
- using UnityEngine.Rendering;
- namespace COM3D2.MeidoPhotoStudio.Plugin
- {
- public class DragPointProp : DragPointGeneral
- {
- private List<Renderer> renderers;
- public AttachPointInfo AttachPointInfo { get; private set; } = AttachPointInfo.Empty;
- public string Name => MyGameObject.name;
- public string assetName = string.Empty;
- public PropInfo Info { get; set; }
- public bool ShadowCasting
- {
- get => renderers.Count != 0 && renderers.Any(r => r.shadowCastingMode == ShadowCastingMode.On);
- set
- {
- foreach (var renderer in renderers)
- renderer.shadowCastingMode = value ? ShadowCastingMode.On : ShadowCastingMode.Off;
- }
- }
- public override void Set(Transform myObject)
- {
- base.Set(myObject);
- DefaultRotation = MyObject.rotation;
- DefaultPosition = MyObject.position;
- DefaultScale = MyObject.localScale;
- renderers = new List<Renderer>(MyObject.GetComponentsInChildren<Renderer>());
- }
- public void AttachTo(Meido meido, AttachPoint point, bool keepWorldPosition = true)
- {
- var attachPoint = meido?.IKManager.GetAttachPointTransform(point);
- AttachPointInfo = meido == null ? AttachPointInfo.Empty : new AttachPointInfo(point, meido);
- var position = MyObject.position;
- var rotation = MyObject.rotation;
- var scale = MyObject.localScale;
- MyObject.transform.SetParent(attachPoint, keepWorldPosition);
- if (keepWorldPosition)
- {
- MyObject.position = position;
- MyObject.rotation = rotation;
- }
- else
- {
- MyObject.localPosition = Vector3.zero;
- MyObject.rotation = Quaternion.identity;
- }
- MyObject.localScale = scale;
- if (attachPoint == null) Utility.FixGameObjectScale(MyGameObject);
- }
- public void DetachFrom(bool keepWorldPosition = true) => AttachTo(null, AttachPoint.None, keepWorldPosition);
- public void DetachTemporary()
- {
- MyObject.transform.SetParent(null, true);
- Utility.FixGameObjectScale(MyGameObject);
- }
- protected override void ApplyDragType()
- {
- var active = DragPointEnabled && Transforming || Special;
- ApplyProperties(active, active, GizmoEnabled && Rotating);
- ApplyColours();
- }
- protected override void OnDestroy()
- {
- Destroy(MyGameObject);
- base.OnDestroy();
- }
- }
- public class PropInfo
- {
- public enum PropType { Mod, MyRoom, Bg, Odogu }
- public PropType Type { get; }
- public string IconFile { get; init; }
- public string Filename { get; init; }
- public string SubFilename { get; init; }
- public int MyRoomID { get; init; }
- public PropInfo(PropType type) => Type = type;
- public static PropInfo FromModItem(ModItem modItem) => new(PropType.Mod)
- {
- Filename = modItem.IsOfficialMod ? Path.GetFileName(modItem.MenuFile) : modItem.MenuFile,
- SubFilename = modItem.BaseMenuFile
- };
- public static PropInfo FromMyRoom(MyRoomItem myRoomItem) => new(PropType.MyRoom)
- {
- MyRoomID = myRoomItem.ID, Filename = myRoomItem.PrefabName
- };
- public static PropInfo FromBg(string name) => new(PropType.Bg) { Filename = name };
- public static PropInfo FromGameProp(string name) => new(PropType.Odogu) { Filename = name };
- }
- }
|