Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
            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();
            }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
            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();
                }
            }