public void AddPart(MonoPart part) { if (part == null) { throw new ArgumentNullException(); } if (partToPanel.ContainsKey(part)) { Debug.Log($"Already have this part:{part.name}"); return; } // BarrelAddon is categorized as Addon var index = (int)(part.Type == PartType.BarrelAddon? PartType.Addon: part.Type); print($"Adding part {part.PartName}."); var go = Instantiate(partPanel, contents[index]); part.transform.SetParent(go.transform); var pos = part.transform.localPosition; pos.x = pos.y = 0; part.transform.localPosition = pos; partToPanel.Add(part, go); partList.Add(part); partPanelList.Add(go); }
private void SwapReceiver(MonoPart prevReceiver) { // If this receiver is inside Partlist and being click.. // Swap the receiver inside Workspace with this one print("Switch receiver."); // Detach all the parts that is attached to the receiver inside Workspace List <MonoPart> partsFromPrevReceiver = new List <MonoPart>(); foreach (MonoPort p in prevReceiver.Ports) { if (p.AttachedPort == null) { continue; } partsFromPrevReceiver.Add((MonoPart)p.AttachedPort.Part); ((MonoPart)p.AttachedPort.Part).transform.SetParent(null); p.Detach(); } var prevPosition = prevReceiver.transform.position; // Move the old receiver to Partlist Workspace.RemovePartFromWorkspace(prevReceiver); Workspace.AddPartToPartlist(prevReceiver); // Move the new one to Workspace Workspace.RemovePartFromPartlist(agent.Part); Workspace.AddPartToWorkspace(agent.Part); agent.transform.position = prevPosition; // Try to connect the parts from previous receiver to the new one foreach (MonoPart p in partsFromPrevReceiver) { var port = Workspace.CheckForNearPort((MonoPort)p.RootPort); if (port != null) { Workspace.InstallPart(port, p); } else { var dir = (p.transform.position - prevPosition).normalized; p.transform.position += dir * 0.5f; } } Workspace.UpdateWeaponStates(); }
public void TakePart(MonoPart part) { if (part == null) { throw new ArgumentNullException(); } if (!partToPanel.ContainsKey(part)) { Debug.Log($"Didn't have this part:{part.name}"); return; } print($"Taking part {part.PartName}."); var go = partToPanel[part]; part.transform.SetParent(null); partToPanel.Remove(part); partList.Remove(part); partPanelList.Remove(go); Destroy(go); }
public override void OnDrag(PointerEventData eventData) { if (Workspace.HeldPart != agent) { Workspace.HeldPart = agent; } if (agent.RootPort.AttachedPort != null) { MonoPart part = (MonoPart)agent.RootPort.Detach(); if (part == null) { Debug.Log($"解除部件失败?{agent.RootPort.AttachedPort?.Part?.PartName}"); } else { agent.transform.parent = null; Debug.Log($"Set {agent.name}'s parent to {agent.transform.parent}"); Debug.Log("解除成功"); Workspace.UpdateWeaponStates(); } } base.OnDrag(eventData); if (Workspace.IsPointerInPartlist) { print("Switch to partlist mode."); agent.currentMode = agent.partlistMode; } Workspace.ReadyToConnect = Workspace.CheckForNearPort((MonoPort)agent.Part.RootPort); if (Workspace.ReadyToConnect != null) { Workspace.DrawLink(agent.RootPort, Workspace.ReadyToConnect); } else { Workspace.CancelLink(); } }