Beispiel #1
0
    public void OnPointerClick(PointerEventData eventData)
    {
        if (Input.GetKey(KeyCode.LeftShift))
        {
            ClearPreset();
            return;
        }

        if (!valid)
        {
            return; // allow user to left shift out blueprint so return after that
        }

        // TODO: check if adding a part back into your inventory validates the preset
        if (!blueprint && (builder.reconstructStatus == ShipBuilder.ReconstructButtonStatus.Valid))
        {
            blueprint = ScriptableObject.CreateInstance <EntityBlueprint>();
            blueprint.coreShellSpriteID = player.blueprint.coreShellSpriteID;
            blueprint.coreSpriteID      = player.blueprint.coreSpriteID;
            blueprint.parts             = new List <EntityBlueprint.PartInfo>();
            foreach (ShipBuilderPart part in cursorScript.parts)
            {
                if (!part.isInChain || !part.validPos)
                {
                    blueprint = null;
                    return;
                }

                blueprint.parts.Add(part.info);
            }

            if (player.cursave.presetBlueprints == null || (player.cursave.presetBlueprints != null &&
                                                            player.cursave.presetBlueprints.Length < 5))
            {
                player.cursave.presetBlueprints = new string[5];
            }

            player.cursave.presetBlueprints[number - 1] = JsonUtility.ToJson(blueprint);
        }
        else if (blueprint)
        {
            cursorScript.ClearAllParts();
            foreach (EntityBlueprint.PartInfo info in blueprint.parts)
            {
                if (!builder.DecrementPartButton(ShipBuilder.CullSpatialValues(info)))
                {
                    // cursorScript.ClearAllParts();
                    builder.CloseUI(false);
                    return;
                }
            }

            var x = new EntityBlueprint.PartInfo[blueprint.parts.Count];
            blueprint.parts.CopyTo(x);
            player.blueprint.parts = new List <EntityBlueprint.PartInfo>(x);
            builder.CloseUI(true);
            OnPointerExit(null);
            player.Rebuild();
        }
    }
Beispiel #2
0
    public static void TakePart(Entity entity, TractorBeam tractor)
    {
        if (entity as Yard)
        {
            // Waits to see if it will get more parts
            Yard.lastPartTakenTime = Time.time;
            Yard.partsTakenCombo++;
        }
        else
        {
            PassiveDialogueSystem.Instance.PushPassiveDialogue(entity.ID, "<color=lime>Your part has been added into your inventory.</color>", 4);
        }
        var shellPart = tractor.GetTractorTarget().GetComponent <ShellPart>();
        var info      = shellPart.info;

        info = ShipBuilder.CullSpatialValues(info);
        ShipBuilder.AddOriginToDictionary(shellPart);
        PlayerCore.Instance.cursave.partInventory.Add(info);
        PartIndexScript.AttemptAddToPartsObtained(info);
        PartIndexScript.AttemptAddToPartsSeen(info);
        if (NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect != null)
        {
            NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect.Invoke(info.partID, info.abilityID, shellPart.droppedSectorName);
        }
        Destroy(shellPart.gameObject);
    }
