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);
    }
Esempio n. 4
0
    public void SetAndUpdatePanel(ArchetypeSkillNode node, HeroArchetypeData archetypeData, ArchetypeUITreeNode uiNode)
    {
        this.node          = node;
        this.archetypeData = archetypeData;
        this.uiNode        = uiNode;

        if (isPreviewMode)
        {
            UpdatePanel_Preview();
        }
        else
        {
            UpdatePanel();
        }
    }
Esempio n. 5
0
    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();
    }
Esempio n. 6
0
    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;
        }
    }