示例#1
0
    public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable movesnap)
    {
        var res = c.GetComponent <ResourceComponent>();

        if (res != null)
        {
            bool isOre    = res.Data.Container.MatterType.IsRawMaterial();
            bool isPowder = res.Data.Container.MatterType.IsFurnaceOutput();

            if (isOre && capturedOre == null && child == oreSnap)
            {
                //if powder is empty or ore matches powder
                //and
                //we can make this into powder
                //and
                //not currently smelting anything or matches current smelt
                if ((capturedPowder == null || matches(res.Data.Container.MatterType, capturedPowder.Data.Container.MatterType)) &&
                    (res.Data.Container.MatterType.MatchingPowder() != Matter.Unspecified) &&
                    (FlexData.CurrentOre == Matter.Unspecified || res.Data.Container.MatterType == FlexData.CurrentOre))
                {
                    res.SnapCrate(this, child.transform.position);
                    res.transform.SetParent(platform);
                    capturedOre         = res;
                    FlexData.CurrentOre = res.Data.Container.MatterType;
                }
                else
                {
                    GuiBridge.Instance.ShowNews(NewsSource.InvalidSnap);
                    return;
                }
            }
            else if (isPowder && capturedPowder == null && child == powderSnap)
            {
                //if ore is empty or powder matches ore
                //and
                //we can make this powder
                //and
                //not currently smelting anything or matching ore is what we're smelting
                if (capturedOre == null ||
                    (capturedOre.Data.Container.MatterType == Matter.Unspecified || matches(capturedOre.Data.Container.MatterType, res.Data.Container.MatterType)) &&
                    (res.Data.Container.MatterType.MatchingOre().MatchingPowder() != Matter.Unspecified) &&
                    (FlexData.CurrentOre == Matter.Unspecified || res.Data.Container.MatterType.MatchingOre() == FlexData.CurrentOre))
                {
                    res.SnapCrate(this, child.transform.position);
                    capturedPowder      = res;
                    FlexData.CurrentOre = res.Data.Container.MatterType.MatchingOre();
                }
                else
                {
                    GuiBridge.Instance.ShowNews(NewsSource.InvalidSnap);
                    return;
                }
            }
            else
            {
                GuiBridge.Instance.ShowNews(NewsSource.InvalidSnap);
                return;
            }
        }
    }
示例#2
0
    public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable res)
    {
        if (res == null && child.transform.name == "PumpSnap")
        {
            string valveTag = c.tag.ToLower();
            if (valveTag.EndsWith("valve"))
            {
                AttachTo(c, valveTag);
            }
        }
        else if (detachTimer == null && res is ResourceComponent)
        {
            if (ResourceMatchesCurrentPumpable(res as ResourceComponent))
            {
                capturedResource = res as ResourceComponent;
                capturedResource.SnapCrate(this, CrateAnchor.position);

                if (valveType == Matter.Unspecified)
                {
                    if (connectedPumpable is GasStorage && (connectedPumpable as GasStorage).Data.Container.CurrentAmount <= 0f)
                    {
                        this.valveType = capturedResource.Data.Container.MatterType;
                        (connectedPumpable as GasStorage).SpecifyCompound(capturedResource.Data.Container.MatterType);
                        this.SyncMeshesToMatterType();
                    }
                }

                RefreshPumpState();
            }
        }
    }
示例#3
0
        public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable res)
        {
            if (!detachTimers.ContainsKey(res) && res != null)
            {
                if (child.name == "LeftLatch")
                {
                    int index = 1;
                    if (attachedCrates[index] != null)
                    {
                        index = 0;
                    }

                    attachedCrates[index] = res;

                    SnapToLatch(child, res, (index * -1) + .5f);
                }
                else
                //if (childName == "RightLatch")
                {
                    int index = 3;
                    if (attachedCrates[index] != null)
                    {
                        index = 2;
                    }

                    attachedCrates[index] = res;

                    SnapToLatch(child, res, (index % 2 * -1) + .5f);
                }
            }
        }
示例#4
0
    public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable res)
    {
        ResourceComponent resComp = res.transform.GetComponent <ResourceComponent>();

        if (resComp != null)
        {
            if (resComp.Data.Container.MatterType.Is3DPrinterFeedstock())
            {
                if (child == leftInputTrigger && LeftInput == null)
                {
                    LeftInput = resComp;
                    res.SnapCrate(this, child.transform.position, globalRotation: child.transform.rotation);
                }
                else if (child == rightInputTrigger && RightInput == null)
                {
                    RightInput = resComp;
                    res.SnapCrate(this, child.transform.position, globalRotation: child.transform.rotation);
                }
            }
            else
            {
                GuiBridge.Instance.ShowNews(NewsSource.InvalidSnap);
            }
        }
    }
示例#5
0
 public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable res)
 {
     if (c.transform == CurrentMinilab && detachTimer == null)
     {
         MinilabDocked = true;
         res.SnapCrate(this, MinilabSnap.position);
     }
 }
示例#6
0
    public void OnChildTriggerEnter(TriggerForwarder child, Collider other, IMovableSnappable res)
    {
        MarketRow whichRow = GetRow(child.name);

        if (whichRow != null && res is ResourceComponent && !CrateInterferenceTimers.ContainsKey(whichRow))
        {
            whichRow.Capture(this, res as ResourceComponent);
        }
    }