Beispiel #3
0
    protected override void Update()
    {
        if (!isDead)
        {
            foreach (WeaponAbility weapon in GetComponentsInChildren <WeaponAbility>())
            {
                weapon.Tick();
            }
        }
        base.Update();
        TargetManager.Enqueue(targeter);

        if (FactionManager.IsAllied(faction, 0))
        {
            if ((transform.position - PlayerCore.Instance.transform.position).sqrMagnitude <= 75)
            {
                var player = PlayerCore.Instance;
                if (player.GetTractorTarget() && (player.GetTractorTarget().GetComponent <ShellPart>() ||
                                                  player.GetTractorTarget().GetComponent <Shard>()) && !tractor.GetTractorTarget())
                {
                    tractor.SetTractorTarget(player.GetTractorTarget());
                    player.SetTractorTarget(null);
                }
            }
            if (tractor.GetTractorTarget() && (transform.position - tractor.GetTractorTarget().transform.position).sqrMagnitude <= 10)
            {
                if (tractor.GetTractorTarget().GetComponent <ShellPart>())
                {
                    PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your part has been added into your inventory.</color>");
                    var shellPart = tractor.GetTractorTarget().GetComponent <ShellPart>();
                    var info      = shellPart.info;
                    info = ShipBuilder.CullSpatialValues(info);
                    ShipBuilder.AddOriginToDictionary(shellPart);
                    PlayerCore.Instance.cursave.partInventory.Add(info);
                    PartIndexScript.AttemptAddToPartsObtained(info);
                    PartIndexScript.AttemptAddToPartsSeen(info);
                    if (NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect != null)
                    {
                        NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect.Invoke(info.partID, info.abilityID, shellPart.droppedSectorName);
                    }
                    Destroy(shellPart.gameObject);
                }
                else if (tractor.GetTractorTarget().GetComponent <Shard>())
                {
                    PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your shard has been added into your stash.</color>");
                    var shard = tractor.GetTractorTarget().GetComponent <Shard>();
                    var tiers = new int[] { 1, 5, 20 };
                    PlayerCore.Instance.shards += tiers[shard.tier];
                    ShardCountScript.DisplayCount(PlayerCore.Instance.shards);
                    Destroy(shard.gameObject);
                }
            }
        }
    }
    public void DispatchPart(ShipBuilderPart part, ShipBuilder.TransferMode mode)
    {
        var culledInfo = ShipBuilder.CullSpatialValues(part.info);

        if (!builderPartDict.ContainsKey(culledInfo))
        {
            int size = ResourceManager.GetAsset <PartBlueprint>(part.info.partID).size;
            ShipBuilderInventoryScript builderPartDictInvButton = Instantiate(buttonPrefab,
                                                                              contentsArray[size]).GetComponent <ShipBuilderInventoryScript>();
            builderPartDict.Add(culledInfo, builderPartDictInvButton);
            contentTexts[size].SetActive(true);
            builderPartDict[culledInfo].part   = culledInfo;
            builderPartDict[culledInfo].cursor = cursorScript;
        }
        builderPartDict[culledInfo].IncrementCount();
        cursorScript.buildValue -= EntityBlueprint.GetPartValue(part.info);
        cursorScript.parts.Remove(part);
        Destroy(part.gameObject);
    }
