private void AddBeamSource(BeamSourceData data) { BeamSource prop = new BeamSource(this, data); allObjects.Add(prop); objectsAddedThisMove.Add(prop); beamSources.Add(prop); }
// ---------------------------------------------------------------- // Initialize / Destroy // ---------------------------------------------------------------- override public void Initialize(BoardView _myBoardView, BoardObject bo) { MyBeamSource = bo as BeamSource; BeamColor = Colors.GetBeamColor(MyBeamSource.ChannelID); base.Initialize(_myBoardView, bo); beamView.Initialize(_myBoardView.tf_beamLines); i_body.color = BeamColor; i_body.sprite = MyBoardOccupant.IsMovable ? s_bodyMovable : s_bodyNotMovable; }
public void MirrorBeam(Vector3 hitPoint, Vector3 _reflectedVector, int n, BeamSource beamSource) { beamSource.linePoints.Add(hitPoint); if (n > 60) { Debug.Log("Infinite loop?"); return; } RaycastHit hit; if (Physics.Raycast(hitPoint, _reflectedVector, out hit, 50, dontIgnoreLayers, QueryTriggerInteraction.Ignore)) { if (hit.collider.tag == "Mirror" && hit.collider.gameObject != gameObject) { Vector3 reflectedVector = Vector3.Reflect(_reflectedVector, hit.normal); //print(hit.collider.transform.parent.name); hit.collider.transform.parent.GetComponent <Mirror>().MirrorBeam(hit.point, reflectedVector, n, beamSource); if (isFinalMirror) { hasHitFinalMirror = true; } } else { if (hit.collider.tag == "BeamTarget") { hit.collider.GetComponent <Objective>().PerformAction(); lastHitBeamTarget = hit.collider.gameObject; hasHitBeamTarget = true; } else if (hasHitBeamTarget) { lastHitBeamTarget.GetComponent <Objective>().DisperformAction(); hasHitBeamTarget = false; } beamSource.linePoints.Add(hit.point); beamSource.SetLineRenderer(); } Debug.DrawLine(hitPoint, hitPoint + _reflectedVector * hit.distance, Color.green); } }
// ---------------------------------------------------------------- // Initialize // ---------------------------------------------------------------- public Beam(BeamSource _mySource) { mySource = _mySource; }