示例#7
0
    public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable mov)
    {
        ResourceComponent res = mov as ResourceComponent;

        if (unsnapTimer == null && Bays.ContainsKey(child) && Bays[child] == null && res != null)
        {
            res.SnapCrate(this, child.transform.position, globalRotation: child.transform.rotation);
        }
    }
示例#8
0
 public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable res)
 {
     if (detachTimer == null && res is ResourceComponent)
     {
         if ((res as ResourceComponent).Data.Container.MatterType == Matter.Water)
         {
             capturedResource = res as ResourceComponent;
             capturedResource.SnapCrate(this, CrateAnchor.position);
         }
     }
 }
示例#9
0
    void Start()
    {
        GetComponentInChildren <BoxCollider2D>().enabled = true;
        GameManager.Tridentlist.Add(gameObject);
        // mask = ~(1 << 10);
        Player = GameObject.FindGameObjectWithTag("Player");

        TriggerForwarder forwarder = GetComponentInChildren <TriggerForwarder>();

        forwarder.OnTriggerEvent += OnTriggerEnter2D;
    }
 public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable movesnap)
 {
     if (unsnapTimer == null)
     {
         var cube = movesnap.transform.GetComponent <PowerCube>();
         if (cube != null)
         {
             movesnap.SnapCrate(this, child.transform.position, globalRotation: child.transform.rotation);
             BalanceAddNew(cube, child.transform.GetSiblingIndex());
         }
     }
 }
示例#11
0
    public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable moveSnap)
    {
        ResourceComponent res = c.GetComponent <ResourceComponent>();

        if (res != null && detachTimer == null && res.Data.Container.MatterType == Matter.Produce)
        {
            if (outputs[0] == null)
            {
                outputs[0] = res;
                res.SnapCrate(this, child.transform.position);
            }
            else if (outputs[1] == null)
            {
                outputs[1] = res;
                res.SnapCrate(this, child.transform.position);
            }
        }
    }
示例#12
0
    public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable res)
    {
        ResourceComponent oreBucket = res.transform.GetComponent <ResourceComponent>();

        if (oreBucket != null &&
            oreOut == null &&
            attachedDeposit != null &&
            oreBucket.Data.Container.MatterType.IsRawMaterial() &&
            matches(oreBucket.Data.Container.MatterType, attachedDeposit.Data.Extractable.MatterType))
        {
            oreOut = oreBucket;

            if (oreBucket.Data.Container.MatterType == Matter.Unspecified)
            {
                oreBucket.Data.Container.MatterType = attachedDeposit.Data.Extractable.MatterType;
            }

            res.SnapCrate(this, child.transform.position);
        }
    }
示例#13
0
    /// <summary>
    /// landing sequence
    /// </summary>
    /// <returns></returns>
    private IEnumerator DoLand()
    {
        Lander.gameObject.SetActive(true);

        yield return(DoFly(airborneLanderPosition, landedLanderLocalPosition));

        bool turnedLightsOn = false;

        if (Game.Current.Environment.CurrentHour > 20 || Game.Current.Environment.CurrentHour < 6)
        {
            this.LZ.ToggleLights(true);
            turnedLightsOn = true;
        }

        yield return(DoFireRockets(airborneLanderHinge, landedLanderHinge));

        int i = 0;

        TriggerForwarder[] slots = new TriggerForwarder[Bays.Keys.Count];
        Bays.Keys.CopyTo(slots, 0);
        foreach (Matter key in this.Data.Delivery.Keys)
        {
            var crateEnumerator = this.Data.Delivery.SquareMeters(key);
            while (crateEnumerator.MoveNext())
            {
                float volume = crateEnumerator.Current;

                TriggerForwarder child = slots[i];

                var t = BounceLander.CreateCratelike(key, volume, Vector3.zero, this.Lander);

                Bays[child] = t.GetComponent <ResourceComponent>();

                i++;
            }
        }
        this.Data.Delivery = null;

        foreach (var kvp in Bays)
        {
            if (kvp.Value != null)
            {
                kvp.Value.transform.SetParent(null);
                kvp.Value.SnapCrate(this, kvp.Key.transform.position, globalRotation: kvp.Key.transform.rotation);
                kvp.Value.GetComponent <Collider>().enabled = true;
            }
        }

        SetState(FlightState.Landed);

        yield return(new WaitForSeconds(3f));

        doorSource.Play();
        if (!rampsDown)
        {
            ToggleAllRamps();
        }

        yield return(new WaitForSeconds(DoorMoveDuration));

        doorSource.Stop();

        if (turnedLightsOn)
        {
            this.LZ.ToggleLights(false);
        }

        movement = null;
    }
示例#14
0
 public void OnChildTriggerEnter(TriggerForwarder child, Collider c, IMovableSnappable res)
 {
     currentForwarder   = child;
     currentlyColliding = c;
     currentResource    = res;
 }
示例#15
0
 private void SnapToLatch(TriggerForwarder child, IMovableSnappable res, float offset)
 {
     res.SnapCrate(this, child.transform.position + child.transform.TransformDirection(new Vector3(0, 0, -offset)), carRigid);
 }