Exemplo n.º 1
0
    private void DetectLightsAndAction(bool state)
    {
        if (this == null)
        {
            return;
        }

        if (preventStartUpCache)
        {
            if (SelfPowered)
            {
                foreach (var lightSource in SelfPowerLights)
                {
                    LightSwitchData Send = new LightSwitchData()
                    {
                        state = state, LightSwitch = this, RelatedAPC = RelatedAPC
                    };
                    lightSource.gameObject.SendMessage("Received", Send, SendMessageOptions.DontRequireReceiver);
                }
            }

            return;
        }

        DetectLights(state);
    }
Exemplo n.º 2
0
    private void DetectLightsAndAction(bool state)
    {
        Vector2 startPos = GetCastPos();
        int     length   = Physics2D.OverlapCircleNonAlloc(startPos, radius, lightSpriteColliders, lightingMask);

        for (int i = 0; i < length; i++)
        {
            Collider2D localCollider  = lightSpriteColliders[i];
            GameObject localObject    = localCollider.gameObject;
            Vector2    localObjectPos = localObject.transform.position;
            float      distance       = Vector3.Distance(startPos, localObjectPos);

            if (IsWithinReach(startPos, localObjectPos, distance))
            {
                if (localObject.tag != "EmergencyLight")
                {
                    LightSwitchData Send = new LightSwitchData()
                    {
                        state = state, LightSwitchTrigger = this, RelatedAPC = RelatedAPC
                    };
                    localObject.SendMessage("Received", Send, SendMessageOptions.DontRequireReceiver);
                }
                if (RelatedAPC != null)
                {
                    LightSwitchData Send = new LightSwitchData()
                    {
                        LightSwitchTrigger = this, RelatedAPC = RelatedAPC
                    };
                    localObject.SendMessage("EmergencyLight", Send, SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    }
Exemplo n.º 3
0
    private void DetectLightsAndAction(bool state)
    {
        if (this == null)
        {
            return;
        }

        if (preventStartUpCache)
        {
            if (SelfPowered)
            {
                foreach (var l in SelfPowerLights)
                {
                    LightSwitchData Send = new LightSwitchData()
                    {
                        state = state, LightSwitch = this, RelatedAPC = RelatedAPC
                    };
                    l.gameObject.SendMessage("Received", Send, SendMessageOptions.DontRequireReceiver);
                }
            }

            return;
        }

        Vector2 startPos = GetCastPos();
        //figure out which lights this switch is hooked up to based on proximity and facing
        int length = Physics2D.OverlapCircleNonAlloc(startPos, radius, lightSpriteColliders, lightingMask);

        for (int i = 0; i < length; i++)
        {
            Collider2D localCollider  = lightSpriteColliders[i];
            GameObject localObject    = localCollider.gameObject;
            Vector2    localObjectPos = localObject.transform.position;
            float      distance       = Vector3.Distance(startPos, localObjectPos);
            if (IsWithinReach(startPos, localObjectPos, distance))
            {
                if (localObject.tag != "EmergencyLight")
                {
                    LightSwitchData Send = new LightSwitchData()
                    {
                        state = state, LightSwitch = this, RelatedAPC = RelatedAPC
                    };
                    localObject.SendMessage("Received", Send, SendMessageOptions.DontRequireReceiver);
                }
                if (RelatedAPC != null)                 //|| SelfPowered
                {
                    LightSwitchData Send = new LightSwitchData()
                    {
                        LightSwitch = this, RelatedAPC = RelatedAPC, SelfPowered = SelfPowered
                    };
                    localObject.SendMessage("EmergencyLight", Send, SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    }
Exemplo n.º 4
0
 //broadcast target - invoked so lights can register themselves with this APC in
 //LightSwitch.DetectLightsAndAction. There must be a better way to do this that doesn't rely
 //on broadcasting.
 public void EmergencyLight(LightSwitchData Received)
 {
     if (gameObject.tag == "EmergencyLight")
     {
         var emergLightAnim = gameObject.GetComponent <EmergencyLightAnimator>();
         if (emergLightAnim != null)
         {
             Received.RelatedAPC.ConnectEmergencyLight(emergLightAnim);
         }
     }
 }
Exemplo n.º 5
0
    public void Received(LightSwitchData Received)
    {
        //Logger.Log (Received.LightSwitchTrigger.ToString() + " < LightSwitchTrigger" + Received.RelatedAPC.ToString() + " < APC" + Received.state.ToString() + " < state" );
        // Leo Note: Some sync magic happening here. Decided not to touch it.
        tempStateCache = Received.state;

        if (waitToCheckState)
        {
            return;
        }
        if (Received.LightSwitch == relatedLightSwitch || relatedLightSwitch == null)
        {
            if (relatedLightSwitch == null)
            {
                relatedLightSwitch = Received.LightSwitch;
            }
            if (Received.RelatedAPC != null)
            {
                RelatedAPC = Received.RelatedAPC;
                {
                    if (State == LightState.On)
                    {
                        if (!RelatedAPC.ConnectedSwitchesAndLights[relatedLightSwitch].Contains(this))
                        {
                            RelatedAPC.ConnectedSwitchesAndLights[relatedLightSwitch].Add(this);
                        }
                    }
                }
            }
            else if (relatedLightSwitch.SelfPowered)
            {
                if (State == LightState.On)
                {
                    if (!relatedLightSwitch.SelfPowerLights.Contains(this))
                    {
                        relatedLightSwitch.SelfPowerLights.Add(this);
                    }
                }
            }

            if (Renderer == null)
            {
                waitToCheckState = true;
                StartCoroutine(WaitToTryAgain());
                return;
            }
            else
            {
                State = Received.state ? LightState.On : LightState.Off;
            }
        }
    }
Exemplo n.º 6
0
    //this is the method broadcast invoked by LightSwitch to tell this light source what switch is driving it.
    //it is buggy and unreliable especially when client joins on a rotated matrix, client and server do not agree
    //on which switch owns which light
    public void Received(LightSwitchData Received)
    {
        if (wallMount.State != LightMountStates.LightMountState.Broken &&
            wallMount.State != LightMountStates.LightMountState.MissingBulb)
        {
            //Logger.Log (Received.LightSwitchTrigger.ToString() + " < LightSwitchTrigger" + Received.RelatedAPC.ToString() + " < APC" + Received.state.ToString() + " < state" );
            tempStateCache = Received.state;

            if (waitToCheckState)
            {
                return;
            }

            if (Received.LightSwitch == relatedLightSwitch || relatedLightSwitch == null)
            {
                if (relatedLightSwitch == null)
                {
                    relatedLightSwitch = Received.LightSwitch;
                }

                if (Received.RelatedAPC != null)
                {
                    RelatedAPC = Received.RelatedAPC;

                    if (RelatedAPC == null)
                    {
                        Logger.Log($"Related APC was missing in the received method: {gameObject.name}",
                                   Category.Lighting);
                    }
                    else if (relatedLightSwitch == null)
                    {
                        Logger.Log($"Related Lightswitch was missing in the received method: {gameObject.name}",
                                   Category.Lighting);
                    }
                    else if (State == LightState.On)
                    {
                        if (RelatedAPC.ConnectedSwitchesAndLights.ContainsKey(relatedLightSwitch))
                        {
                            if (!RelatedAPC.ConnectedSwitchesAndLights[relatedLightSwitch].Contains(this))
                            {
                                RelatedAPC.ConnectedSwitchesAndLights[relatedLightSwitch].Add(this);
                            }
                        }
                        else
                        {
                            RelatedAPC.ConnectedSwitchesAndLights.Add(relatedLightSwitch, new List <LightSource> {
                                this
                            });
                        }
                    }
                }
                else if (relatedLightSwitch.SelfPowered)
                {
                    if (State == LightState.On)
                    {
                        if (!relatedLightSwitch.SelfPowerLights.Contains(this))
                        {
                            relatedLightSwitch.SelfPowerLights.Add(this);
                        }
                    }
                }

                if (Renderer == null)
                {
                    waitToCheckState = true;
                    StartCoroutine(WaitToTryAgain());
                    return;
                }
                else
                {
                    State = Received.state ? LightState.On : LightState.Off;
                    wallMount.SwitchChangeState(State);
                }
            }
        }
    }