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(); } }
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); }
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); }
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); }