/// <summary> /// Assigns input lasers with the lasers hitting the module /// </summary> /// <param name="laser"> Laser that hits the module </param> /// <param name="direction"> Direction the laser is going</param> /// <returns> Whether the input lasers were updated with a new laser </returns> protected bool UpdateLaser(DirectionalLaser dirLaser) { var laser = dirLaser.Laser; var direction = dirLaser.Direction; // Only accept laser hits on front of face if (!IsFrontHitFrom(direction)) { return(false); } int index = (int)direction; if (inputLasers[index] != laser) { Debug.Log($"<b>{typeof(InputModule)}:</b> <i>{(laser.IsNullLaser ? "REMOVING" : "ADDING")}</i>" + $" <b>{(laser.IsNullLaser ? inputLasers[index] : laser)}</b>" + $" in <b>{direction}</b> direction hitting <b>{gameObject.name}</b> face of <b>{transform.parent.name}</b>"); inputLasers[index] = laser; // Input laser updated return(true); } // No changes to input lasers return(false); }
public override void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition) { // TODO: Possibly return here if not hitting front face (Check is done in LaserUtil.GetMirroredDirection) base.OnLaserHit(dirLaser, hitPosition); ReflectLaser(dirLaser, hitPosition); }
public override void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition) { base.OnLaserHit(dirLaser, hitPosition); if (UpdateLaser(dirLaser)) { laserObject.UpdateManipulationInput(); } }
/// <summary> /// Updates the laser in output with direction of 'dirLaser' as index /// </summary> /// <param name="dirLaser"> Directional laser to add to output </param> public virtual void UpdateLaser(DirectionalLaser dirLaser) { var laser = dirLaser.Laser; var direction = dirLaser.Direction; Debug.Log($"<b>{typeof(OutputModule)}:</b> <i>UPDATING</i> <b>{direction}</b> direction with <b>{laser}</b> on <b>{gameObject.name}</b> face of <b>{transform.parent.name}</b>"); outputLasers[(int)direction] = laser; }
/// <summary> /// Reflects the given directional laser in a reflected direction at the hit position /// </summary> /// <param name="dirLaser"> Directional laser to be reflected </param> /// <param name="hitPosition"> Position where the given directional laser hits </param> public void ReflectLaser(DirectionalLaser dirLaser, Vector3 hitPosition) { var mirroredDirection = LaserUtil.GetMirroredDirection(FaceDirection, dirLaser.Direction); if (mirroredDirection != null) { LaserUtil.SendLaser(this, dirLaser.Laser, mirroredDirection.Value, hitPosition); } }
/// <summary> /// Splits combined laser into RGB components. Red to the left, Green forward, Blue to the right. /// If a component isn't part of the laser, just sends a null laser /// </summary> /// <param name="combinedLaser"> Laser to be processed </param> public override void ProcessLaserInput(Laser combinedLaser) { var red = new DirectionalLaser(Laser.Filter(combinedLaser, LaserColor.Red), LaserUtil.GetNextDirection(FaceDirection, false)); var green = new DirectionalLaser(Laser.Filter(combinedLaser, LaserColor.Green), FaceDirection); var blue = new DirectionalLaser(Laser.Filter(combinedLaser, LaserColor.Blue), LaserUtil.GetNextDirection(FaceDirection, true)); UpdateLaser(red); UpdateLaser(green); UpdateLaser(blue); }
public override void UpdateLaser(DirectionalLaser dirLaser) { // TODO: Maybe use this as a toggle between different lasers as opposed to processing input throw new System.Exception("Cannot update lasers in Output Starter Module"); }
public override void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition) { // Does nothing }
public virtual void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition) { isDirectionsHit[(int)dirLaser.Direction] = !dirLaser.Laser.IsNullLaser; }
public override void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition) { base.OnLaserHit(dirLaser, hitPosition); FilterLaser(dirLaser, hitPosition); }
/// <summary> /// Filters the given laser and sends the filtered laser out in the same direction from the hit position /// </summary> /// <param name="dirLaser"> Directional laser to be filtered </param> /// <param name="hitPosition"> Position where the given directional laser hits </param> public void FilterLaser(DirectionalLaser dirLaser, Vector3 hitPosition) { LaserUtil.SendLaser(this, Laser.Filter(dirLaser.Laser, filterColor), dirLaser.Direction, hitPosition); }