I'm working on a small multiplayer game where players can create cities, and these cities will be placed on what's called the "world map." The world map is basically a giant coordinate plane made up of tiles, and the server will load the "world map" in chunks from the database relative to a player's position on the world map.
Now, I want players to be able to send planes from their city to another spot/tile anywhere on the world map. Say for instance player who owns City 1 at position 10,10, wants to create an oil_well at position 70,30. I want a plane to fly from the departure point to arrival point, and client that loads the chunk will see that plane flying across the map.
How can I make the server calculate where the plane is? I have the following information:
departure_time
, origin_x
, origin_y
, arrival_x
, arrival_y
, speed
. speed
is the time in seconds that a plane can cross a tile on the world map.
I also have distance
, which is simply calculated as (distance formula):
var distance = Math.sqrt(Math.pow( data.arrival_x - data.origin_x , 2) + Math.pow( data.arrival_y - data.origin_y , 2));
Again, how can I calculate the current position of a moving plane on this world map? Because the plane can fly at many different angles, depending on the angle of departure point → arrival point.
Answer
Assuming the plane moves at constant speed, you can determine how far along it is (0 meaning at departure_point
and 1 meaning at arrival_point
)
progress = distance / speed * time_elapsed
You can also compute a vector (x,y) representing the translation of the airplane from its departure point to its arrival point, by subtracting one position from the other.
x = arrival_x - departure_x
y = arrival_y - departure_y
Then simply multiply that translation vector x
,y
by the proportion of progress
that has been made.
moved_by_x = x * progress
moved_by_y = y * progress
You can then add that vector to the departure point to find the point where the plane should be.
plane_x = departure_x + moved_by_x
plane_y = departure_y + moved_by_y
departure point red, arrival point blue, plane position orange
No comments:
Post a Comment