Beispiel #1
0
    /// <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);
    }
Beispiel #2
0
    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();
        }
    }
Beispiel #4
0
    /// <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;
    }
Beispiel #5
0
    /// <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);
    }
Beispiel #7
0
 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");
 }
Beispiel #8
0
 public override void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition)
 {
     // Does nothing
 }
Beispiel #9
0
 public virtual void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition)
 {
     isDirectionsHit[(int)dirLaser.Direction] = !dirLaser.Laser.IsNullLaser;
 }
Beispiel #10
0
    public override void OnLaserHit(DirectionalLaser dirLaser, Vector3 hitPosition)
    {
        base.OnLaserHit(dirLaser, hitPosition);

        FilterLaser(dirLaser, hitPosition);
    }
Beispiel #11
0
 /// <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);
 }