Browse Source

合并代码

pull/75/head
yjm484 1 year ago
parent
commit
d1d33aae7d
  1. 11
      ColorlessWorld-2024-4-2/Assets/GameDate/cardDeckList.asset
  2. 45
      ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity
  3. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs
  4. 13
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardEntity.cs
  5. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalData.cs
  6. 17
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs
  7. 8
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/Temp.meta
  8. 612
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/Temp/TempPlaceEffect.cs
  9. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/FightReward/RewardManager.cs
  10. 37
      ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs
  11. 148
      ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs
  12. 24
      ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs
  13. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AStar/AStarManager.cs
  14. 29
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/CoordinateColorPair.cs
  15. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/CoordinateColorPair.cs.meta
  16. 76
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/MathTool.cs
  17. 84
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs
  18. 80
      ColorlessWorld-2024-4-2/Assets/Scripts/manager/CardManager.cs
  19. 64
      ColorlessWorld-2024-4-2/Assets/Scripts/manager/SettlementManager.cs
  20. 2
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv
  21. 2
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv.meta

11
ColorlessWorld-2024-4-2/Assets/GameDate/cardDeckList.asset

@ -14,8 +14,9 @@ MonoBehaviour:
m_EditorClassIdentifier:
cardDeckList:
- 1001
- 1002
- 1003
- 1004
- 2001
- 1035
- 1001
- 1001
- 1001
- 1001
- 1001
- 1001

45
ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity

@ -14648,6 +14648,37 @@ RectTransform:
m_AnchoredPosition: {x: -780, y: 246.483}
m_SizeDelta: {x: 157.04004, y: 173.66998}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &668478574
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 668478575}
m_Layer: 0
m_Name: MapGeneraterTest
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &668478575
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 668478574}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -50.36264, 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 &669923021
GameObject:
m_ObjectHideFlags: 0
@ -26856,6 +26887,15 @@ MonoBehaviour:
- Y: []
- Y: []
- Y: []
ToolX:
- Y: []
- Y: []
- Y: []
- Y: []
- Y: []
- Y: []
- Y: []
- Y: []
character: 0
playerOn: {fileID: 0}
player: {fileID: 1809205617}
@ -42016,7 +42056,11 @@ MonoBehaviour:
mapUnity: {fileID: 887005656701010215, guid: ecde4b12dc4538b4caff9ada56c9ab30, type: 3}
line: 9
column: 6
lineForTool: 8
columnForTool: 8
generatePoint: {fileID: 514899946}
generatePointTest: {fileID: 668478574}
cameraObject: {fileID: 0}
lineOffSet: {x: 1, y: 0, z: 0}
columnOffSet: {x: 0, y: 0, z: 0.865}
enemyGenerateDataList: []
@ -42872,6 +42916,7 @@ Transform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 514899947}
- {fileID: 668478575}
- {fileID: 1802141879}
- {fileID: 1285317928}
m_Father: {fileID: 0}

2
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs

@ -457,7 +457,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;
getNodeTools.setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, euler, currentNode,cardEntity);
getNodeTools.setEffectRangePreviewTest(cardEntity.cardOriginalData, euler, currentNode,cardEntity);
//setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, euler, currentNode);
//influencePreviewPool.Add(currentNode);

13
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;
@ -134,7 +135,8 @@ public class CardEntity : MonoBehaviour
//createCardDescription();
//createCardName();
//createCardCost();
createCardImage();
//createCardImage();
createCardImageTest();
this.cardIndex = cardIndex;
}
@ -238,6 +240,15 @@ public class CardEntity : MonoBehaviour
}
}
}
public void createCardImageTest()
{
MapUnity currentNode = GameManager.Instance.ToolX[3].Y[3];
Debug.Log("card´´˝¨");
CardManager.setCardImageTest(cardOriginalData, 90.0f, currentNode,this);
}
//»ñÈ¡¿¨ÅÆÃû×Ö
public void createCardName()

2
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalData.cs

