private Vector3 BuildArchetypeTree(HeroArchetypeData archetype, UILineRenderer treeParent, Dictionary <ArchetypeSkillNode, ArchetypeUITreeNode> nodeDict) { HashSet <ArchetypeSkillNode> traversedNodes = new HashSet <ArchetypeSkillNode>(); largestX = 0; largestY = 0; Vector3 homeNodePosition = Vector3.zero; Vector2 halfScreen = new Vector2(0, UIManager.Instance.referenceResolution.y / 2); foreach (ArchetypeSkillNode node in archetype.Base.nodeList) { if (node.initialLevel == 1) { CreateTreeNode(node, traversedNodes, archetype, treeParent, nodeDict); } } foreach (ArchetypeUITreeNode uiNode in nodeDict.Values) { uiNode.CheckSurroundingNodes(); if (uiNode.node.id == 0) { homeNodePosition = (uiNode.transform as RectTransform).anchoredPosition; } } treeParent.rectTransform.sizeDelta = new Vector2(largestX * 250, largestY * 160); return(-homeNodePosition); }
public void SetNode(ArchetypeSkillNode n, HeroArchetypeData data, bool isPreviewMode) { node = n; archetypeData = data; for (int i = 0; i < node.maxLevel - 1; i++) { Image newLevelIcon = Instantiate(levelIcons[0], levelIconParent.transform); levelIcons.Add(newLevelIcon); } if (node.type == NodeType.GREATER) { GetComponent <Image>().sprite = UIManager.Instance.ArchetypeUITreeWindow.LargeNodeImage; ((RectTransform)transform).sizeDelta = new Vector2(95, 95); } this.isPreviewMode = isPreviewMode; if (isPreviewMode) { UpdateNodePreview(); } else { UpdateNode(); } ((RectTransform)transform).anchoredPosition = new Vector3(n.nodePosition.x * 110, n.nodePosition.y * 110 + yPositionOffset, 0); }
// Version for Archetypes attached to heroes private ArchetypeUITreeNode CreateTreeNode(ArchetypeSkillNode node, HashSet <ArchetypeSkillNode> traversedNodes, HeroArchetypeData archetype, UILineRenderer parent, Dictionary <ArchetypeSkillNode, ArchetypeUITreeNode> nodeDict) { if (node == null) { return(null); } ArchetypeUITreeNode currentNode; // Check if node has been traversed yet // if already created, just return the node if (traversedNodes.Add(node)) { currentNode = Instantiate(nodePrefab, parent.transform); currentNode.SetNode(node, archetype, false); nodeDict.Add(node, currentNode); if (Math.Abs(node.nodePosition.x) > largestX) { largestX = Math.Abs(node.nodePosition.x); } if (Math.Abs(node.nodePosition.y) > largestY) { largestY = Math.Abs(node.nodePosition.y); } } else { return(nodeDict[node]); } int currentNodeLevel = archetype.GetNodeLevel(node); foreach (int x in node.children) { ArchetypeSkillNode n = archetype.Base.GetNode(x); ArchetypeUITreeNode child = CreateTreeNode(n, traversedNodes, archetype, parent, nodeDict); Color color = Color.black; int childNodeLevel = archetype.GetNodeLevel(n); if (currentNodeLevel > 0 && childNodeLevel > 0) { color = ArchetypeUITreeNode.CONNECTED_COLOR; } else if (currentNodeLevel > 0 || childNodeLevel > 0) { color = ArchetypeUITreeNode.AVAILABLE_COLOR; } UILineRenderer.LinePoint point = new UILineRenderer.LinePoint(currentNode.transform.localPosition + LineOffsetY, child.transform.localPosition + LineOffsetY, color); currentNode.connectedNodes.Add(child, point); child.connectedNodes.Add(currentNode, point); parent.AddPoints(point); } return(currentNode); }
public void SetAndUpdatePanel(ArchetypeSkillNode node, HeroArchetypeData archetypeData, ArchetypeUITreeNode uiNode) { this.node = node; this.archetypeData = archetypeData; this.uiNode = uiNode; if (isPreviewMode) { UpdatePanel_Preview(); } else { UpdatePanel(); } }
public HeroData(SaveData.HeroSaveData heroSaveData) : base() { UpdatesAreDeferred = true; PlayerStats ps = GameManager.Instance.PlayerStats; Initialize(heroSaveData.name); Id = heroSaveData.id; Level = heroSaveData.level; ArchetypePoints = (int)(Level * 1.2f); Experience = heroSaveData.experience; killCount = heroSaveData.killCount; spriteName = heroSaveData.spriteName; BaseHealth = heroSaveData.baseHealth; BaseSoulPoints = heroSaveData.baseSoulPoints; BaseStrength = heroSaveData.baseStrength; BaseIntelligence = heroSaveData.baseIntelligence; BaseAgility = heroSaveData.baseAgility; BaseWill = heroSaveData.baseWill; archetypeList[0] = new HeroArchetypeData(heroSaveData.primaryArchetypeData, this); if (heroSaveData.secondaryArchetypeData != null) { archetypeList[1] = new HeroArchetypeData(heroSaveData.secondaryArchetypeData, this); } foreach (EquipSlotType equipSlot in Enum.GetValues(typeof(EquipSlotType))) { if (equipSlot == EquipSlotType.RING) { continue; } if (heroSaveData.equipList[(int)equipSlot] != Guid.Empty) { EquipToSlot(ps.GetEquipmentByGuid(heroSaveData.equipList[(int)equipSlot]), equipSlot); } } if (heroSaveData.firstAbilitySlot != null) { var firstSlot = heroSaveData.firstAbilitySlot; FindAndEquipAbility(firstSlot.abilityId, firstSlot.sourceId, firstSlot.sourceType, 0); } if (heroSaveData.secondAbilitySlot != null) { var slotData = heroSaveData.secondAbilitySlot; FindAndEquipAbility(slotData.abilityId, slotData.sourceId, slotData.sourceType, 1); } if (heroSaveData.soulAbilitySlot != null) { var slotData = heroSaveData.soulAbilitySlot; FindAndEquipAbility(slotData.abilityId, slotData.sourceId, slotData.sourceType, 2); } UpdatesAreDeferred = false; UpdateActorData(); }
public void SaveHeroData(HeroData hero) { HeroSaveData heroSaveData; if (!heroDict.ContainsKey(hero.Id)) { heroSaveData = new HeroSaveData { id = hero.Id }; heroDict[hero.Id] = heroSaveData; heroList.Add(heroSaveData); } else { heroSaveData = heroDict[hero.Id]; } heroSaveData.name = hero.Name; heroSaveData.level = hero.Level; heroSaveData.experience = hero.Experience; heroSaveData.baseHealth = hero.BaseHealth; heroSaveData.baseSoulPoints = hero.BaseSoulPoints; heroSaveData.baseStrength = hero.BaseStrength; heroSaveData.baseIntelligence = hero.BaseIntelligence; heroSaveData.baseAgility = hero.BaseAgility; heroSaveData.baseWill = hero.BaseWill; heroSaveData.killCount = hero.killCount; heroSaveData.spriteName = hero.spriteName; foreach (EquipSlotType equipSlot in Enum.GetValues(typeof(EquipSlotType))) { if (equipSlot == EquipSlotType.RING) { continue; } if (hero.GetEquipmentInSlot(equipSlot) != null) { heroSaveData.equipList[(int)equipSlot] = hero.GetEquipmentInSlot(equipSlot).Id; } else { heroSaveData.equipList[(int)equipSlot] = Guid.Empty; } } if (hero.PrimaryArchetype != null) { HeroArchetypeData archetypeData = hero.PrimaryArchetype; HeroArchetypeSaveData archetypeSaveData = new HeroArchetypeSaveData() { id = archetypeData.Id, archetypeId = archetypeData.Base.idName }; archetypeSaveData.nodeLevelData = new List <HeroArchetypeSaveData.NodeLevelSaveData>(); foreach (KeyValuePair <int, int> pair in archetypeData.NodeLevels) { archetypeSaveData.nodeLevelData.Add(new HeroArchetypeSaveData.NodeLevelSaveData(pair.Key, pair.Value)); } heroSaveData.primaryArchetypeData = archetypeSaveData; } if (hero.SecondaryArchetype != null) { HeroArchetypeData archetypeData = hero.SecondaryArchetype; HeroArchetypeSaveData archetypeSaveData = new HeroArchetypeSaveData() { id = archetypeData.Id, archetypeId = archetypeData.Base.idName }; archetypeSaveData.nodeLevelData = new List <HeroArchetypeSaveData.NodeLevelSaveData>(); foreach (KeyValuePair <int, int> pair in archetypeData.NodeLevels) { archetypeSaveData.nodeLevelData.Add(new HeroArchetypeSaveData.NodeLevelSaveData(pair.Key, pair.Value)); } heroSaveData.secondaryArchetypeData = archetypeSaveData; } if (hero.GetAbilityFromSlot(0) != null) { if (heroSaveData.firstAbilitySlot == null) { heroSaveData.firstAbilitySlot = new HeroSaveData.HeroAbilitySlotSaveData(); } hero.SaveAbilitySlotData(0, heroSaveData.firstAbilitySlot); } else { heroSaveData.firstAbilitySlot = null; } if (hero.GetAbilityFromSlot(1) != null) { if (heroSaveData.secondAbilitySlot == null) { heroSaveData.secondAbilitySlot = new HeroSaveData.HeroAbilitySlotSaveData(); } hero.SaveAbilitySlotData(1, heroSaveData.secondAbilitySlot); } else { heroSaveData.secondAbilitySlot = null; } if (hero.GetAbilityFromSlot(2) != null) { if (heroSaveData.soulAbilitySlot == null) { heroSaveData.soulAbilitySlot = new HeroSaveData.HeroAbilitySlotSaveData(); } hero.SaveAbilitySlotData(2, heroSaveData.soulAbilitySlot); } else { heroSaveData.soulAbilitySlot = null; } }