mirror of
https://github.com/soarqin/DSP_Mods_TO.git
synced 2025-12-12 01:23:31 +08:00
add XianTu
This commit is contained in:
413
XianTu/Scripts/DataController/BlueTuController.cs
Normal file
413
XianTu/Scripts/DataController/BlueTuController.cs
Normal file
@@ -0,0 +1,413 @@
|
||||
using System;
|
||||
using ToolScripts;
|
||||
using UnityEngine;
|
||||
using XianTu.UI;
|
||||
|
||||
namespace XianTu.Scripts.DataController
|
||||
{
|
||||
internal class BlueTuController
|
||||
{
|
||||
public BlueTuController()
|
||||
{
|
||||
_oldData = BlueTuUIData.Instance.Clone();
|
||||
_data = BlueTuUIData.Instance;
|
||||
Init_OnUIOpen();
|
||||
_data.OnValueChange += OnUserChangeData;
|
||||
var blueTuUIData = _data;
|
||||
blueTuUIData.OnBuildBtn = (Action)Delegate.Combine(blueTuUIData.OnBuildBtn, new Action(OnUserBuildDetermine));
|
||||
var blueTuUIData2 = _data;
|
||||
blueTuUIData2.OnCopyBtn = (Action)Delegate.Combine(blueTuUIData2.OnCopyBtn, new Action(OnUserCopy));
|
||||
var blueTuUIData3 = _data;
|
||||
blueTuUIData3.OnResetBtn = (Action)Delegate.Combine(blueTuUIData3.OnResetBtn, new Action(OnReset));
|
||||
var blueprintData = BlueTuDatabase.Load("FoundationBlueTu");
|
||||
_foundation = blueprintData.buildings[0];
|
||||
}
|
||||
|
||||
private void OnUserCopy()
|
||||
{
|
||||
_actionBuild.blueprintClipboard = _bPaste.blueprint;
|
||||
ResetBuildDuiDie();
|
||||
_bPaste.RefreshBlueprintUI();
|
||||
}
|
||||
|
||||
private void Init_OnUIOpen()
|
||||
{
|
||||
UIManager.Instance.CanvasMonoEvent.onEnableEvent.AddListener(OnReset);
|
||||
}
|
||||
|
||||
private void OnReset()
|
||||
{
|
||||
Player = GameMain.mainPlayer;
|
||||
var flag = Player == null;
|
||||
if (flag)
|
||||
{
|
||||
_data.Enable = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_playerController = Player.controller;
|
||||
_actionBuild = PlayerController.actionBuild;
|
||||
var flag2 = _actionBuild != null;
|
||||
if (flag2)
|
||||
{
|
||||
_activeTool = _actionBuild.activeTool;
|
||||
var buildToolBlueprintPaste = _activeTool as BuildTool_BlueprintPaste;
|
||||
var flag3 = buildToolBlueprintPaste != null;
|
||||
if (flag3)
|
||||
{
|
||||
_bPaste = buildToolBlueprintPaste;
|
||||
var mouseRay = _actionBuild.activeTool.mouseRay;
|
||||
_defaultMouseRay = new Ray(mouseRay.origin, mouseRay.direction);
|
||||
var flag4 = buildToolBlueprintPaste.blueprint != _blueprint;
|
||||
if (flag4)
|
||||
{
|
||||
_templateBlueTu = buildToolBlueprintPaste.blueprint.Clone();
|
||||
_blueprint = buildToolBlueprintPaste.blueprint;
|
||||
}
|
||||
_oldData = new BlueTuUIData();
|
||||
_data.Reset();
|
||||
_data.Enable = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
_data.Enable = false;
|
||||
}
|
||||
}
|
||||
|
||||
private Player Player { get; set; }
|
||||
|
||||
private void OnUserBuildDetermine()
|
||||
{
|
||||
var flag = _actionBuild.activeTool != null;
|
||||
if (flag)
|
||||
{
|
||||
var buildToolBlueprintPaste = _actionBuild.activeTool as BuildTool_BlueprintPaste;
|
||||
var flag2 = buildToolBlueprintPaste != null;
|
||||
if (flag2)
|
||||
{
|
||||
var flag3 = buildToolBlueprintPaste.CheckBuildConditionsPrestage();
|
||||
if (flag3)
|
||||
{
|
||||
ResetBuildDuiDie();
|
||||
Build(buildToolBlueprintPaste);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetBuildDuiDie()
|
||||
{
|
||||
var buildToolBlueprintPaste = _bPaste;
|
||||
BlueprintBuilding blueprintBuilding = null;
|
||||
foreach (var blueprintBuilding2 in buildToolBlueprintPaste.blueprint.buildings)
|
||||
{
|
||||
var flag = Math.Abs(blueprintBuilding2.localOffset_z) < 1.5f;
|
||||
if (flag)
|
||||
{
|
||||
var itemProto = LDB.items.Select(blueprintBuilding2.itemId);
|
||||
Debug.Log($"基底查验:{itemProto.name}.{itemProto.ID}:{blueprintBuilding2.localOffset_x:2f}, {blueprintBuilding2.localOffset_y:2f}, {blueprintBuilding2.localOffset_z:2f}");
|
||||
blueprintBuilding = blueprintBuilding2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
var flag2 = blueprintBuilding == null;
|
||||
if (flag2)
|
||||
{
|
||||
Debug.Log("没有基底");
|
||||
}
|
||||
var flag3 = blueprintBuilding == null;
|
||||
if (flag3)
|
||||
{
|
||||
var buildings2 = _bPaste.blueprint.buildings;
|
||||
var array = new BlueprintBuilding[_bPaste.blueprint.buildings.Length + 1];
|
||||
_bPaste.blueprint.buildings = array;
|
||||
buildings2.CopyTo(array, 0);
|
||||
blueprintBuilding = _foundation;
|
||||
blueprintBuilding.index = buildings2.Length;
|
||||
blueprintBuilding.localOffset_z = -0.5f;
|
||||
array[buildings2.Length] = blueprintBuilding;
|
||||
}
|
||||
foreach (var blueprintBuilding3 in _bPaste.blueprint.buildings)
|
||||
{
|
||||
var flag4 = blueprintBuilding3.IsBelt();
|
||||
if (!flag4)
|
||||
{
|
||||
var flag5 = blueprintBuilding3.IsSlot();
|
||||
if (!flag5)
|
||||
{
|
||||
var flag6 = blueprintBuilding3 == blueprintBuilding;
|
||||
if (!flag6)
|
||||
{
|
||||
blueprintBuilding3.inputToSlot = 14;
|
||||
blueprintBuilding3.outputFromSlot = 15;
|
||||
blueprintBuilding3.inputFromSlot = 15;
|
||||
blueprintBuilding3.outputToSlot = 14;
|
||||
blueprintBuilding3.inputObj = blueprintBuilding;
|
||||
blueprintBuilding3.inputFromSlot = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_bPaste.bpCursor = _bPaste.blueprint.buildings.Length;
|
||||
_bPaste.buildPreviews.Clear();
|
||||
_bPaste.ResetStates();
|
||||
_BuildTool_BluePrint_OnTick();
|
||||
}
|
||||
|
||||
private void Build(BuildTool_BlueprintPaste bp)
|
||||
{
|
||||
PlayerController.cmd.stage = 1;
|
||||
bp.GenerateBlueprintGratBoxes();
|
||||
bp.DeterminePreviewsPrestage(true);
|
||||
bp.ActiveColliders(_actionBuild.model);
|
||||
bp.buildCondition = bp.CheckBuildConditions();
|
||||
bp.DeterminePreviews();
|
||||
bp.DeactiveColliders(_actionBuild.model);
|
||||
var buildCondition = bp.buildCondition;
|
||||
if (buildCondition)
|
||||
{
|
||||
bp.CreatePrebuilds();
|
||||
bp.ResetStates();
|
||||
}
|
||||
else
|
||||
{
|
||||
bp.isDragging = false;
|
||||
bp.startGroundPosSnapped = bp.castGroundPosSnapped;
|
||||
_BuildTool_BluePrint_OnTick();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnUserChangeData()
|
||||
{
|
||||
var flag = !_data.Enable;
|
||||
if (!flag)
|
||||
{
|
||||
var flag2 = PlayerController == null;
|
||||
if (!flag2)
|
||||
{
|
||||
var flag3 = _actionBuild == null;
|
||||
if (!flag3)
|
||||
{
|
||||
var flag4 = _bPaste == null;
|
||||
if (!flag4)
|
||||
{
|
||||
var vector = _data.Bias - _oldData.Bias;
|
||||
var num = _data.LayerHeight - _oldData.LayerHeight;
|
||||
var num2 = _data.LayerNumber - _oldData.LayerNumber;
|
||||
var num3 = _data.Rotate - _oldData.Rotate;
|
||||
var flag5 = _actionBuild != null;
|
||||
if (flag5)
|
||||
{
|
||||
CtrlLayerNumber(num2);
|
||||
CtrlLayerHeight(num);
|
||||
CtrlRotate(num3);
|
||||
CtrlBiasData(vector);
|
||||
CtrlScale();
|
||||
_BuildTool_BluePrint_OnTick();
|
||||
}
|
||||
_oldData.Scale = _data.Scale;
|
||||
_oldData.Pivot = _data.Pivot;
|
||||
_oldData.LayerHeight = _data.LayerHeight;
|
||||
_oldData.LayerNumber = _data.LayerNumber;
|
||||
_oldData.Rotate = _data.Rotate;
|
||||
_oldData.Bias = _data.Bias;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CtrlLayerNumber(int bLayerNumber)
|
||||
{
|
||||
var flag = bLayerNumber == 0;
|
||||
if (!flag)
|
||||
{
|
||||
var num = _data.LayerNumber * _templateBlueTu.buildings.Length;
|
||||
var buildings = _bPaste.blueprint.buildings;
|
||||
var array = new BlueprintBuilding[num];
|
||||
var flag2 = buildings.Length > num;
|
||||
if (flag2)
|
||||
{
|
||||
Array.Copy(buildings, array, num);
|
||||
}
|
||||
else
|
||||
{
|
||||
buildings.CopyTo(array, 0);
|
||||
var num2 = _templateBlueTu.buildings.Length;
|
||||
for (var i = _bPaste.bpCursor; i < array.Length; i += num2)
|
||||
{
|
||||
_templateBlueTu.Clone().buildings.CopyTo(array, i);
|
||||
}
|
||||
for (var j = _bPaste.bpCursor; j < array.Length; j++)
|
||||
{
|
||||
array[j].localOffset_z = array[j - num2].localOffset_z + _data.LayerHeight;
|
||||
array[j].localOffset_z2 = array[j - num2].localOffset_z2 + _data.LayerHeight;
|
||||
}
|
||||
for (var k = _bPaste.bpCursor; k < array.Length; k++)
|
||||
{
|
||||
array[k].index = k;
|
||||
}
|
||||
}
|
||||
_bPaste.blueprint.buildings = array;
|
||||
_bPaste.bpCursor = _bPaste.blueprint.buildings.Length;
|
||||
_bPaste.buildPreviews.Clear();
|
||||
_bPaste.ResetStates();
|
||||
}
|
||||
}
|
||||
|
||||
private void CtrlLayerHeight(float bLayerHeight)
|
||||
{
|
||||
var flag = bLayerHeight == 0f;
|
||||
if (!flag)
|
||||
{
|
||||
var num = _templateBlueTu.buildings.Length;
|
||||
var num2 = 0;
|
||||
var buildings = _bPaste.blueprint.buildings;
|
||||
for (var i = 0; i < _bPaste.bpCursor; i++)
|
||||
{
|
||||
var flag2 = i == num * (num2 + 1);
|
||||
if (flag2)
|
||||
{
|
||||
num2++;
|
||||
}
|
||||
buildings[i].localOffset_z += bLayerHeight * num2;
|
||||
buildings[i].localOffset_z2 += bLayerHeight * num2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CtrlScale()
|
||||
{
|
||||
var flag = _oldData.Scale == _data.Scale;
|
||||
if (!flag)
|
||||
{
|
||||
var buildings = _templateBlueTu.buildings;
|
||||
var vector = _data.Scale - _oldData.Scale;
|
||||
var pivot = _data.Pivot;
|
||||
var num = 0;
|
||||
for (var i = 0; i < _bPaste.bpCursor; i++)
|
||||
{
|
||||
var flag2 = num == buildings.Length;
|
||||
if (flag2)
|
||||
{
|
||||
num = 0;
|
||||
}
|
||||
var blueprintBuilding = buildings[num];
|
||||
var blueprintBuilding2 = _bPaste.blueprint.buildings[i];
|
||||
blueprintBuilding2.localOffset_x += (blueprintBuilding.localOffset_x - pivot.x) * vector.x + pivot.x;
|
||||
blueprintBuilding2.localOffset_y += (blueprintBuilding.localOffset_y - pivot.y) * vector.y + pivot.y;
|
||||
blueprintBuilding2.localOffset_z += blueprintBuilding.localOffset_z * vector.z;
|
||||
blueprintBuilding2.localOffset_x2 += (blueprintBuilding.localOffset_x2 - pivot.x) * vector.x + pivot.x;
|
||||
blueprintBuilding2.localOffset_y2 += (blueprintBuilding.localOffset_y2 - pivot.y) * vector.y + pivot.y;
|
||||
blueprintBuilding2.localOffset_z2 += blueprintBuilding.localOffset_z2 * vector.z;
|
||||
num++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CtrlRotate(float bRotate)
|
||||
{
|
||||
var flag = Math.Abs(bRotate) < 0.001f;
|
||||
if (!flag)
|
||||
{
|
||||
var buildToolBlueprintPaste = _actionBuild.activeTool as BuildTool_BlueprintPaste;
|
||||
var flag2 = buildToolBlueprintPaste != null;
|
||||
if (flag2)
|
||||
{
|
||||
var pivot = _data.Pivot;
|
||||
var buildings = buildToolBlueprintPaste.blueprint.buildings;
|
||||
var quaternion = Quaternion.AngleAxis(bRotate, Vector3.forward);
|
||||
for (var i = 0; i < _bPaste.bpCursor; i++)
|
||||
{
|
||||
var blueprintBuilding = buildings[i];
|
||||
var vector = new Vector3(blueprintBuilding.localOffset_x - pivot.x, blueprintBuilding.localOffset_y - pivot.y, 0f);
|
||||
vector = quaternion * vector;
|
||||
blueprintBuilding.localOffset_x = vector.x + pivot.x;
|
||||
blueprintBuilding.localOffset_y = vector.y + pivot.y;
|
||||
blueprintBuilding.yaw -= bRotate;
|
||||
vector = new Vector3(blueprintBuilding.localOffset_x2 - pivot.x, blueprintBuilding.localOffset_y2 - pivot.y, 0f);
|
||||
vector = quaternion * vector;
|
||||
blueprintBuilding.localOffset_x2 = vector.x + pivot.x;
|
||||
blueprintBuilding.localOffset_y2 = vector.y + pivot.y;
|
||||
blueprintBuilding.yaw2 -= bRotate;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private PlayerController PlayerController => _playerController;
|
||||
|
||||
private void CtrlBiasData(Vector3 bBias)
|
||||
{
|
||||
var flag = bBias == Vector3.zero;
|
||||
if (!flag)
|
||||
{
|
||||
var playerActionBuild = _actionBuild;
|
||||
var buildTool = playerActionBuild.activeTool;
|
||||
var buildToolBlueprintPaste = buildTool as BuildTool_BlueprintPaste;
|
||||
var flag2 = buildToolBlueprintPaste != null;
|
||||
if (flag2)
|
||||
{
|
||||
for (var i = 0; i < buildToolBlueprintPaste.bpCursor; i++)
|
||||
{
|
||||
var blueprintBuilding = buildToolBlueprintPaste.blueprint.buildings[i];
|
||||
blueprintBuilding.localOffset_x += bBias.x;
|
||||
blueprintBuilding.localOffset_x2 += bBias.x;
|
||||
blueprintBuilding.localOffset_y += bBias.y;
|
||||
blueprintBuilding.localOffset_y2 += bBias.y;
|
||||
blueprintBuilding.localOffset_z += bBias.z;
|
||||
blueprintBuilding.localOffset_z2 += bBias.z;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void _BuildTool_BluePrint_OnTick()
|
||||
{
|
||||
VFInput.onGUI = false;
|
||||
_bPaste.mouseRay = _defaultMouseRay;
|
||||
var buildToolBlueprintPaste = _activeTool as BuildTool_BlueprintPaste;
|
||||
var flag = buildToolBlueprintPaste != null;
|
||||
if (flag)
|
||||
{
|
||||
buildToolBlueprintPaste.ClearErrorMessage();
|
||||
buildToolBlueprintPaste.UpdateRaycast();
|
||||
var flag2 = PlayerController.cmd.stage == 0;
|
||||
if (flag2)
|
||||
{
|
||||
buildToolBlueprintPaste.OperatingPrestage();
|
||||
}
|
||||
else
|
||||
{
|
||||
var flag3 = PlayerController.cmd.stage == 1;
|
||||
if (flag3)
|
||||
{
|
||||
buildToolBlueprintPaste.Operating();
|
||||
}
|
||||
}
|
||||
buildToolBlueprintPaste.UpdatePreviewModels(_actionBuild.model);
|
||||
buildToolBlueprintPaste.ShowCursorText();
|
||||
}
|
||||
}
|
||||
|
||||
private readonly BlueTuUIData _data;
|
||||
|
||||
private BlueTuUIData _oldData;
|
||||
|
||||
private PlayerController _playerController;
|
||||
|
||||
private Ray _defaultMouseRay;
|
||||
|
||||
private BlueprintData _templateBlueTu;
|
||||
|
||||
private PlayerAction_Build _actionBuild;
|
||||
|
||||
private BuildTool _activeTool;
|
||||
|
||||
private BuildTool_BlueprintPaste _bPaste;
|
||||
|
||||
private readonly BlueprintBuilding _foundation;
|
||||
|
||||
private BlueprintData _blueprint;
|
||||
}
|
||||
}
|
||||
35
XianTu/Scripts/DataController/BlueTuDatabase.cs
Normal file
35
XianTu/Scripts/DataController/BlueTuDatabase.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace XianTu.Scripts.DataController
|
||||
{
|
||||
internal static class BlueTuDatabase
|
||||
{
|
||||
public static BlueprintData Load(string path)
|
||||
{
|
||||
var flag = !path.EndsWith(".txt");
|
||||
if (flag)
|
||||
{
|
||||
path += ".txt";
|
||||
}
|
||||
var text = Singleton<LoadManager>.Instance.LoadText(path);
|
||||
var flag2 = text == "";
|
||||
BlueprintData blueprintData;
|
||||
if (flag2)
|
||||
{
|
||||
Debug.Log("没有找到蓝图文件");
|
||||
blueprintData = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
var blueprintData2 = BlueprintData.CreateNew(text);
|
||||
var flag3 = blueprintData2 == null;
|
||||
if (flag3)
|
||||
{
|
||||
Debug.Log("蓝图文件加载失败");
|
||||
}
|
||||
blueprintData = blueprintData2;
|
||||
}
|
||||
return blueprintData;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user