Why are my player controls wierd.

Ok, so I want to make an FPS controller from scratch, i have camera movement down, and the asdw movement must be based on rotation of the object. It works sort of until I turn, then it goes in the opposite direction, what did I do wrong?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public static PlayerController instance;
    private float playerMovementHorizontal;
    private float playerMovementVertical;
    public float walkSpeed = 30f;
    public float sensitivyX = 2f;
    public float sensitivyY = 2f;
    private float yaw;
    private float pitch;

    private void Awake()
    {
        //cacheing instances to variables to save CPU cycles
        instance = this;
    }

    private void movePlayer()
    {
        //moves player based on input put into Update()
        Vector3 direction = transform.position - new Vector3(playerMovementHorizontal, 0f, playerMovementVertical);
        direction = transform.TransformDirection(direction);
        direction.Normalize();
        direction.y = 0;
        transform.Translate(direction);
    }

    private void rotateCamera()
    {
        //adjust the camera based on calculations made in update
        transform.eulerAngles = new Vector3(pitch, yaw, 0f);

    }

    private void Update()
    {
        //calculates movement based on input from asdw keys or controller if one is plugged in
        playerMovementHorizontal = Input.GetAxis("Horizontal") * Time.deltaTime * walkSpeed;
        playerMovementVertical = Input.GetAxis("Vertical") * Time.deltaTime * walkSpeed;
        //calculates Camera rotation according to mouse
        pitch -= sensitivyY * Input.GetAxis("Mouse Y");
        yaw += sensitivyX * Input.GetAxis("Mouse X");
    }

    private void FixedUpdate()
    {
        //used in FixedUpdate() as physic based movement should be done in Fixed
        movePlayer();
        rotateCamera();
    }
}

I did not try it out but i guess you should be able to fix it by changing your move function to the following:

private void movePlayer()
     {
         //moves player based on input put into Update()
         Vector3 direction = new Vector3(playerMovementHorizontal, 0f, playerMovementVertical);
         direction.Normalize();
         direction.y = 0;
         transform.Translate(direction);
     }

Since your direction should not be dependent of your current position. Also transform.translate should take care of the transformation of the direction. → transform.tranlate scripting api