Physics

All the physics in Dual Universe are performed on the client with the vectors saved to the server. This means that nothing moves unless there is someone near it. All players engage in physics calculations when in range. If a player's ship is falling through the atmosphere and they log off, the ship will freeze until the player or another player comes online and is in the range of the construct.

## Constructs

### Propulsive forces

The physics engine in Dual Universe is partially based on Newtonian physics. What this means in game terms is that the more mass a construct has, the less it accelerates at constant thrust. Thrust is produced by engines, with different types and sizes producing different amounts of thrust. Adding additional engines increase acceleration proportional to the thrust increase.

### Torque

There are no couples. lever length (distance of line of force to centre of mass) matters but seems to not be linear to torque, Inertia tensor matters but again seems to not impact angular acceleration in a linear way. It is generally advised though to place adjustors far away from the centre of mass, and pointing perpendicular to the direction towards COM

### Interaction between torque and porpulsion

Torque is done seperately and treats a construct as if hinged freely at its centre of mass. In other words:

Whatever propels you does not rotate you, whatever rotates you does not propel you.

## Gravity

Significant masses will have their own gravity. Planets, moons, and even asteroids have their own gravity, with varying accelerations per body. All ships have their own local gravity as long as the character counts as boarded. This field fully overrides any external sources of gravity and depends on the orientation of the core.

## Fluids

The water in game has limited physics interaction with constructs and none with avatars and there are no plans to introduce water as a material. Ground engines are active in and just above water, all other elements treat it like air.

## Time

Planets do not spin or orbit the sun, moons do not orbit planets. Helios circumnavigates all planetary bodies on a fixed orbit every 10 hours but does not govern system time. System time is referenced by an Epoc.

Epoc time is the time the Ark Ship touched down on Alioth and can be obtained by system.getTime() in Lua. The epoc time is offset to users local time to give greater meaning to the local user. Paste the following code into a programming board; Unit > Start to see the epoc and local time in lua console.

```
time = {}
time.\_\_index = time

function time.new(ts)
  local self = setmetatable({},time)
  self.ts = ts or system.getTime()
  return self
end

function time.update(self, ts)
  self.ts = ts or system.getTime()
  return self
end

function time.parse(self)
  local balance = self.ts
  self.sec = balance % 60
  balance = balance // 60
  self.min = balance % 60
  balance = balance // 60
  self.hour = balance % 24
  balance = balance // 24
  self.day = balance
  return self
end

local now = time.new()
system.print(now.ts)
now:parse()
system.print("Days: "..now.day)
system.print("Hour: "..now.hour)
system.print("Min: "..now.min)
system.print("Sec: "..now.sec)

```