flip sprite while using mathf.sin

Hi there,

Below is my code I’m using to move an object (enemy in this case) back and forth. However I’m struggling to figure out my logic (in the fixed update function) to try and flip the sprite once it moves back and forth.

using UnityEngine;
    using System.Collections;
  
    public class EnemyAI : MonoBehaviour {
        [SerializeField] float amplitude = 1.0f;
        [SerializeField] float speed = 1.0f;
        [SerializeField] Axis axis = Axis.XAxis;
      
        Vector3 origin = Vector3.zero;
        float t = 0.0f;
  
        private bool facingRight = true;
        Transform enemyGraphics;
  
        Vector3 position;
  
  
        void Start() {
            enemyGraphics = transform.FindChild ("Graphics");
            if (enemyGraphics == null) {
                Debug.LogError("There is no 'Graphics' object as a child of the Enemy!");          
            }
            this.origin = this.transform.position;
        }
      
        void Update() {
            t = Time.realtimeSinceStartup;
          
            position = this.transform.position;
  
            switch(this.axis) {
            case Axis.XAxis: {
              
                position.x = this.amplitude * Mathf.Sin(Time.realtimeSinceStartup * this.speed) + this.origin.x;
  
                this.transform.position = position;
  
            } break;
            case Axis.YAxis: {
              
                position.y = this.amplitude * Mathf.Sin(Time.realtimeSinceStartup * this.speed) + this.origin.y;
              
                this.transform.position = position;
              
            } break;
            case Axis.ZAxis: {
                position.z = this.amplitude * Mathf.Sin(Time.realtimeSinceStartup * this.speed) + this.origin.z;
              
                this.transform.position = position;
              
            }break;
            }
        }
  
      
        void FixedUpdate () {
            //Checking to see what direction our enemy is going so and to see what way we need to flip it
            // If the input is moving the enemy right and the enemy is facing left...
            if (this.origin.x > this.origin.x && !facingRight)
                // ... flip the enemy.
                Flip();
            // Otherwise if the input is moving the enemy left and the enemy is facing right...
            else if (this.origin.x < this.origin.x && facingRight)
                // ... flip the enemy.
                Flip();
        }
      
        private void Flip()
        {
            // Switch the way the enemy is labelled as facing.
            facingRight = !facingRight;
          
            //Multiply the enemy's x local scale by -1.
            Vector3 theScale = enemyGraphics.localScale;
            theScale.x *= -1;
            enemyGraphics.localScale = theScale;
        }
  
    }
  
  
    public enum Axis {
        XAxis,
        YAxis,
        ZAxis
    }

Thanks for your help in advance.

this.origin.x > this.origin.x

this will never happen

I know. That is the part I’m struggling with as far as logic.

Maybe you want something like this

this.origin.x > this.transform.position.x

Getting better. At the origin of the enemy it flips in the center rather than the end on the left or right side.

You want to check what its position will be in the next frame and flip it if it will be travelling the other way.
Would probably want to be something like:

float NextXPos = this.amplitude * Mathf.Sin((Time.realtimeSinceStartup + 0.1)* this.speed) + this.origin.x;

if (NextXPos > this.transform.position.x && ! facingRight)

Might need to increase or decrease that + 0.1 depending on how it looks in your scene.

After some trial and error, I got it working. Thank you!