@ -49,6 +49,8 @@ public class CardOriginalData : System.Object
public HashSet<string> originFunctionVal;
public HashSet<CoordinateColorPair> cardImageMark;
public string CardId
{
get { return cardId; }

17
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs

@ -20,7 +20,7 @@ public class CardOriginalDataList : Singleton<CardOriginalDataList>
private void OnEnable()
{
cardOriginalDataList = ReadExcel("card_data_3.csv");
cardOriginalDataList = ReadExcel("card_data_4.csv");
//categorizeCardsByRarity();
existCardOriginalDataList = cardOriginalDataList;
@ -138,6 +138,7 @@ public class CardOriginalDataList : Singleton<CardOriginalDataList>
private CardOriginalData loadDatafromCsv(string[] values, CardOriginalData cardOriginalData)
{
cardOriginalData.cardImageMark = new HashSet<CoordinateColorPair>();
//CardOriginalData cardOriginalData = CardOriginalData.Instance;
cardOriginalData.CardId = values[0];
//cardOriginalData.ChineseName = values[1];
@ -153,6 +154,20 @@ public class CardOriginalDataList : Singleton<CardOriginalDataList>
cardOriginalData.testTrueFunctionVal = new Dictionary<string, string>();
cardOriginalData.originFunctionVal = new HashSet<string>();
cardOriginalData.ImgPath = values[9];
for (int i = 0; i < cardOriginalData.nodesMark.Length; i++)
{
// 拆分坐标
string[] coords = cardOriginalData.nodesMark[i].Split('_');
int x = int.Parse(coords[0]);
int y = int.Parse(coords[1]);
string color = cardOriginalData.nodesColor[i];
// 创建 CoordinateColorPair 实例
CoordinateColorPair pair = new CoordinateColorPair(x, y, color);
// 添加到 HashSet
cardOriginalData.cardImageMark.Add(pair);
}
getDictionaryFromString(values, cardOriginalData);
return cardOriginalData;

8
ColorlessWorld-2024-4-2/Assets/Scripts/Card/Temp.meta

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 178e0d528cfe03d4f81caddb6d109dbb
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

612
ColorlessWorld-2024-4-2/Assets/Scripts/Card/Temp/TempPlaceEffect.cs

@ -1,612 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using System;
using Unity.VisualScripting;
using System.Data;
public class TempPlaceEffect: MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
[Header("拖拽参数")]
public Transform originalParent;
public Vector3 originalpoint;
//更换父级前的排序位置
public int originalIndexInChild;
public EventSystem eventSystem;
public bool canUse = true;//决定卡牌是否可以释放
bool choosed;//标识卡牌是否被选中
[Header("贝塞尔曲线瞄准")]
public GameObject ainPanle;
[Header("影响格参数")]
public MapUnity currentNode;//瞄准的格子
[Header("卡牌拖拽状态")]
public CardDragState dragState = CardDragState.noDrag;
public enum CardDragState
{
onBeginDrag,
onDrag,
onEndDrag,
noDrag
}
PointerEventData eventData;
List<RaycastResult> result = new List<RaycastResult>();
public bool ready;//是否已到达可释放位置
[Header("卡牌属性")]
public List<MapUnity> castingPool;//卡牌打出范围
private CardEntity cardEntity;
[Header("射线图层剔除")]
public LayerMask layerMask;
[Header("鼠标检测脚本")]
public CardOnMouseEnter cardOnMouseEnter;
void Start()
{
originalParent = gameObject.transform.parent;
dragState = CardDragState.noDrag;
eventSystem = GameObject.FindObjectOfType<EventSystem>();
eventData = new PointerEventData(eventSystem);
cardOnMouseEnter = GetComponent<CardOnMouseEnter>();
eventSystem = GameObject.FindObjectOfType<EventSystem>();
cardEntity = GetComponent<CardEntity>();
cardEntity.createCard("2001", 0, true);
}
private void Update()
{
handleRightClickCancel();
if (dragState != CardDragState.noDrag && dragState != CardDragState.onDrag)
{
//UI射线检测
eventData.position = Mouse.current.position.value;
eventSystem.RaycastAll(eventData, result);
if (result.Count > 0)
{
Debug.Log(result[0].gameObject.name);
}
}
if (GameManager.Instance.onDraw == false && TurnMaster.Instance.servantAction != TurnMaster.ServantAction.useSkill)
{
switch (dragState)
{
case CardDragState.onBeginDrag:
GameManager.Instance.onDrag = true;
SettlementManager.Instance.expectSettle(cardEntity.cardOriginalData);//预计伤害计算
if (choosed == false)
{
TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.useCard;
CardChoose(eventData);
dragState = CardDragState.onDrag;
}
break;
case CardDragState.onDrag:
CardFollow();
if (Mouse.current.leftButton.wasReleasedThisFrame && ready)
{
dragState = CardDragState.onEndDrag;
}
break;
case CardDragState.onEndDrag:
TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none;
CardUse();
break;
case CardDragState.noDrag:
if (Mouse.current.leftButton.wasReleasedThisFrame && GameManager.Instance.onDrag == false && TurnMaster.Instance.playerAction == TurnMaster.PlayerAction.none)
{
eventData.position = Mouse.current.position.value;
eventSystem.RaycastAll(eventData, result);
if (result.Count > 0)
{
// Debug.Log(result[0].gameObject.name);
if (result[0].gameObject == this.gameObject)
{
dragState = CardDragState.onBeginDrag;
}
}
}
break;
}
}
}
//卡片动作
//开始选中
public void CardChoose(PointerEventData eventData)
{
banActionCardCheck();
disArmCheck();
costCheck();
disCardCheck();
if (!cardEntity.canUse)
{
resetComponentPosition();
return;
}
choosed = true;
//选中音效
AudioManager.Instance.ChooseCardVoicePlayer(true);
GetComponent<CanvasGroup>().blocksRaycasts = false;
originalpoint = this.transform.localPosition;
transform.SetParent(transform.parent.parent);
transform.localPosition = cardOnMouseEnter.originPoint;
GetComponent<RectTransform>().localScale = cardOnMouseEnter.targetScale;
//根据卡牌数据决定是否调用曲线
if (cardEntity.cardOriginalData.CastingRange != 0)
{
//释放范围为0则不需要调用曲线
ainPanle.SetActive(true);
}
else
{
ainPanle.SetActive(false);
}
}
//拖拽中
public void CardFollow()
{
if (!cardEntity.canUse)
{
return;
}
dyeing();
eventData.position = Mouse.current.position.value;
eventSystem.RaycastAll(eventData, result);
// Debug.Log(result[0].gameObject.name);
if (result.Count > 0)
{
if (result[0].gameObject.name == "TotalPanel")
{
if (ready == false)
{
ready = true;
}
transform.localPosition = cardOnMouseEnter.originPoint;// + new Vector3(0, 30, 0);
// transform.localScale = new Vector3(1, 1, 1);
if (cardEntity.cardOriginalData.CastingRange != 0)
{
ainPanleWork(eventData);
}
else
{
noAinPanleWork(eventData);
}
}
else
{
if (ready == true)
{
resetComponentPosition();
}
else
{
// Debug.Log(transform.position);
// Debug.Log(eventData.position);
// transform.position = eventData.position;
Vector3 eventDataWorld = CardActiveSort.Instance.ScreenPointToWorldPoint(eventData.position, 4f);
transform.position = eventDataWorld;
}
}
}
}
//卡牌释放
public void CardUse()
{
EnemyManager.Instance.HideExpHP_Observer();
GameManager.Instance.onDrag = false;
//目标释放选择
/*if (!cardTargetCheck())
{
canUse = false;
Debug.Log("目标不符合");
//resetComponentPosition();
}*/
if (canUse)
{
CardActiveSort.Instance.ReflashCardPoint();
StartCoroutine(OnDragIEnumerator(eventData));
}
else
{
canUse = true;
resetComponentPosition();
}
dragState = CardDragState.onDrag;
}
//检查卡牌的费用是否可以释放
private void costCheck()
{
Debug.Log("当前费用:" + TurnMaster.Instance.currentCost);
Debug.Log("总费用:" + Usermanager.Instance.totalCost);
int trueCost = cardEntity.cardOriginalData.Cost;
if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Black))
{
trueCost++;
}
if (GameManager.Instance.playerState.currentCost - trueCost < 0)
{
Debug.Log("费用不足");
TipManager.Instance.SendTip("费用不足");
cardEntity.canUse = false;
}
}
private void stepCostCheck(bool canAdv)
{
/*if (canAdv)
{
if (cardEntity.cardOriginalData.AdvantageFunctionVal.ContainsKey(CardFunction.costStep))
{
if (GameManager.Instance.playerState.currentStepRange< int.Parse(cardEntity.cardOriginalData.AdvantageFunctionVal[CardFunction.costStep]))
{
Debug.Log("步数不足");
cardEntity.canUse = false;
}
}
}
else
{
if (cardEntity.cardOriginalData.FunctionVal.ContainsKey(CardFunction.costStep))
{
if (GameManager.Instance.playerState.currentStepRange < int.Parse(cardEntity.cardOriginalData.FunctionVal[CardFunction.costStep]))
{
Debug.Log("步数不足");
cardEntity.canUse = false;
}
}
}*/
}
private void disArmCheck()
{
/*if (Usermanager.playerAbnormalCondition.ContainsKey(AbnormalCondition.disarm)&&cardEntity.cardOriginalData.CarType.Equals(CardType.attack))
{
Debug.Log("被缴械了");
cardEntity.canUse = false;
}*/
}
private void disCardCheck()
{
Dictionary<string, string> trueFunctionVal = new Dictionary<string, string>();
//trueFunctionVal.AddRange(cardEntity.cardOriginalData.FunctionVal);
int drawCardNum = 0;
foreach (KeyValuePair<string, string> kvp in trueFunctionVal)
{
switch (kvp.Key)
{
case CardFunction.drawCard:
if (Usermanager.playerAbnormalCondition.ContainsKey(AbnormalCondition.banDrawCard))
{
}
else
{
drawCardNum += int.Parse(kvp.Value);
}
break;
}
}
foreach (KeyValuePair<string, string> kvp in trueFunctionVal)
{
switch (kvp.Key)
{
case CardFunction.discard:
if (TurnMaster.Instance.handCard.cardEntityList.Count - int.Parse(kvp.Value) - 1 + drawCardNum < 0)
{
Debug.Log("没有足够的牌可以弃牌");
cardEntity.canUse = false;
}
break;
}
}
}
private void banActionCardCheck()
{
if (TurnMaster.Instance.playerAction == TurnMaster.PlayerAction.banAction)
{
cardEntity.canUse = false;
}
else
{
cardEntity.canUse = true;
}
if (TurnMaster.Instance.playerAction == TurnMaster.PlayerAction.move)
{
cardEntity.canUse = false;
}
else if (TurnMaster.Instance.playerAction != TurnMaster.PlayerAction.banAction)
{
cardEntity.canUse = true;
}
}
private void resetComponentPosition()
{
//取消音效
AudioManager.Instance.ChooseCardVoicePlayer(false);
//遍历范围预览池消除影响色
foreach (MapUnity mapUnity in MapUnityManager.Instance.castPool)
{
mapUnity.influenced = false;
}
MapUnityManager.Instance.castPool.Clear();
//遍历影响池变色
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
mapUnity.influenced = false;
}
cardEntity.influencePreviewPool.Clear();
ready = false;
GameManager.Instance.onDrag = false;
dragState = CardDragState.noDrag;
if (TurnMaster.Instance.playerAction == TurnMaster.PlayerAction.useCard)
TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none;
choosed = false;
canUse = true;//取消释放
ainPanle.SetActive(false);
//其他位置都归位
transform.SetParent(originalParent);
//归位孩子顺序
transform.SetSiblingIndex(cardOnMouseEnter.oringinIndex);
GetComponent<CanvasGroup>().blocksRaycasts = true;
transform.localScale = new Vector3(1f, 1f, 1f);
CardActiveSort.Instance.ReflashCardPoint();
//隐藏怪物虚血
EnemyManager.Instance.HideExpHP_Observer();
return;
}
//右键取消释放
private void handleRightClickCancel()
{
if (choosed && Mouse.current.rightButton.wasPressedThisFrame)
{
resetComponentPosition();
}
}
public void OnBeginDrag(PointerEventData eventData)
{
if (GameManager.Instance.onDrag == false && TurnMaster.Instance.playerAction == TurnMaster.PlayerAction.none && TurnMaster.Instance.servantAction != TurnMaster.ServantAction.useSkill)
dragState = CardDragState.onBeginDrag;
}
private void ainPanleWork(PointerEventData eventData)
{
//射线检测瞄准的地图节点,判断是否可放置和改变放置影响区
Ray ray = Camera.main.ScreenPointToRay(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);
//检测到跟上次瞄准地方不同,更新
if (currentNode == null || raycastHit.collider.transform.gameObject != currentNode.gameObject)
{
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
mapUnity.influenced = false;
}
cardEntity.influencePreviewPool.Clear();
currentNode = raycastHit.collider.transform.GetComponent<MapUnity>();
//重新调用范围预览
//GameManager.Instance.player.StepPreviewInfluencedNode(cardEntity.cardOriginalData.CastingRange);
int castRange = cardEntity.cardOriginalData.CastingRange;
if (MapUnityManager.Instance.isPlayerOn(Name.NodeColor.Green))
{
castRange++;
}
setCastingRangePreview(castRange);
//预览影响范围
if (currentNode.influenced)
{
//根据卡牌属性改变影响池
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);
//setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, euler, currentNode);
//influencePreviewPool.Add(currentNode);
}
//更新效果作用范围内怪物虚血
EnemyManager.Instance.ShowExpHp_Observer(cardEntity.influencePreviewPool);
}
}
}
private void setCastingRangePreview(int castRange)
{
foreach (MapUnity mapUnity in MapUnityManager.Instance.castPool)
{
mapUnity.influenced = false;
}
MapUnityManager.Instance.castPool.Clear();
MapUnityManager.Instance.getCastPool(cardEntity.cardOriginalData.EffectRange, castRange);
}
private void getInfluencePreviePoll(MapUnity currentNode, string effecctRange)
{
switch (effecctRange)
{
case EffectRange.range1:
break;
}
}
private void noAinPanleWork(PointerEventData eventData)
{
/*Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.value);
if (eventData.pointerCurrentRaycast.gameObject != null)
{
if (Physics.Raycast(ray, out RaycastHit raycastHit))
{
currentNode = raycastHit.collider.transform.GetComponent<MapUnity>();
cardEntity.influencePreviewPool.Add(currentNode);
}
}*/
getNodeTools.setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, 30.0f, currentNode, cardEntity);
}
public void OnDrag(PointerEventData eventData)
{
}
private void dyeing()
{
//遍历影响池变色
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
mapUnity.PlayerInfluenced(cardEntity.influencePreviewPool);
mapUnity.playerMark.meshRenderer.material = mapUnity.castPreRange;
}
}
public void OnEndDrag(PointerEventData eventData)
{
}
private IEnumerator OnDragIEnumerator(PointerEventData eventData)
{
if (!cardEntity.canUse)
{
yield break;
}
choosed = false;
if (canUse)
{
if (eventData.pointerCurrentRaycast.gameObject != null)
{
resetComponentPosition();
}
if (ainPanle.activeSelf)
{
ainPanle.SetActive(false);//关闭贝塞尔曲线
}
//先判断该卡牌的类型是否是需要范围
if (cardEntity.cardOriginalData.CastingRange != 0)
{
if (currentNode != null && currentNode.influenced)
{
//卡牌释放效果
yield return StartCoroutine(cardEntity.settle(0, currentNode));
}
else
{
resetComponentPosition();
}
}
else
{
//卡牌释放效果
yield return StartCoroutine(cardEntity.settle(0, GameManager.Instance.playerOn));
}
yield break;
}
else
{
canUse = true;
}
}
private bool cardTargetCheck()
{
bool targetRight = false;
switch (cardEntity.cardOriginalData.CardTarget)
{
case Name.Target.enemy:
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
if (mapUnity.enemyNode != null && mapUnity.enemyNode.enemyType == EnemyNode.EnemyType.enemy)
{
targetRight = true; break;
}
}
break;
case Name.Target.enemyAndBuilding:
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
if (mapUnity.enemyNode != null)
{
targetRight = true; break;
}
}
break;
case Name.Target.ally:
targetRight = true;
break;
}
Debug.Log("targetRight是" + targetRight);
return targetRight;
}
}

