Actor will spawn wherever you gonna spawn it, if you didn’t define it during the spawn it will be 0,0,0. BeginPlay runs always first before the Tick, so actor on first frame is in it’s initial position that it’s being placed before the Tick.
As mention your tick also just gonna set same position over and over again and don’t move, his circuit is right but only missing thing is multiplying Delta X by Delta seconds, without that moment will be frame dependent not time dependent.
Also actor it self dont have any positional data, it’s location is defined by location of root component (in your case DefaultSceneRoot), so if root component is not movable it the entire actor wont be movable.
You can actually skip all that and just use Projectile Movement Component, component that will move actor for you depending on it’s parameters, it a lot more performance friendly then ticking in blueprint as it will be done on C++ side and you dont need to mess blueprint with movement code
Also one node, instead of using String, you could use enum, also more optimal choose as it only one CPU instruction to check enum (which is integer in memory) state then process entire String.