diff --git a/ColorlessWorld-2024-4-2/Assets/GameDate/cardDeckList.asset b/ColorlessWorld-2024-4-2/Assets/GameDate/cardDeckList.asset index 7e9f2910..e3391e16 100644 --- a/ColorlessWorld-2024-4-2/Assets/GameDate/cardDeckList.asset +++ b/ColorlessWorld-2024-4-2/Assets/GameDate/cardDeckList.asset @@ -13,13 +13,10 @@ MonoBehaviour: m_Name: cardDeckList m_EditorClassIdentifier: cardDeckList: - - 1014 - - 1014 - - 1015 - - 1015 - - 1015 - - 1016 - - 1016 - - 1016 - - 1017 - - 1017 + - 1001 + - 1001 + - 1001 + - 1001 + - 1001 + - 1001 + - 1001 diff --git a/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity b/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity index 804099bb..34d34e65 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity +++ b/ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity @@ -3854,6 +3854,37 @@ SphereCollider: serializedVersion: 3 m_Radius: 0.45 m_Center: {x: 0, y: 0.41, z: -2} +--- !u!1 &179913386 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 179913387} + m_Layer: 0 + m_Name: MapGeneraterTest + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &179913387 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 179913386} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -50.362644, y: -4.974493, z: 0.41015458} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1819238997} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &192780992 GameObject: m_ObjectHideFlags: 0 @@ -6205,7 +6236,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &281408863 Transform: m_ObjectHideFlags: 0 @@ -7420,7 +7451,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &329040649 Transform: m_ObjectHideFlags: 0 @@ -9229,7 +9260,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &395072432 MonoBehaviour: m_ObjectHideFlags: 0 @@ -13008,7 +13039,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &515302568 MonoBehaviour: m_ObjectHideFlags: 0 @@ -15397,7 +15428,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &628364366 MonoBehaviour: m_ObjectHideFlags: 0 @@ -17936,7 +17967,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &789990414 RectTransform: m_ObjectHideFlags: 0 @@ -22026,7 +22057,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!82 &992566369 AudioSource: m_ObjectHideFlags: 0 @@ -25161,7 +25192,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &1147870383 Transform: m_ObjectHideFlags: 0 @@ -28747,6 +28778,15 @@ MonoBehaviour: - Y: [] - Y: [] - Y: [] + ToolX: + - Y: [] + - Y: [] + - Y: [] + - Y: [] + - Y: [] + - Y: [] + - Y: [] + - Y: [] character: 0 playerOn: {fileID: 0} player: {fileID: 1809205617} @@ -36479,7 +36519,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &1690695889 MonoBehaviour: m_ObjectHideFlags: 0 @@ -37789,7 +37829,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &1751203283 MonoBehaviour: m_ObjectHideFlags: 0 @@ -39358,6 +39398,7 @@ MonoBehaviour: line: 8 column: 8 generatePoint: {fileID: 514899946} + generatePointTest: {fileID: 179913386} lineOffSet: {x: 1, y: 0, z: 0} columnOffSet: {x: 0, y: 0, z: 0.865} enemyGenerateDataList: [] @@ -40208,6 +40249,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 514899947} + - {fileID: 179913387} - {fileID: 1802141879} - {fileID: 1285317928} m_Father: {fileID: 0} @@ -45370,7 +45412,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &2068068678 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs index 85dc5f46..807b79f5 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs @@ -418,7 +418,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag { //射线检测瞄准的地图节点,判断是否可放置和改变放置影响区 Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.value); - Debug.Log(Mouse.current.position.value); + //Debug.Log(Mouse.current.position.value); if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value)) { //Debug.Log(raycastHit.collider.gameObject.name); @@ -447,7 +447,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag Vector3 face = currentNode.transform.position - GameManager.Instance.playerOn.transform.position; float euler = Vector3.SignedAngle(-GameManager.Instance.playerOn.transform.forward, face, GameManager.Instance.playerOn.transform.up) + 180; Debug.Log("euler是"+ euler); - getNodeTools.setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, euler, currentNode,cardEntity); + getNodeTools.setEffectRangePreviewTest(cardEntity.cardOriginalData, euler, currentNode,cardEntity); //setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, euler, currentNode); //influencePreviewPool.Add(currentNode); diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardEntity.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardEntity.cs index 05d1f04c..fc79c0e8 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardEntity.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text.RegularExpressions; using Unity.VisualScripting; @@ -131,7 +132,8 @@ public class CardEntity : MonoBehaviour //createCardDescription(); //createCardName(); //createCardCost(); - createCardImage(); + //createCardImage(); + createCardImageTest(); this.cardIndex = cardIndex; } @@ -190,6 +192,14 @@ public class CardEntity : MonoBehaviour } } + } + + public void createCardImageTest() + { + MapUnity currentNode = GameManager.Instance.ToolX[3].Y[3]; + getNodeTools.setCardImageTest(cardOriginalData, 90.0f, currentNode,this); + + } //获取卡牌名字 public void createCardName() @@ -197,6 +207,8 @@ public class CardEntity : MonoBehaviour cardName.text = cardOriginalData.ChineseName; } + + public void createCardCost() { /* if (cardOriginalData.FunctionVal.ContainsKey(CardFunction.xCost)) diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs index da7f9d48..e7b3261c 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs @@ -20,7 +20,7 @@ public class CardOriginalDataList : Singleton private void OnEnable() { - cardOriginalDataList = ReadExcel("card_data_3.csv"); + cardOriginalDataList = ReadExcel("card_data_4.csv"); //categorizeCardsByRarity(); existCardOriginalDataList = cardOriginalDataList; diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs index 1870f97a..52089dac 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs @@ -8,6 +8,7 @@ public class GameManager : Singleton { public bool complete; public List X; + public List ToolX; [Header("当前选择角色")] public SelectedCharacter character; public enum SelectedCharacter @@ -107,6 +108,7 @@ public class GameManager : Singleton { //生成空地图列表 GenerateEnmptyMapList(); + GenerateEnmptyMapListForTool(); // GenerateEnmptyMapListDefault(); //生成角色数据 if (PlayerStatsManager .Instance .playerState != null) @@ -146,6 +148,29 @@ public class GameManager : Singleton } } } + + public void GenerateEnmptyMapListForTool() + { + if (complete == false) + { + for (int i = 0; i < MapManager.Instance.line; i++) + { + int currentColum = 0; + if (i % 2 == 0) + { + currentColum = MapManager.Instance.column; + } + else + { + currentColum = MapManager.Instance.column - 1; + } + for (int j = 0; j < currentColum; j++) + { + ToolX[i].Y.Add(null); + } + } + } + } public void GenerateEnmptyMapListDefault() { if (complete == false) diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandler3_1.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandler3_1.cs index f33210f8..7acaebc8 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandler3_1.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandler3_1.cs @@ -69,4 +69,9 @@ public class EffectRangeHandler3_1 : EffectRangeHandlerBase } -} + private void get3_1Node(MapUnity currentNode, int offset, CardOriginalData cardOriginalData) + { + + } + + } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandlerBase.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandlerBase.cs index 24da16de..750769a5 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandlerBase.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Handler/EffectRangeHandlerBase.cs @@ -43,6 +43,27 @@ public class EffectRangeHandlerBase : EffectRangeHandler return canPass; } + public (int x, int y, int z) ooveInDirection(int x, int y, int z, float euler) + { + switch (euler) + { + case 30.0f: // 右上 + return (x + 1, y - 1, z); + case 90.0f: // 右 + return (x + 1, y, z - 1); + case 150.0f: // 右下 + return (x, y + 1, z - 1); + case 210.0f: // 左下 + return (x - 1, y + 1, z); + case 270.0f: // 左 + return (x - 1, y, z + 1); + case 330.0f: // 左上 + return (x, y - 1, z + 1); + default: + throw new ArgumentException("Invalid direction: must be between 0 and 5"); + } + } + public int getOffsetFromEuler(float euler) { int offset = 0; diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs index 34f1fcfd..bf0d4508 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs @@ -14,6 +14,10 @@ public class MapManager : Singleton public GameObject generatePoint; + public GameObject generatePointTest; + + public GameObject cameraObject; + public Vector3 lineOffSet; public Vector3 columnOffSet; @@ -175,7 +179,7 @@ public class MapManager : Singleton bookAnim.GetComponent().SetTrigger("move"); //书缝愈合 //bookUpAnim.SetActive(true); - + StartCoroutine(GenerateProcessTest()); enemyBurn(PlayerStatsManager.Instance.levelDevelopData.fightEenemyPool); } //总动画控制进程 @@ -195,6 +199,44 @@ public class MapManager : Singleton yield return StartCoroutine(CompleteGenerate()); } + IEnumerator GenerateProcessTest() + { + yield return StartCoroutine(MapGenerateTest()); + // yield return StartCoroutine(MapGenerateDefault()); + yield return StartCoroutine(SetUpMapUnityForTool()); + //yield return StartCoroutine(UPMoveMapUnity()); + //yield return new WaitForSeconds(2); + //yield return StartCoroutine(EnemyGenerate()); + //yield return StartCoroutine(CompleteGenerate()); + createCameraAboveObject(GameManager.Instance.ToolX[3].Y[3].gameObject, 10.0f, 0); + } + + public void createCameraAboveObject(GameObject targetObject, float heightAbove, float lookDownAngle) + { + // 1. 创建摄像机 + cameraObject = new GameObject("RenderCamera"); + Camera renderCamera = cameraObject.AddComponent(); + + // 设置摄像机参数 + renderCamera.clearFlags = CameraClearFlags.SolidColor; // 清除背景颜色 + renderCamera.backgroundColor = Color.clear; // 背景透明 + renderCamera.orthographic = true; // 正交投影 + renderCamera.orthographicSize = 5; + renderCamera.enabled = false; + // RenderTexture renderTexture = new RenderTexture(512, 512, 24); + //renderCamera.targetTexture = renderTexture; + + // 2. 设置摄像机位置:目标物体上方 + Vector3 targetPosition = targetObject.transform.position; + cameraObject.transform.position = targetPosition + new Vector3(0, heightAbove, 0); + + // 3. 设置摄像机朝向:向下看目标物体 + cameraObject.transform.LookAt(targetPosition); + + // 4. 调整倾斜角度(可选) + cameraObject.transform.Rotate(lookDownAngle, 0, 0); + } + //完成场地创建 IEnumerator CompleteGenerate() { @@ -232,6 +274,19 @@ public class MapManager : Singleton } yield return null; } + + IEnumerator SetUpMapUnityForTool() + { + // yield return StartCoroutine(MapGenerate()); + for (int i = 0; i < GameManager.Instance.ToolX.Count; i++) + { + for (int j = 0; j < GameManager.Instance.ToolX[i].Y.Count; j++) + { + GameManager.Instance.ToolX[i].Y[j].StartRegiste(); + } + } + yield return null; + } IEnumerator MapGenerate() { for (int i = 0; i < line; i++) @@ -301,6 +356,77 @@ public class MapManager : Singleton }*/ #endregion } + + IEnumerator MapGenerateTest() + { + for (int i = 0; i < line; i++) + { + if (i != 0) + { + generatePointTest.transform.position += columnOffSet; + } + generatePointTest.transform.position = new Vector3(20, 20, generatePointTest.transform.position.z); + + int currentColumn = column; + if (i != 0 && i % 2 != 0) + { + currentColumn = column - 1; + } + + for (int j = 0; j < currentColumn; j++) + { + if (i % 2 != 0 && j == 0) + { + generatePointTest.transform.position += lineOffSet / 2f; + } + + var a = Instantiate(mapUnity, generatePointTest.transform.position - new Vector3(0, 2, 0), mapUnity.transform.rotation); + MapUnity currentMapUnityScript = a.GetComponent(); + + currentMapUnityScript.locationX = i; + currentMapUnityScript.locationY = j; + currentMapUnityScript.RegisterUnitForTool(); + generatePointTest.transform.position += lineOffSet; + } + } + yield return null; + #region 隐藏多余节点 + /* //隐藏多余节点 + List X = GameManager.Instance.X; + for (int i = 0; i < (int)(line / 2f); i++) + { + + if (i == 0) + { + X[i].Y[0].gameObject.SetActive(false); + X[i].Y[1].gameObject.SetActive(false); + X[i].Y[X[i].Y .Count -1].gameObject.SetActive(false); + X[i].Y[X[i].Y.Count - 2].gameObject.SetActive(false); + } + else + { + X[i].Y[0].gameObject.SetActive(false); + X[i].Y[X[i].Y.Count - 1].gameObject.SetActive(false); + } + } + for (int i = (int)(line / 2f)+1; i < line ; i++) + { + + if (i == line -1) + { + X[i].Y[0].gameObject.SetActive(false); + X[i].Y[1].gameObject.SetActive(false); + X[i].Y[X[i].Y.Count - 1].gameObject.SetActive(false); + X[i].Y[X[i].Y.Count - 2].gameObject.SetActive(false); + } + else + { + X[i].Y[0].gameObject.SetActive(false); + X[i].Y[X[i].Y.Count - 1].gameObject.SetActive(false); + } + }*/ + #endregion + } IEnumerator MapGenerateDefault() { for (int i = 0; i < line; i++) diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs index be042319..63e0c905 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs @@ -7,9 +7,13 @@ using UnityEngine.UI; public class MapUnity : MonoBehaviour { public List unitPool;//临接对象池 - public int locationX;//六边形坐标 + public int locationX; public int locationY; + public int cubeQ;//六边形坐标(立方) + public int cubeS; + public int cubeR; + public bool compalte;//标识已完成 [Header("UI效果范围控件")] @@ -86,6 +90,11 @@ public class MapUnity : MonoBehaviour int xStart = locationX * 2 + 1; int yStart = locationY * 2 + 1; + //计算立方坐标 + (int q, int s, int r) = MathTool.AxialToCube(locationY, locationX); + cubeQ = q; + cubeS = s; cubeR = r; + //拼接地图 if (locationX !=0&&locationX % 2 != 0) { @@ -163,13 +172,22 @@ public class MapUnity : MonoBehaviour public void switchColor(int newColor) { - whoColour = newColor; + if (newColor != 10) + { + whoColour = newColor; + } RefreshWhoColor(); } public void RegisterUnit() { GameManager.Instance.X[locationX].Y[locationY] = this; } + + public void RegisterUnitForTool() + { + Debug.Log(GameManager.Instance.ToolX[0].Y.Count); + GameManager.Instance.ToolX[locationX].Y[locationY] = this; + } public void ConnectUnit() { diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs index 70c381a3..9bd4b4d8 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Player.cs @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -97,25 +98,32 @@ public class Player : MonoBehaviour TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none; } - - switch (GameManager.Instance.playerOn.whoColour) + try { - case Name .NodeColor .Red : - standOnBuff.sprite = onRed; - break; - case Name.NodeColor.Green: - standOnBuff.sprite = onGreen; - break; - case Name.NodeColor.Blue: - standOnBuff.sprite = onBule; - break; - case Name.NodeColor.Black: - standOnBuff.sprite = onBlack; - break; - case Name.NodeColor.White: - standOnBuff.sprite = defaultBuff; - break; + switch (GameManager.Instance.playerOn.whoColour) + { + case Name.NodeColor.Red: + standOnBuff.sprite = onRed; + break; + case Name.NodeColor.Green: + standOnBuff.sprite = onGreen; + break; + case Name.NodeColor.Blue: + standOnBuff.sprite = onBule; + break; + case Name.NodeColor.Black: + standOnBuff.sprite = onBlack; + break; + case Name.NodeColor.White: + standOnBuff.sprite = defaultBuff; + break; + } } + catch(Exception e) + { + + } + } diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/MainMnue.meta b/ColorlessWorld-2024-4-2/Assets/Scripts/Servent/MainMnue.meta similarity index 100% rename from ColorlessWorld-2024-4-2/Assets/Scripts/MainMnue.meta rename to ColorlessWorld-2024-4-2/Assets/Scripts/Servent/MainMnue.meta diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/MainMnue/MineMnueSlied.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Servent/MainMnue/MineMnueSlied.cs similarity index 100% rename from ColorlessWorld-2024-4-2/Assets/Scripts/MainMnue/MineMnueSlied.cs rename to ColorlessWorld-2024-4-2/Assets/Scripts/Servent/MainMnue/MineMnueSlied.cs diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/MainMnue/MineMnueSlied.cs.meta b/ColorlessWorld-2024-4-2/Assets/Scripts/Servent/MainMnue/MineMnueSlied.cs.meta similarity index 100% rename from ColorlessWorld-2024-4-2/Assets/Scripts/MainMnue/MineMnueSlied.cs.meta rename to ColorlessWorld-2024-4-2/Assets/Scripts/Servent/MainMnue/MineMnueSlied.cs.meta diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs index 7bacad0f..a95d47ab 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs @@ -41,7 +41,83 @@ public class MathTool return numbers; } + public static List<(int x, int y, int z)> RotateCoordinates(List<(int x, int y, int z)> coordinates, int angle) + { + List<(int x, int y, int z)> rotatedCoordinates = new List<(int x, int y, int z)>(); + + foreach (var coord in coordinates) + { + (int x, int y, int z) rotatedCoord = coord; + + // 将角度标准化到 0 - 360 之间,并判断旋转多少次 60 度 + //int rotationSteps = (angle % 360) / 60; + + int rotationSteps=0; + if (angle >= 350 || angle < 40) rotationSteps= 5; + if (angle >= 70 && angle < 110) rotationSteps = 0; + if (angle >= 130 && angle < 170) rotationSteps = 1; + if (angle >= 190 && angle < 230) rotationSteps = 2; + if (angle >= 250 && angle < 290) rotationSteps = 3; + if (angle >= 310 && angle < 350) rotationSteps = 4; + + + // 根据旋转的次数进行坐标变换 + for (int i = 0; i < rotationSteps; i++) + { + rotatedCoord = Rotate60DegreesClockwise(rotatedCoord); + } + + rotatedCoordinates.Add(rotatedCoord); + } + + return rotatedCoordinates; + } + + // 函数用于将坐标顺时针旋转 60 度 + private static (int x, int y, int z) Rotate60DegreesClockwise((int x, int y, int z) coord) + { + int x = coord.x; + int y = coord.y; + int z = coord.z; + // 60 度顺时针旋转公式 + return (-z, -x, -y); + } + + public static (int x, int y) CubeToAxial(int q, int s, int r) + { + + int y = -r; + int x = q - (y + 1) / 2; + return (x, y); + } + + // 从轴向坐标转换为立方坐标 + public static (int q, int s, int r) AxialToCube(int x, int y) + { + + int q = (y+1)/2+x; + int r = -y; + int s = -q - r; + return (q, s, r); + } + + public static List<(int x, int y, int z)> TranslateHexesToNewOrigin(List<(int x, int y, int z)> hexList, (int x, int y, int z) newOrigin) + { + List<(int x, int y, int z)> translatedHexes = new List<(int x, int y, int z)>(); + + foreach (var hex in hexList) + { + int newX = hex.x + newOrigin.x; + int newY = hex.y + newOrigin.y; + int newZ = hex.z + newOrigin.z; + + // Ensure x + y + z = 0 for consistency in cube coordinates + translatedHexes.Add((newX, newY, newZ)); + } + + return translatedHexes; + } public static void keepNature(int number) { diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Name.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Name.cs index 58100da6..02faa73f 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Name.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Name.cs @@ -99,7 +99,7 @@ public static class Name public static int stringColorToint(string color) { - int intcolor = 1; + int intcolor = 10; switch (color) { case Color.Red: diff --git a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs index be7dfd34..ac34795f 100644 --- a/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs +++ b/ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs @@ -1,8 +1,12 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using Unity.VisualScripting; using UnityEngine; +using UnityEngine.UIElements; +using static UnityEditor.Experimental.AssetDatabaseExperimental.AssetDatabaseCounters; +using static UnityEditor.FilePathAttribute; public class getNodeTools { @@ -107,6 +111,21 @@ public class getNodeTools } } + public static MapUnity getNodeWithCube(int q, int s,int r) + { + //计算立方坐标 + (int x, int y) = MathTool.CubeToAxial(q,s,r); + MapUnity result = GameManager.Instance.X[y].Y[x]; + return result; + } + + public static MapUnity getToolNodeWithCube(int q, int s, int r) + { + //计算立方坐标 + (int x, int y) = MathTool.CubeToAxial(q, s, r); + MapUnity result = GameManager.Instance.ToolX[y].Y[x]; + return result; + } public static HashSet getAllNodes() { HashSet set = new HashSet(); @@ -618,6 +637,86 @@ public class getNodeTools }*/ } + public static void setEffectRangePreviewTest(CardOriginalData cardOriginalData, float euler, MapUnity currentNode, CardEntity cardEntity) + { + List<(int, int, int)> cubeList = new List<(int, int, int)>(); + int intEuler=(int)euler; + //Debug.Log("euler是" + intEuler); + for (int i = 0; i < cardOriginalData.nodesMark.Length; i++) + { + + try + { + string[] marks = cardOriginalData.nodesMark[i].Split("_"); + (int q, int s, int y) = MathTool.AxialToCube(int.Parse(marks[0]) , int.Parse(marks[1])); + cubeList.Add((q, s, y)); + } + catch (Exception e) + { } + } + List<(int, int, int)> rotatedCubeList = new List<(int, int, int)>(); + rotatedCubeList = MathTool.RotateCoordinates(cubeList, intEuler); + List<(int, int, int)> trueCubeList = new List<(int, int, int)>(); + trueCubeList = MathTool.TranslateHexesToNewOrigin(rotatedCubeList, (currentNode.cubeQ, currentNode.cubeS, currentNode.cubeR)); + foreach (var tuple in trueCubeList) + { + MapUnity endNode = new MapUnity(); + endNode = getNodeWithCube(tuple.Item1, tuple.Item2, tuple.Item3); + if (endNode != null) + { + cardEntity.influencePreviewPool.Add(endNode); + } + } + + } + + public static void setCardImageTest(CardOriginalData cardOriginalData, float euler, MapUnity currentNode,CardEntity cardEntity) + { + List<(int, int, int)> cubeList = new List<(int, int, int)>(); + int intEuler = (int)euler; + Debug.Log("euler是" + intEuler); + for (int i = 0; i < cardOriginalData.nodesMark.Length; i++) + { + + try + { + string[] marks = cardOriginalData.nodesMark[i].Split("_"); + (int q, int s, int y) = MathTool.AxialToCube(int.Parse(marks[0]), int.Parse(marks[1])); + cubeList.Add((q, s, y)); + } + catch (Exception e) + { } + } + List<(int, int, int)> rotatedCubeList = new List<(int, int, int)>(); + rotatedCubeList = MathTool.RotateCoordinates(cubeList, intEuler); + List<(int, int, int)> trueCubeList = new List<(int, int, int)>(); + trueCubeList = MathTool.TranslateHexesToNewOrigin(rotatedCubeList, (currentNode.cubeQ, currentNode.cubeS, currentNode.cubeR)); + for (int i = 0; i < trueCubeList.Count; i++) + { + MapUnity endNode = new MapUnity(); + endNode = getToolNodeWithCube(trueCubeList[i].Item1, trueCubeList[i].Item2, trueCubeList[i].Item3); + if (endNode != null) + { + Debug.Log("染色成功"+ cardOriginalData.nodesColor[i]); + endNode.switchColor(Name.stringColorToint(cardOriginalData.nodesColor[i])); + //endNode.influenced = true; + } + } + RenderTexture renderTexture = new RenderTexture(512, 512, 24); + Camera renderCamera = MapManager.Instance.cameraObject.GetComponent(); + renderCamera.targetTexture = renderTexture; + Texture2D texture = new Texture2D(renderTexture.width, renderTexture.height, TextureFormat.ARGB32, false); + RenderTexture.active = renderCamera.targetTexture; + renderCamera.Render(); + texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0); + texture.Apply(); + RenderTexture.active = null; + Material material = new Material(Shader.Find("Standard")); + material.mainTexture = renderTexture; + cardEntity.cardImage.sprite= Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f)); + + } + public static HashSet setEffectRangePreviewNoCard(string effectRange, float euler, MapUnity currentNode) { MapUnity playerOnNode = GameManager.Instance.playerOn.transform.GetComponent(); diff --git a/ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv b/ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv new file mode 100644 index 00000000..49c17d37 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv @@ -0,0 +1,2 @@ +锘縄D,璐圭敤,鏂芥硶鑼冨洿,浣滅敤鑼冨洿,鏉′欢,鍔熻兘,鏁板,鍦板潡鏍囪,鍦板潡棰滆壊,鍥剧墖璺緞 +1001,1,2,3_1,red>8;blue<20,1;2,5;4,0_0;1_0;2_0,red;red;red,CardIcon/1010 diff --git a/ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv.meta b/ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv.meta new file mode 100644 index 00000000..1e014b06 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 741f3a676aaf67e458b1f5f2dfb9dea0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ColorlessWorld-2024-4-2/Assets/data/card_data_4.csv b/ColorlessWorld-2024-4-2/Assets/data/card_data_4.csv new file mode 100644 index 00000000..e54225b1 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/data/card_data_4.csv @@ -0,0 +1,16 @@ +锘縄D,鍚嶇О,璐圭敤,绋鏈夊害,鏂芥硶鑼冨洿,浣滅敤鑼冨洿,娑堣,鏉′欢,鍔熻兘,鏁板,鍦板潡鏍囪,鍦板潡棰滆壊,鍥剧墖璺緞 +1001,鏄熼棯,1,1,3,1,0,none,1,5,,green,CardIcon/1 +1002,寰厜,1,1,1,2,0,none,2,5,0,red;red,CardIcon/2 +1003,鍏夎緣鏉栧嚮,2,2,1,4_1,0,none;red>3_green>1,1;5_1,9;2_5,0;0_0;0_0_0,red;red;red;red,CardIcon/4_1 +1004,鏄熻緣鎶ょ浘,2,2,2,3_2,0,none;red>5,2;2,8;1,2;-2,red;red;red,CardIcon/3_2 +1101,,1,2,1,5_4,0,red>4;red>6,1;25,8;3,0;0_-1;0_1;0_0,red;red;red;red;red,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1102,,1,1,2,5_5,0,red>3,2,7,1;-1;1_0;-1_0,red;red;red;red;red,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1103,,1,1,1,4_1,0,red>1,1,10,0;0_0;0_0_0,red;red;red;red,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1104,,1,1,3,3_4,0,red>2,25,8,0;-1,red;red;red,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1105,,2,2,2,6_5,0,red>2;red>10,1;5,12;2,0;-1;0_-1;-1_-1;0_0,red;red;red;red;red;red;red,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1106,,1,1,1,4_1,0,red>3_green>2,1,8,0;0_0;0_0_0,red;red;green;green,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1107,,2,2,2,6_7,0,red>7;blue<4,25;4,6;4,0;-1;1;0_0;0_0_0,red;red;red;red;green;green,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1108,,2,2,2,6_4,0,red>7;green>4,1;4,12;6,0;-1;1;0_1;0_-1,red;red;red;red;green;green,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1109,,2,2,2,7_3,0,red<15;blue<6,1_25;19,7_8;2,0;-1;1;-2;2;0_0,green;green;red;red;red;red;green,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1110,,1,1,2,3_4,0,red>3,1,6,0;-1,red;red;blue,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 +1111,,2,2,0,6_3,0,red>6;blue>2,1;48,6;5,0;1;-1;-2;2;3,None;blue;blue;blue;red;red;red,CardIcon/Sslx_Card_Kamizn_Feibiao_v01 diff --git a/ColorlessWorld-2024-4-2/Assets/data/card_data_4.csv.meta b/ColorlessWorld-2024-4-2/Assets/data/card_data_4.csv.meta new file mode 100644 index 00000000..61be35c4 --- /dev/null +++ b/ColorlessWorld-2024-4-2/Assets/data/card_data_4.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 45d411a9f662d64478953b229cfd1a00 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ColorlessWorld-2024-4-2/obj/Debug/Assembly-CSharp-Editor.csproj.AssemblyReference.cache b/ColorlessWorld-2024-4-2/obj/Debug/Assembly-CSharp-Editor.csproj.AssemblyReference.cache index 6ff4879b..7c049750 100644 Binary files a/ColorlessWorld-2024-4-2/obj/Debug/Assembly-CSharp-Editor.csproj.AssemblyReference.cache and b/ColorlessWorld-2024-4-2/obj/Debug/Assembly-CSharp-Editor.csproj.AssemblyReference.cache differ