2
ColorlessWorld-2024-4-2/Assets/Scripts/FightReward/RewardManager.cs

@ -80,7 +80,7 @@ public class RewardManager : Singleton<RewardManager>
var cardChoosePanle = Instantiate(cardChoosePanlePrefab, cardChoosePanleFather.transform);//ÉúłÉŃĄż¨ąí
cardRewardTipData.cardChoosePanle = cardChoosePanle;
GeneratorRewardCard(cardChoosePanle.transform .GetChild(1), cardTip,amount);//生成随机卡牌
//GeneratorRewardCard(cardChoosePanle.transform .GetChild(1), cardTip,amount);//生成随机卡牌
break;
case RewardType.money:
var moneyTip = Instantiate(rewardTipPrefabMoney, chooseRewardPanle.transform);

37
ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs

@ -9,6 +9,7 @@ public class GameManager : Singleton<GameManager>
{
public bool complete;
public List <Yunit> X;
public List<Yunit> ToolX;
[Header("当前选择角色")]
public SelectedCharacter character;
public enum SelectedCharacter
@ -119,15 +120,16 @@ public class GameManager : Singleton<GameManager>
private void Start()
{
//生成空地图列表
// GenerateEnmptyMapList();
GenerateEnmptyMapListDefault();
//生成角色数据
if (PlayerStatsManager .Instance .playerState != null)
if (PlayerStatsManager.Instance.playerState != null)
playerState = Instantiate(PlayerStatsManager.Instance.playerState);
//生成角色数据
if (ServentStateManager .Instance .servantState != null)
servantState = Instantiate(ServentStateManager.Instance.servantState);
if (ServentStateManager.Instance.servantState != null)
servantState = Instantiate(ServentStateManager.Instance.servantState);
//Éú³É¿ÕµØÍ¼Áбí
// GenerateEnmptyMapList();
GenerateEnmptyMapListDefault();
GenerateEnmptyMapListForTool();
//开局场地涂色并开始阶段
StartCoroutine(StartStartColourCoroutine(complete));
}
@ -182,6 +184,29 @@ public class GameManager : Singleton<GameManager>
}
}
}
public void GenerateEnmptyMapListForTool()
{
if (complete == false)
{
for (int i = 0; i < MapManager.Instance.lineForTool; i++)
{
int currentColum = 0;
if (i % 2 == 0)
{
currentColum = MapManager.Instance.columnForTool;
}
else
{
currentColum = MapManager.Instance.columnForTool - 1;
}
for (int j = 0; j < currentColum; j++)
{
ToolX[i].Y.Add(null);
}
}
}
}
private void Update()
{
//绿色地块优势

148
ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs

@ -12,8 +12,15 @@ public class MapManager : Singleton<MapManager>
public int line;
public int column;
public int lineForTool;
public int columnForTool;
public GameObject generatePoint;
public GameObject generatePointTest;
public GameObject cameraObject;
public Vector3 lineOffSet;
public Vector3 columnOffSet;
@ -177,7 +184,7 @@ public class MapManager : Singleton<MapManager>
bookAnim.GetComponent<Animator>().SetTrigger("move");
//书缝愈合
//bookUpAnim.SetActive(true);
StartCoroutine(GenerateProcessTest());
enemyBurn(PlayerStatsManager.Instance.levelDevelopData.fightEenemyPool);
}
//总动画控制进程
@ -191,11 +198,13 @@ public class MapManager : Singleton<MapManager>
yield return StartCoroutine(MapGenerateDefault());
// yield return StartCoroutine(MapGenerateDefault());
yield return StartCoroutine(SetUpMapUnity());
yield return StartCoroutine(TransformMapUnity());
yield return StartCoroutine(TransformMapUnity());
yield return StartCoroutine(SetUpMapUnityForCube());
yield return StartCoroutine(UPMoveMapUnity());
yield return new WaitForSeconds(2);
yield return StartCoroutine(EnemyGenerate());
yield return StartCoroutine(CompleteGenerate());
CardManager.createCardImageMap();
}
//场地坐标系转换(新转放行)
IEnumerator TransformMapUnity()
@ -240,6 +249,44 @@ public class MapManager : Singleton<MapManager>
}
yield return null;
}
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<Camera>();
// 设置摄像机参数
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()
{
@ -277,6 +324,32 @@ public class MapManager : Singleton<MapManager>
}
yield return null;
}
IEnumerator SetUpMapUnityForCube()
{
// yield return StartCoroutine(MapGenerate());
for (int i = 0; i < GameManager.Instance.X.Count; i++)
{
for (int j = 0; j < GameManager.Instance.X[i].Y.Count; j++)
{
GameManager.Instance.X[i].Y[j].CalCube();
}
}
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++)
@ -388,6 +461,77 @@ public class MapManager : Singleton<MapManager>
}
yield return null;
}
IEnumerator MapGenerateTest()
{
for (int i = 0; i < lineForTool; i++)
{
if (i != 0)
{
generatePointTest.transform.position += columnOffSet;
}
generatePointTest.transform.position = new Vector3(20, 20, generatePointTest.transform.position.z);
int currentColumn = columnForTool;
if (i != 0 && i % 2 != 0)
{
currentColumn = columnForTool - 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<MapUnity>();
currentMapUnityScript.locationX = i;
currentMapUnityScript.locationY = j;
currentMapUnityScript.RegisterUnitForTool();
generatePointTest.transform.position += lineOffSet;
}
}
yield return null;
#region 隐藏多余节点
/* //隐藏多余节点
List<Yunit> 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
}
//方形场地创建
public void CreateSquareMap()
{

24
ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs

@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
@ -8,9 +9,13 @@ using UnityEngine.UI;
public class MapUnity : MonoBehaviour
{
public List<MapUnity> unitPool;//临接对象池
public int locationX;//Áù±ßÐÎ×ø±ê
public int locationX;
public int locationY;
public int cubeQ;//六边形坐标(立方)
public int cubeS;
public int cubeR;
public bool compalte;//标识已完成
[Header("UI效果范围控件")]
@ -103,6 +108,7 @@ public class MapUnity : MonoBehaviour
int xStart = locationX * 2 + 1;
int yStart = locationY * 2 + 1;
//拼接地图
if (locationX !=0&&locationX % 2 != 0)
{
@ -127,6 +133,16 @@ public class MapUnity : MonoBehaviour
locationX = X; locationY = Y;
}
public void CalCube()
{
//计算立方坐标
(int q, int s, int r) = MathTool.AxialToCube(locationX, locationY);
cubeQ = q;
cubeS = s; cubeR = r;
}
void Update()
{
if (influenced==false)
@ -225,6 +241,12 @@ public class MapUnity : MonoBehaviour
{
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()
{
for (int i = 0; i < 6; i++)

2
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AStar/AStarManager.cs

@ -174,7 +174,7 @@ public class AStarManager : Singleton<AStarManager>
openList.Add(currentNode.unitPool[i]);
Debug.Log("x" + currentNode.unitPool[i].locationX + "y" + currentNode.unitPool[i].locationY + "f" + currentNode.unitPool[i].aStarNode.f);
//Debug.Log("x" + currentNode.unitPool[i].locationX + "y" + currentNode.unitPool[i].locationY + "f" + currentNode.unitPool[i].aStarNode.f);
}
}
}

29
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/CoordinateColorPair.cs

@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoordinateColorPair
{
public int X { get; set; }
public int Y { get; set; }
public string Color { get; set; }
public CoordinateColorPair(int x, int y, string color)
{
X = x;
Y = y;
Color = color;
}
public override bool Equals(object obj)
{
if (obj is CoordinateColorPair other)
return X == other.X && Y == other.Y && Color == other.Color;
return false;
}
public override int GetHashCode()
{
return (X, Y, Color).GetHashCode();
}
}

2
ColorlessWorld-2024-4-2/Assets/Scripts/Card/Temp/TempPlaceEffect.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Tool/CoordinateColorPair.cs.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b1a0228ae98882d43974484e55dca280
guid: e9a4d6c1d5ec9674d9cfd40bdb9c2876
MonoImporter:
externalObjects: {}
serializedVersion: 2

76
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;
Debug.Log("rotationSteps是"+ rotationSteps);
// 根据旋转的次数进行坐标变换
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)
{

84
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,36 @@ public class getNodeTools
}
}
public static MapUnity getNodeWithCube(int q, int s,int r)
{
//计算立方坐标
(int x, int y) = MathTool.CubeToAxial(q,s,r);
MapUnity result = LocationToGetNode(x, y);
Debug.Log("location是X:" +x +"y:"+y);
return result;
}
public static MapUnity LocationToGetNode(int locationX, int locationY)
{
int x = 0;
//计算node在列表的第几位
for(int i=0;i< GameManager .Instance .X[locationY ].Y.Count;i++)
{
if(GameManager.Instance.X[locationY].Y[i].locationX == locationX)
{
x = i;
break;
}
}
return GameManager.Instance.X[locationY].Y[x];
}
public static MapUnity getToolNodeWithCube(int q, int s, int r)
{
//计算立方坐标
(int x, int y) = MathTool.CubeToAxial(q, s, r);
MapUnity result = GameManager.Instance.ToolX[x].Y[y];
return result;
}
public static HashSet<MapUnity> getAllNodes()
{
HashSet<MapUnity> set = new HashSet<MapUnity>();
@ -620,6 +654,56 @@ public class getNodeTools
}*/
}
public static void setEffectRangePreviewTest(CardOriginalData cardOriginalData, float euler, MapUnity currentNode, CardEntity cardEntity)
{
Debug.Log("currentNode的X是" + currentNode.locationX + "currentNode的Y是" + currentNode.locationY);
//Debug.Log("currentNode的Q是" + currentNode.cubeQ + "currentNode的S是" + currentNode.cubeS + "currentNode的R是" + currentNode.cubeR);
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("_");
Debug.Log("AxialToCube的X是" + int.Parse(marks[0]) + "AxialToCube的Y是" + int.Parse(marks[1]));
(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);
foreach (var tuple in rotatedCubeList)
{
MapUnity endNode = new MapUnity();
endNode = getNodeWithCube(tuple.Item1, tuple.Item2, tuple.Item3);
Debug.Log("rotatedNode的X是" + endNode.locationX + "rotatedNode的Y是" + endNode.locationY);
Debug.Log("rotatedNode的Q是" + tuple.Item1 + "rotatedNode的S是" + tuple.Item2 + "rotatedNode的R是" + tuple.Item3);
}
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);
Debug.Log("endNode的X是" + endNode.locationX + "endNode的Y是" + endNode.locationY);
//Debug.Log("endNode的Q是"+endNode.cubeQ+ "endNode的S是" + endNode.cubeS+ "endNode的R是" + endNode.cubeR);
if (endNode != null)
{
cardEntity.influencePreviewPool.Add(endNode);
}
}
}
public static HashSet<MapUnity> setEffectRangePreviewNoCard(string effectRange, float euler, MapUnity currentNode)
{
MapUnity playerOnNode = GameManager.Instance.playerOn.transform.GetComponent<MapUnity>();

80
ColorlessWorld-2024-4-2/Assets/Scripts/manager/CardManager.cs

@ -6,10 +6,12 @@ using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using UnityEngine;
using UnityEngine.Rendering;
using static UnityEngine.Rendering.DebugUI;
public class CardManager : Singleton<CardManager>
{
public Dictionary<HashSet<CoordinateColorPair>, Sprite> cardImageMap = new Dictionary<HashSet<CoordinateColorPair>, Sprite>();
private void Start()
{
DontDestroyOnLoad(this.gameObject);
@ -191,4 +193,82 @@ public class CardManager : Singleton<CardManager>
}
return key;
}
public static void setCardImageTest(CardOriginalData cardOriginalData, float euler, MapUnity currentNode, CardEntity cardEntity)
{
if (CardManager.Instance.cardImageMap.TryGetValue(cardOriginalData.cardImageMark, out Sprite sprite))
{
cardEntity.cardImage.sprite = sprite;
}
else
{
createCardImage(cardOriginalData, euler, currentNode);
setCardImageTest(cardOriginalData, euler, currentNode, cardEntity);
}
}
public static void createCardImageMap()
{
MapUnity currentNode = GameManager.Instance.ToolX[3].Y[3];
foreach (CardOriginalData cardOriginalData in CardOriginalDataList.Instance.existCardOriginalDataList.Values)
{
Debug.Log("createcardimage!");
createCardImage(cardOriginalData, 90.0f, currentNode);
}
}
public static void createCardImage(CardOriginalData cardOriginalData, float euler, MapUnity currentNode)
{
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].whoColour=Name.NodeColor.White;
}
}
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 = getNodeTools.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<Camera>();
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;
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
CardManager.Instance.cardImageMap.Add(cardOriginalData.cardImageMark, sprite);
}
}