Beispiel #5
0
    protected override void Update()
    {
        if (!isDead)
        {
            foreach (WeaponAbility weapon in GetComponentsInChildren <WeaponAbility>())
            {
                weapon.Tick();
            }
        }

        base.Update();
        TargetManager.Enqueue(targeter);

        if (PlayerCore.Instance && FactionManager.IsAllied(faction, PlayerCore.Instance.faction))
        {
            if ((transform.position - PlayerCore.Instance.transform.position).sqrMagnitude <= YardProximitySquared)
            {
                var player = PlayerCore.Instance;
                foreach (var partyMember in PartyManager.instance.partyMembers)
                {
                    if ((transform.position - partyMember.transform.position).sqrMagnitude > YardProximitySquared && !partyMember.HasRepaired && !partyMember.IsFullyRepaired())
                    {
                        partyMember.Warp(transform.position + new Vector3(Random.Range(-2, 2), Random.Range(-2, 2)));
                    }
                }


                if (!player.HasRepaired)
                {
                    if (!player.IsFullyRepaired() && !player.GetIsDead())
                    {
                        player.repairFinalized = false;
                        StartCoroutine(player.StartYardRepair());
                    }
                }
                else if (player.repairFinalized)
                {
                    player.HealToMax();
                }

                player.HasRepaired = true;
                if (player.GetTractorTarget() && (player.GetTractorTarget().GetComponent <ShellPart>() ||
                                                  player.GetTractorTarget().GetComponent <Shard>()) && !tractor.GetTractorTarget())
                {
                    tractor.SetTractorTarget(player.GetTractorTarget());
                    player.SetTractorTarget(null);
                }
            }

            foreach (var partyMember in PartyManager.instance.partyMembers)
            {
                if (partyMember && partyMember.GetAI().getMode() == AirCraftAI.AIMode.Follow &&
                    (transform.position - partyMember.transform.position).sqrMagnitude <= YardProximitySquared)
                {
                    if (!partyMember.HasRepaired)
                    {
                        if (!partyMember.IsFullyRepaired() && !partyMember.GetIsDead())
                        {
                            partyMember.repairFinalized = false;
                            StartCoroutine(partyMember.StartYardRepair());
                        }
                    }
                    else if (partyMember.repairFinalized)
                    {
                        partyMember.HealToMax();
                    }
                    partyMember.HasRepaired = true;
                }
            }

            if (tractor.GetTractorTarget() && (transform.position - tractor.GetTractorTarget().transform.position).sqrMagnitude <= 10)
            {
                if (tractor.GetTractorTarget().GetComponent <ShellPart>())
                {
                    PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your part has been added into your inventory.</color>", 4);
                    var shellPart = tractor.GetTractorTarget().GetComponent <ShellPart>();
                    var info      = shellPart.info;
                    info = ShipBuilder.CullSpatialValues(info);
                    ShipBuilder.AddOriginToDictionary(shellPart);
                    PlayerCore.Instance.cursave.partInventory.Add(info);
                    PartIndexScript.AttemptAddToPartsObtained(info);
                    PartIndexScript.AttemptAddToPartsSeen(info);
                    if (NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect != null)
                    {
                        NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect.Invoke(info.partID, info.abilityID, shellPart.droppedSectorName);
                    }

                    Destroy(shellPart.gameObject);
                }
                else if (tractor.GetTractorTarget().GetComponent <Shard>())
                {
                    PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your shard has been added into your stash.</color>", 4);
                    var shard = tractor.GetTractorTarget().GetComponent <Shard>();
                    var tiers = new int[] { 1, 5, 20 };
                    PlayerCore.Instance.shards += tiers[shard.tier];
                    ShardCountScript.DisplayCount(PlayerCore.Instance.shards);
                    Destroy(shard.gameObject);
                }
            }
        }
    }
    public void InitializeSelectionPhase()
    {
        searcherString = "";
        selectionPhaseParent.SetActive(true);
        buildPhaseParent.SetActive(false);
        //initialize window on screen
        if (initialized)
        {
            CloseUI(false);                     // prevent initializing twice by closing UI if already initialized
        }
        initialized = true;
        Activate();
        cursorScript.gameObject.SetActive(false);
        cursorScript.SetBuilder(this);

        contentsArray = new Transform[] { smallContents, mediumContents, largeContents };
        contentTexts  = new GameObject[] { smallText, mediumText, largeText };
        foreach (GameObject obj in contentTexts)
        {
            obj.SetActive(false);
        }

        GetComponentInChildren <ShipBuilderPartDisplay>().Initialize(this);
        player.SetIsInteracting(true);
        partDict = new Dictionary <DWInventoryButton, EntityBlueprint.PartInfo>();

        // hide the buttons and yard tips if interacting with a trader

        List <EntityBlueprint.PartInfo> parts = player.GetInventory();

        if (parts != null)
        {
            for (int i = 0; i < parts.Count; i++)
            {
                parts[i] = ShipBuilder.CullSpatialValues(parts[i]);
            }
        }

        foreach (EntityBlueprint.PartInfo part in parts)
        {
            if (part.abilityID == 10)
            {
                AddDronePart(part);
            }
        }
        foreach (EntityBlueprint.PartInfo part in player.blueprint.parts)
        {
            if (part.abilityID == 10)
            {
                AddDronePart(part);
            }
        }

        var partsToAdd = new List <ShellPart>();

        foreach (Entity ent in player.GetUnitsCommanding())
        {
            if (!((ent as Drone) && ent.GetComponentInChildren <TractorBeam>()))
            {
                continue;
            }
            var target = ent.GetComponentInChildren <TractorBeam>().GetTractorTarget();
            if (target && target.GetComponent <ShellPart>())
            {
                partsToAdd.Add(target.GetComponent <ShellPart>());
            }
        }

        if (player.GetTractorTarget() && player.GetTractorTarget().GetComponent <ShellPart>())
        {
            partsToAdd.Add(player.GetTractorTarget().GetComponent <ShellPart>());
        }

        foreach (ShellPart part in partsToAdd)
        {
            var info = part.info;
            info = ShipBuilder.CullSpatialValues(info);
            if (info.abilityID == 10)
            {
                int size   = ResourceManager.GetAsset <PartBlueprint>(info.partID).size;
                var button = Instantiate(displayButtonPrefab, contentsArray[size]).GetComponent <DWInventoryButton>();
                button.handler  = selectionDisplay;
                button.workshop = this;
                contentTexts[size].SetActive(true);
                button.part = info;
                partDict.Add(button, info);
            }
            player.cursave.partInventory.Add(info);
            Destroy(part.gameObject);
        }
        phase = DroneWorkshopPhase.SelectionPhase;
        // activate windows
        gameObject.SetActive(true);
    }