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