64
ColorlessWorld-2024-4-2/Assets/Scripts/manager/SettlementManager.cs

@ -36,43 +36,49 @@ public class SettlementManager : Singleton<SettlementManager>
private void dyeingWork(CardOriginalData cardOriginalData,MapUnity targetNode)
{
ZeroToFiveCircularCounter counter = new ZeroToFiveCircularCounter();
int offset = 3;
Vector3 face = targetNode.transform.position - GameManager.Instance.playerOn.transform.position;
if (!targetNode.Equals(GameManager.Instance.playerOn))
float euler = Vector3.SignedAngle(-GameManager.Instance.playerOn.transform.forward, face, GameManager.Instance.playerOn.transform.up) + 180;
Debug.Log("currentNode的X是" + targetNode.locationX + "currentNode的Y是" + targetNode.locationY);
//Debug.Log("currentNode的Q是" + currentNode.cubeQ + "currentNode的S是" + currentNode.cubeS + "currentNode的R是" + currentNode.cubeR);
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++)
{
float euler = Vector3.SignedAngle(-GameManager.Instance.playerOn.transform.forward, face, GameManager.Instance.playerOn.transform.up) + 180;
offset = getEulerOffset(offset, euler);
try
{
string[] marks = cardOriginalData.nodesMark[i].Split("_");
Debug.Log("AxialToCube的X是" + int.Parse(marks[0]) + "AxialToCube的Y是" + int.Parse(marks[1]));
(int q, int s, int y) = MathTool.AxialToCube(int.Parse(marks[0]), int.Parse(marks[1]));
cubeList.Add((q, s, y));
}
catch (Exception e)
{ }
}
if (!cardOriginalData.nodesColor[0].Equals(Name.none))
List<(int, int, int)> rotatedCubeList = new List<(int, int, int)>();
rotatedCubeList = MathTool.RotateCoordinates(cubeList, intEuler);
foreach (var tuple in rotatedCubeList)
{
targetNode.switchColor(Name.stringColorToint(cardOriginalData.nodesColor[0]));
MapUnity endNode = new MapUnity();
endNode = getNodeTools.getNodeWithCube(tuple.Item1, tuple.Item2, tuple.Item3);
Debug.Log("rotatedNode的X是" + endNode.locationX + "rotatedNode的Y是" + endNode.locationY);
Debug.Log("rotatedNode的Q是" + tuple.Item1 + "rotatedNode的S是" + tuple.Item2 + "rotatedNode的R是" + tuple.Item3);
}
Debug.Log("offsetÊÇ" + offset);
for (int i = 0; i < cardOriginalData.nodesMark.Length; i++)
List<(int, int, int)> trueCubeList = new List<(int, int, int)>();
trueCubeList = MathTool.TranslateHexesToNewOrigin(rotatedCubeList, (targetNode.cubeQ, targetNode.cubeS, targetNode.cubeR));
for (int i=0;i<trueCubeList.Count;i++)
{
MapUnity endNode = targetNode;
try {
string[] marks = cardOriginalData.nodesMark[i].Split("_");
for (int j = 0; j < marks.Length; j++)
{
MapUnity oldNode = endNode;
endNode = oldNode.unitPool[counter.Add(offset, int.Parse(marks[j]))];
}
if (endNode != null)
{
endNode.switchColor(Name.stringColorToint(cardOriginalData.nodesColor[i + 1]));
if (LegacyManager.Instance.relicClassNameList.Contains(Name.Legacy.LegacyNode_SuspiciousMushroom)
&& cardOriginalData.nodesColor[i + 1].Equals(Name.Color.Green))
{
abnormalConditionWork(AbnormalCondition.posion, 1, new List<MapUnity> { endNode });
}
}
}catch(Exception e)
MapUnity endNode = new MapUnity();
endNode = getNodeTools.getNodeWithCube(trueCubeList[i].Item1, trueCubeList[i].Item2, trueCubeList[i].Item3);
Debug.Log("endNode的X是" + endNode.locationX + "endNode的Y是" + endNode.locationY);
//Debug.Log("endNode的Q是"+endNode.cubeQ+ "endNode的S是" + endNode.cubeS+ "endNode的R是" + endNode.cubeR);
if (endNode != null)
{
endNode.switchColor(Name.stringColorToint(cardOriginalData.nodesColor[i]));
}
}
}
//预计地块计数

2
ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv

@ -0,0 +1,2 @@
ID,费用,施法范围,作用范围,条件,功能,数值,地块标记,地块颜色,图片路径
1001,1,2,3_1,red>8;blue<20,1;2,5;4,0_0;1_0;2_0,red;red;red,CardIcon/1010
1 ID 费用 施法范围 作用范围 条件 功能 数值 地块标记 地块颜色 图片路径
2 1001 1 2 3_1 red>8;blue<20 1;2 5;4 0_0;1_0;2_0 red;red;red CardIcon/1010

2
ColorlessWorld-2024-4-2/Assets/Lana Studio/Casual RPG VFX/Upgrade for URP/Upgrade for URP.unitypackage.meta → ColorlessWorld-2024-4-2/Assets/StreamingAssets/card_data_4.csv.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 5b07afdbcf13e43438545d591cfd2e4b
guid: 741f3a676aaf67e458b1f5f2dfb9dea0
DefaultImporter:
externalObjects: {}
userData:
Loading…
Cancel
Save