►
From YouTube: Scalable Multiplayer Game Design with OpenShift (E6)
Description
This monthly series explores what it takes to design a scale-out multiplayer video game architecture using containers and OpenShift. There will be live coding, philosophical design discussion, and everything in between.
Host:
Erik Jacobs
Guests:
* Derek Reese
* Michael Clayton
* Roderick Kieley
* Jared Sprague
A
Hello
and
welcome
to
yet
another
episode
of
the
scalable
multiplayer
game
design
live
stream
with
red
hat
here
today,
I'm
joined
by
roddy
kiley
who's,
the
name
I
think
I
pronounced
correctly
today.
A
Okay,
that's
not
where
I
was
expecting
that
one
to
go
but
sure
so,
while
michael
unfortunately,
is
fighting
with
his
audio
last
do
do
you?
Does
anybody
remember
what
we
talked
about
last
time?
I
think
we
we
had.
D
A
D
A
The
config
stuff
so.
C
Sure
yeah,
I
won't,
I
won't
take
up
too
much
time,
but
I
will
share
some
stuff
yeah.
So
let
me
share
my
screen
here.
Oh
host,
disabled.
D
C
C
Right,
everyone
see
okay,
so
let
me
get
started
here
so
I'll
turn
off
the.
Let
me
make
my
browser
a
bit
bigger,
except
widescreen,
makes
everything
look
small,
but
I'll
make
it
bigger
all
right.
So
let
me
just
show,
let
me
just
explain
a
little
bit
so
before
we
before
I
did
that
I
added
an
enhancement
to
the
game
server
the
that
allows
us
to
put
config
variables
into
a
config
file
which
changed.
C
Often,
you
know
because
before
that
the
we
had
some
values
hard-coded
in
the
code,
which
would
mean,
if
you
wanted
to
change
some
things
you
actually
had
to
like
change
it
in
the
source
code
and
then
do
a
rebuild
of
the
cc
of
the
c
plus
bus
server,
which
yeah
that's
not.
That's,
not
it's
a
lot
yeah,
it's
a
lot,
especially
when
you're
just
trying
to
debug
stuff
right
and
you
want
to
like
change
values
and
see
immediately
cut
show
up.
C
So
that's
what
I
I
tackled
and
using
yaml.
So
I
found
a
library
for
c
plus
plus
called
cpp
yaml,
which
was
really
really
easy.
Go
great
library
and
that's
and
I
kind
of
did
a
refactoring
of
the
code
so
like
we
had
a.
E
C
Of
the
config
stuff
in
in
the
like,
the
main
launcher
file
which
I
moved
into,
I
can
all
can
kind
of
consolidate
it
into
a
config
class,
which
includes,
and
so
now
all
the
variables
that
you
want
to
use
to
change
the
way
the
game
behaves
can
be
done
through
these
different
methods,
so
you
can
either
you
can
still
put
it
in
the
command
line.
C
You
could
put
in
a
command
line
argument
and
the
ones
that
were
hard
coded
before
I
extract
it
out,
so
they
could
either
be
a
command
line
argument
or
put
into
or
put
into
values
in
the
config
file
and
then
very
cool.
If
you
leave
them
out,
they
all
have
defaults
and
here's
the
list
of
defaults
here.
C
So
let
me
show
a
quick
example
of
that.
So
here's
the
clear
the
screen,
but
here's,
here's
the
game
server.
So
well,
actually,
here's
the
config
file,
so
we
got
the
broker
uri
endpoint
the
sleep
cycle,
which
is
really
the
game:
tick
like
yeah,
the
milliseconds.
How
often
the
game
loop
runs
and
then
the
the
cues
for
the
broker
cues
that
they
go
into
so
the
game
in
queue
and
the
event
queue
event
out
and
then
the
force
multiplier.
So.
C
Anything
that
can
change.
You
know
like
number
of
bots
we
want
to
put
in
or,
like
you
know
what
so
many
things,
and
then
you
can
change
how
the
game
behaves
by
just
changing
some
battles
in
a
file
so
right
now
this
is
the
default
every
two
milliseconds.
So
if
I
run
the
server
right
now
well,
first
of
all,
you
can
see
there's
hardly
any
command
line
arguments
because
it's
pulling
it
before
this
was
a
really
long
command
to
start
the
game
server.
But
now
it's
just
running
every
two
seconds.
C
And
if
I
try
to
move,
it's
gonna
move
very
slowly,
because
it's
like
every
two
seconds.
It
moves
just
a
little
bit.
Yeah,
I'm
like
okay,
that's
not
very
good,
because
so
slow,
so
to
fix
that
now,
instead
of
doing
a
rebuild
of
the
code
now
all
I
have
to
do
is
like
come
into
this
config
file
and
be
like
okay,
let's
make
the
force
multiplier
like
100
000
and
make
the
server
take
50
milliseconds
and
see
what
that
does
now
run
it
again
and
refresh
the
client,
and
now
it's
like
whoa
boom.
C
Now
it
like
moves
right
away
and
you
can
see
how
smooth
it
is
because
it's
a
50,
50,
millisecond
service,
tick
and
you
know,
positions
are-
are
lurked
between
between
ticks,
so
it
looks
really
smooth
and
the
force
multiplier
seems
to
be
and
well
you.
I
guess
that
that's
the
whole
demo
pretty
much
just
showing
like
changing
just
by
changing
the
values
in
the
config
file
and
refreshing
the
client.
You
get
a
immediate
results
of
of
testing
stuff
out.
C
So
that's
it
really
very.
A
C
A
That
certainly
makes
life
easier,
yeah,
and
so
one
of
the
things
that
we
had
sort
of
realized
was,
you
know
we
we
can
so
actually,
if
you
want
to
show
your
screen
again,
yeah
sure,
since
you
have
it
up,
if
you
start
the
game
or
if
you
like,
restart
the
server
and
then
join
with
one
browser,
tab.
C
A
Everybody
starts
at
zero,
which
yeah
doesn't
work
like
now.
The
players
are
on,
quite
literally
on
top
of
each
other
right
and
in
some
cases
you
can
see
them
like
yeah.
Now
you
actually
ended
up
with
a
third.
A
So
yeah
this
is
bad
right,
so
we
need
to
sort
of
somewhat
randomize
the
player
position
and
there's
no
there's
no
way
to
quit
the
game
right
now
so
like.
If
you
just
close
one
of
your
browsers,
the
server
has
no
timeout
and
the
client
is
just
like
okay
later
and
like
nothing,
nothing
actually
happens.
A
So
I
I
did
some
hacking
around
to
try
and
fix
some
of
these
things.
Also,
the
way
that
we're
applying
forces
to
the
to
the
spacecraft
like
when
you
press
the
left
or
the
right
arrow.
It
simply
moves
left
and
right.
You
can't
actually
rotate
the
ship,
and
so
I
tried
to
figure
out
with
box
2d
like
how
to
do
some
of
those
things.
A
A
Defaults
all
right,
can
you
all
see
my
tiny
little
text
here?
Yes,.
A
A
Because
we're
using
phaser,
we
have
a
bunch
of
scenes
and
then
we
start
with
this
initial,
like
preload
scene,
and
so
what
I
did
was.
I
just
took
the
font.
Awesome
like
x,
circle,
png
and
just
downloaded
that
to
make
it
a
sprite,
and
so
then
we
we
preload
it
and
then,
when
the
main
scene
is
opened,
we
add
that
x
in
the
upper
right
hand
corner.
A
I
was
trying
to
figure
out
how
to
actually
make
the
button
pressing
do
starting
a
scene,
and
so
I
found
some
random
post
on
stack
overflow.
That
was
like.
Oh,
it's.
Actually,
the
scene
property
of
of
the
scene
lets
you
start
the
scene.
I
don't
know
whatever
you
can
read
the
post
in
there
by
looking
at
the
link
in
the
code,
but
that
gives
you
a
button
that
actually
does
the
thing,
and
so,
if
I
npm
start
here.
A
It'll
open,
of
course,
the
wrong
browser,
but
here's
the
browser-
and
you
see
this
little
x
button-
I
don't
have
a
server
or
anything
running
right
now,
so
there's
no
player
to
come
up.
But
if
I
click
the
x,
what
it's
going
to
do
is
send
a
leave
message
and
then
switch
to
like
a
quit
scene,
which
right
now
is
empty
and
does
nothing.
A
C
A
Oh
so
yeah
it
wasn't,
it
didn't
take
a
whole
lot
to
figure
out.
So
in
the
code
we
already
have
the
protobufs
that
define
the
message,
types
that
we
send,
and
so
we
already
have
this
security
command
buffer
and
when
you
send
a
security
command
buffer
message,
there's
two
types:
there's
a
join
type
and
a
leave
type,
and
so
we
were
already
consuming
a
join
message
somewhere
in.
A
Oh
yeah
right,
so
if
we
look
at
the
amkp
game
client,
we
were
already
consuming
the
join
message.
So
let
me
look
through
here
so
on.
A
On
a
game
event
message:
we
have
this
callback
and
then,
if
there's
a
message
body,
we
decode
an
event
game
buffer
and
then
we
look
at
the
event
type
and
then
we
already
had
this
like
security
game
event
buffer
type,
and
we
already
had
a
way
to
send
the
join
message
to
like
construct
it
as
a
join
right.
So
here's
the
security
command
buffer
that
is
type
one
which
is
join
so
to
do
the
leave.
I
was
just
like.
Oh
okay.
A
A
Okay,
I
mean
we
probably
want
to
implement
some
kind
of
stronger
authentication
yeah
so
that
you
can't
like
hack
your
way
into
deleting
deleting
other
players
which.
A
Well
so
funny
thing:
a
million
years
ago
I
used
to
be
a
bulletin
board
kid,
and
so
there
was
a
local
bulletin
board
that
was
based
on
the
galacticon
software.
A
I
know
had
12
lines
or
something
like
that,
and
there
was
a
chat
room
and
there
was
a
text
based
brawl
game
where
it
was
like
an
old
western
like
you
could
have
a
shotgun
or
a
revolver
or
like
stick
a
dynamite
or
whatever,
and
so
when
you
would
play
this
game-
and
this
was
in
the
days
of
like
2,
400
and
9
600,
broad
modems
and
a
lot
of
people
use
this
modem
connection,
software
called
telemate,
and
so
when
people
were
playing
the
chat
game,
the
brawl
chat
game.
A
That's
I
don't
know
why
this
that
came
to
my
mind
when
we're
talking
about
this
join
and
leave
command,
but
yeah
anyway.
Oh
because
you
could
just
like
randomly,
you
know,
delete
other
players.
A
A
A
A
A
So
when
a
message
comes
in
from
the
game
server,
we
decode
the
message
as
something,
and
so
if
it's
a
player
did
something
that
comes
in
as
a
entity,
game
event
buffer,
which
has
like
a
position
and
a
rotation
and
a
whatever.
So
when
we
look
at
process
entity
game
event,
all
we
do
is
we
check
if
we
already
knew
about
that
player?
A
A
What
we
do
is
we
just
iterate
over
all
the
players
that
we
know
about,
and
then
we
update
their
state
either
we
initialize
them.
If,
if
we
didn't
have
a
sprite
for
them
already
or
we
just
update
whatever
their
sprite
was
and
what
you
can
see
here,
is
I
added
this
to
destroy
thing.
A
A
If
we
encounter
a
player
with
to
destroy
is
true,
we
reap
the
player
by
using
phasers,
destroy
method
on
the
physics
group,
for
that
particular
player's
object,
and
then
we
delete
them
from
the
list
of
players
that
we
know
about,
because
if
we
didn't
do
this,
then
we
accidentally
re-initialized
them
on
the
next
go-around,
because
it's
like,
oh,
we
found
a
player
that
we
don't
have
a
sprite
for
yeah.
It's
not
not
what
you
want
to
do
so,
yeah
that
that
takes
care
of
effectively
nuking
the
player.
F
Yeah
yeah,
it
makes
me
wonder
if
a
like
a
really
simple
solution
to
our
to
the
security
problem
would
be.
You
have
one
uuid
like
this
one,
that's
just
for
identifying
players
tying
them
to
their
sprites
and
everyone
receives
those
and
then
there's
a
secondary
like
security
uuid.
That's
only
issued
to
the
player
that
it
belongs
to
and
that's
what
you
use
to
leave
and
so
then.
A
To
the
client,
once
the
player
joins,
like
hey
we're
acknowledging
your
join,
you
know
this
is
your
special
token
that
you
need
to.
You
know,
remove
yourself
later
or
whatever.
A
For
well,
if
you
think
back
to
the
early
days
of
the
stream,
when
I
showed
some
of
the
chat
lobby
stuff
using
red
hat
single
sign-on,
and
so
we
were
already
using
jwts
for
that,
and
so
my
thought
was
that
when
the
player
goes
from
the
game
lobby
into
the
game,
client
that
we
would
use
their
jwt
to
basically
identify
who
they
are,
and
so
you
would
send
the
jwt
to
the
server
when
you're
joining
the
server
would
validate
your
jwt
against
red
hat
single
sign-on.
A
And
so
then,
when
you
send
a
leave
message,
it
would
be
the
same
thing
like
does
this
jwt
match?
Who
you
who
you
are
logged
in
as
and
if
it
does?
Okay
cool,
we'll
delete
you
we'll
leave
you
yeah
man,
I
don't
michael.
I
don't
know
why
zoom
is
bad
about
gain,
but
unfortunately,
hopefully
my
level's
a
little
better.
Now,
it's
better
yeah,
just
just
scream,
and
so
you
can
see
here.
A
I
started
to
try
and
add
some
text,
but
I
couldn't
figure
out
the
next
step
to
actually
put
text
on
the
player
in
phaser
but
yeah
anyway.
Anybody
have
other
questions
about
the
client.
A
Okay,
we'll
switch
to
some
of
the
server
changes
that
I
made
server
changes,
so
what
you
saw
when
jared
was
playing
with
his
character.
You
know
you
press
the
up
button.
The
thing
moves
up,
you
press
the
right
button.
It
moves
directly
to
the
right,
there's
no
rotation
and
like
in
a
space
game.
Normally
you
would
like
rotate
and
then
your
thrust
is
applied
in
the
direction
that
your
your
spacecraft
is
traveling,
so
there's
a
whole
bunch
of
things
that
we
sort
of
had
to
do
to
that.
A
I
had
to
do
to
make
that
work,
and
so,
if
I
look
at
some
of
the
changes
here,
oh
this
is
only
going
to
be
the
changes.
I
want
to
compare
the
active
file
against.
D
A
A
Compare
this
one:
there
we
go
okay,
cool,
so
the
way
that
we
had
it
before
and
again
we're
using
box2d
for
the
physics
engine
under
the
cover.
So,
firstly,
our
player
was
a
shape
of
a
circle
which,
like
I
mean
spaceship,
is
kind
of
like
a
cigar
shape.
It's
not
really
a
circle.
We
were
using
a
specific
circle
shape.
We
were
applying
force
directly
to
the
center
of
the
object
and
so
left
just
moved
you
to
the
left
and
right
moved
you
to
the
right.
A
So
what
we
need
to
do
is
we
need
something.
That's
like
cigar
shaped
that
has
the
appropriate
mass
and
that
we
apply
force
in
the
correct
ways,
and
so
one
of
the
things
I
did
was
I
changed
it
to
be
a
box.
We
had
talked
on
the
stream.
Previously,
I
think,
maybe
two
episodes
ago
we
were
gonna
have
a
ship
that
was
about
300
meters
long
and
I
arbitrarily
guessed
it
60
meters
wide.
A
A
A
The
way
that
box
2d
calculates
the
mass
of
an
object
is
rather
bizarre.
You
don't
actually
set
the
mass,
you
set
the
density
and
then
it
uses
the
area
of
the
object
and
the
density
to
calculate
the
mass.
A
So
I
just
did
some
simple
backwards.
Math
and
I
said
well,
we
had
decided
that
we
wanted
the
spaceship
to
have
a
mass
of
20
000
kilograms,
which
who
knows,
if
that's
a
reasonable
number
or
whatever,
but
to
go
backwards
into
a
mass
of
20
000
kilograms.
It
was
basically
20
times
150
20
000,
divided
by
20
times
150,
which
gives
you
six
and
two-thirds
as
the
density.
A
So
this
is
the
density
and
when
the
fixture
gets
rolled
up
into
the
body,
so
box
2d
uses
this
concept.
If
you
have
a
body,
that's
made
up
of
multiple
fixtures
that
can
be
attached
to
each
other
in
different
ways
when
it
rolls
up
the
density
of
the
fixture
and
the
shape
of
this
particular
fixture,
which
there's
only
one
fixture
right.
Now
you
get
a
mass
of
20
000
kilograms
or
20
000
units
which
are
kilograms.
A
So
then
we
had
to
figure
out
how
we
were
going
to
handle
the
forces,
and
so
I
found
another
stack
exchange
post
that
talked
about
how
to
move
a
box.
2D
object
in
the
direction
that
it's
facing,
and
so,
if
you
think
about
the
ship,
if
it's
facing
up
and
you
apply
thrust,
it
should
go
up.
But
if
it's
facing
at
an
angle-
and
you
apply
thrust,
it
shouldn't
go
up,
it
should
go
in
this
direction
like
the
direction
that
it's
facing
and
so
the
way
that
you
do.
A
That
is
somewhat
stupidly
and
obviously
in
hindsight,
using
trigonometry,
and
so
you
take
the
angle
of
the
object
from
zero
and
you
apply
the
cosine
times
the
thrust
value,
and
that
gives
you
the
x
vector
of
the
thrust,
and
then
you
take
the
sine
of
it
to
get
the
y
vector
of
the
thrust,
and
so
that
gives
you
how
much
force
is
being
applied
in
the
appropriate
vector,
and
then
we
multiply
that
by
our
force
multiplier,
because
that
that
is
what
we're
trying
to
figure
out
like.
Oh,
what
should
the
starting
thrust?
Be?
A
It's
a
config
object
whatever,
and
then
we
can
just
apply
that
force
to
the
center
of
the
object
like
we
theoretically
should
apply
it
to
the
end
of
the
object,
but
it
kind
of
doesn't
matter
like
because
it's
a
single
object
right
now,
whether
you
apply
the
force
at
the
center
or
at
the
end,
it's
still
going
to
theoretically
achieve
the
same
goal.
A
Maybe
it
wouldn't,
but
whatever
we'll
go
with
it
for
now,
and
then
turning
left
to
right
should
really
be
applying
a
torque
to
the
body,
and
this
is,
I
think
this
is
not
the
way
we
want
to
do
this.
I
think
we
actually
need
to
apply
a
force
to
the
end
of
the
ship
or
or
we
have
to
figure
out
like
theoretically,
where
the
the
the
rotational.
A
Yeah
yeah
yeah,
so
this
this
works
very
badly
right
now,
only
in
the
sense
that
it's
it's
way
slower
than
the
thrust
which
I
don't
understand.
Why?
My
assumption
is
that
the
torque,
wherever
the
torque
is
being
applied
to
the
body?
It's
like
you
ever
try
to
open
a
door
from
the
hinge
like
it's
really
hard.
It
doesn't
work
but
he's
trying
to
open
the
door
from
the
end.
It's
like
zoom.
It
just
opens
up,
and
so
I
think
this
applied
torque.
A
I
have
to
look
at
the
definition
of
where
that's
actually
being
done,
but
this
this
does
actually
work.
There
was
a
a
backwards
thing
in
the
in
the
game,
client
that
I
just
fixed
on
my
end,
so
we
were
like.
I
would
press
right
and
the
ship
would
go
forwards
and
it's
like
that's
that's
the
x
and
the
y
or
the
backwards.
A
So
if
I
try
and
do
oh
and
then
the
last
thing
was,
how
do
we
get
the
player
to
not
start
at
zero
all
the
time?
And
so
we
have
this
creation
thing
where,
when
a
new
player
comes
in,
we
add
their
pod,
and
so
we
create
a
box
box2d
entity.
So
we
have
like
regular
server
entities
that
have
their
own
metadata
and
then
we
have
box2d
entities
that
are
like
attached
to
them.
A
So
we
have
our
our
pod,
which
then
has
a
box2d
pod,
that's
associated
with
it,
and
all
I
did
was
I
used
the
the
random
that
came
into
c
plus
plus
11,
but
it's
actually
not
particularly
random,
like
I
think
it's
the
same
random
number
every
time
whatever.
So
we
need
this
to
be
a
little
more
random,
but
it
does
work.
The
second
player
is
not
in
the
same
position
as
the
first
player.
A
Yeah
we
need
some
more
randomness,
you
know
variation
there,
but
we
do
legitimately
get.
You
know,
players
that
end
up
in
different
positions
and,
like
I
added
a
whole
bunch
of
more
barfi
log
messages
about
you,
know,
hey
look.
This
is
what
the
actual
mass
is:
here's
the
inertia
and
so
on
and
so
forth.
Yeah.
So
if
I
debug
the
server
and
I'm
just
gonna
run
it
log
level
one
because
we
don't
really
care
about
the
log
messages
and
if
I
then
oh
gosh
alt.
A
A
Right
so
we'll
do
localhost
3000
and
what
we
see
is
our
player
starts
over
there
and
if
I
press
the
right
arrow
and
hold
it
down,
it's
going
to
take
forever.
But
you
can
see
it's
rotating,
you
see
it
rotating
yeah,
not
straight,
and
now,
if
I
press
up
it
should
go
in
the
direction
that
it's
pointing,
but
it's
going
backwards.
A
A
Yeah,
but
you
know
this
is
this
is
prototyping
right,
so
it
looks
like
we've
got
some
some
digits
backwards,
and
so
one
of
the
challenges
I
was
having
was
like,
I
was
talking.
We
were
talking
about
this
before
the
stream.
If
I
come
into
the
server
and
I
set
a
breakpoint
on
oh
gosh,
come
on.
If
I
set
a
break
point
in
the
update
and
the
force
calculation
stuff,
so
we'll
we'll
set
the
breakpoint
here
right.
A
So
here's
a
break
point.
If
I
go
into
the
debug
console,
we've
got
our
yeah.
A
So
all
we
have
is
a
this
and
it's
like
I
I'm
bad
with
trying
to
debug
c
plus
plus
so
we've
got
this
body,
which
is
the
thing
that
we
applied
the
torque
to,
but
so
I
I
can
do
something
like
you
know,
this
dot,
m,
pb2
body
and
that'll,
give
me
the
right
object,
but
I
can't
actually
use
any
of
the
functions
that
that
exists,
because
I'm
in
weird
c,
plus
plus
debug
lan
and
it's
not
a
rebel
or
whatever.
A
So
it's
like
well,
how
do
I
actually
get
the
angle
of
the
thing
if
it's
not
like?
So
if
it's
not
one
of
the
variable
objects
like
on
the
thing,
then
I
actually
have
to
go
and
look
at
the
definition
of
this
function
to
figure
out
like
how
to
do
the
thing
I
don't
know,
I'm
not
good
at
debugging,
c,
plus
plus,
but
anyway
I
did
a
thing.
C
Yeah,
that's
awesome.
Like
there's
a
bunch
of
stuff
you
covered.
E
C
Like
yeah,
I
have
a
few
questions,
so
yeah
ooh,
okay,
oh
yes,
so,
first
one
with
the
picking
a
random
okay,
picking
a
random
position.
C
Yes,
keep
it
from
keep
it
from
hitting
the
like,
while
you're
at
the
same
purse
like,
but
there's
always
a
chance
that
you
will
have
if
it's
just
random
like
that,
you
will
end
up
getting
a
spawn
point
on
top
of
another
player,
yep
yeah
they're,
a
like
distance
function
where
you
can
be
like
you
know,
am
I
too
close
to
another
player
just
like,
and
if
so
let
me
pick
another
point
to.
A
Yes,
but
no
and
so
right
now
this
function
and
rod
you
might
under
you
might
understand
more.
This
function
only
takes
a
uuid
as
an
input,
but
what
we
could
do
is
in
the.
A
A
Not
the
c
plus
plus
genius
here
a
entity
add
pod,
go
to
references.
B
Yeah,
if
you
look
at,
if
you
look
at
the
structure
of
a
entity
which
is.
B
Yeah
there's
a
static
member
in
the
parent
class
which
keeps
track
of
all
the
instances
of
entities
as
they're
added.
So
if
you
look
at
a
entity
line
68
or
in
the
vicinity
anyway,
scroll
up
a
little
bit
there,
you
go
so
there's
a
list
of
pods
there.
That's
private
right
so
like
we
could
add
a
function
to
the
parent
class
that
loops
through
the
list
of
instances
of
entities
in
this
case
pods
and
grabs
their
location
and
calculates
distances.
A
A
F
C
Yeah,
that's
exactly
what
we
do
with
orbio
like
I
sent
you
the
function.
For
that.
That's
a
that's
the
algorithm.
We
use
pretty
much
to
pick
a
ram
position
and
we
have
a
minimum
distance
that,
if
you're
below
that
it
picks
another
random
position
and
if
it
tries
that
then
we
have
the
only
other
thing
is
we
have
like
a
retry
limit,
so
it
doesn't
get
into
an
infinite
loop.
A
A
Like
mathematical
theorem
that
says,
here's
how
to
like
you
know
equally
distribute
something
you
know
in
a
2d
whatever
and
I'm
sure,
there's
probably
already
like
an
example
c
plus
plus
implementation.
So
I
I
don't
think
it's
going
to
be
that
hard
to
do
because
a
lot
of
these
like
path,
walking
type
things
are,
are
well
known.
B
So
then,
the
question
is:
is
that
a
good
gameplay
thing
to
do
right,
like
what
do
you
think
eric
if
you're
going
to
start
a
game
and
you're
jumping
in
as
a
new
player?
Do
you
like
the
idea
of
knowing
exactly
where
you
might
land
because
it'd
be
equally
distributed,
or
would
you
prefer
a
randomized
distribution.
A
I
I
think
I
would
probably
prefer
I
don't.
I
don't.
Actually
I
don't
know
that
we
can
say
like
until
we
can
actually
shoot
each
other,
because
there
could
be
reasons
why
one
would
be
better
than
the
other.
That
just
leads
us
into
a
strategic
discussion,
but
we
have
no
real,
meaningful
gameplay
characteristics
yet
so,
like
I
don't
know
that
we
can
make
a
decision.
B
C
If
this
is
more
of
like
an
ongoing
thing,
where
players
are
joining
and
leaving
and
joining
and
leaving
all
the
time
players
are
going
to
be
moving
around
you're.
Not
there
there's
no,
it's
impossible
to
have
equidistant
because
as
soon
as
someone
joins,
they're
going
to
start
moving
and
there's
going
to
be
clusters
of
players
fighting
each
other.
C
E
C
A
Well,
so,
if
if,
if
all
the
players
are
close
together,
then
you
being
equally
distant
from
every
player
means
you're
likely
to
be
close
to
all
of
them,
like
in
theory,
you
could
be
equally
distant
to
all
of
them
and
very
far
away
so
that
that
gets
us
into
like
the
minimum
distance
thing.
So
I
guess
you're
you're
right.
It
doesn't
guarantee
that
you're
close
to
them.
If
just
because
they're
close
but
anyway,
I
think
we're
kind
of
spiraling
out
into
like
a
rant.
A
weird
discussion.
C
It
is,
I
mean
it's,
it's
kind
of
relevant
to
the
design,
though
like
because
I'm
still
not
sure
is
this
game
going
to
have
a
like
a
discrete
beginning
and
end
where,
like
12
people
start
play
for
15
minutes
and
then
the
game
ends,
and
then
the
next
one
starts
or
is
it
gonna
be
like
a
like
a
always-on
kind
of
like
people
joining
and
leaving
joining
and
leaving
all
the
time.
A
B
A
A
C
A
C
Put
that
as
a
list
of
client
enhancement
for
posts,
both
stream
yeah,
and
I
had
other
questions
too.
A
Yeah,
so
the
the
if
we
look
at
the
protobuf
for
box
2d,
so
in
the
protobuf
for
box
2d,
the
current
angle
of
the
player
object
is
defined
and
if
we
look
at
the
definition
in
box
2d's
documentation,
this
number
is
in
radians.
A
And
so
it
so
happens
that
phaser
has
a
set
angle
and
a
set
rotation,
and
so
all
I
do
is
I
take
the
player
body
angle
which
came
in
when
the
update
came
in
via
the
amqp
message,
and
then
I
just
set
the
rotation
to
the
player
body
angle.
So
it
is
it's
synchronized
to
whatever
the
number
is.
C
A
Yeah
that
one
was
actually
pretty
pretty
simple
cool.
C
C
That'll
be
a
lot
better
than
than
arrow
keys.
C
D
F
D
B
E
A
A
But
in
a
top-down,
so
I
I
never
had
that
problem
when
I
was
racing
at
the
rc
car
track,
because
you're
standing
on
the
platform
above
and
looking
down,
and
so
your
left
is
always
left
from
that
perspective,
like
yeah,
it's
coming
at
you,
but
like
it's
coming
at
you
from
under,
and
so
it
just
it's
intuitively
left
is
left
kind
of
thing,
so
I
don't
know
well
again,
this
is
one
of
those
like
game
design.
Things
we'll
have
to
try
it
and
see
anyway,.
F
Where
was
the
code
that
you
had
up
earlier
that
had
the
the
sine
and
cosine
for.
B
A
My
my
guess,
with
this
one
is
that
it's
probably
like
a
down
is
up,
and
up
is
down
kind
of
thing.
F
D
F
D
A
Yeah,
what
was
the
question
about
so.
F
F
Okay,
it
was
the
multiplication
component
on
the
second
line,
that
was
the
ab2
vec
move
dot
vecmove.x.
A
Yes,
and
so
the
reason-
yes,
it's
intentional,
so
if
you
think
about
what
comes
in
from
the
client
right,
the
way
that
the
client
sets
direction
is
if,
if
left
is
down,
it
sends
negative
one.
If
right
is
down,
it
sends
one
if
you're
pressing
up
it.
E
A
C
B
A
C
I
mean
right
yeah,
but
this
is
getting.
This
is
what's
getting
sent
right,
yeah,
but
the
I
mean
the
way
it
was
the
way
it
has
been
sent
like.
If
you
push
the
down
arrow.
A
And
as
you
saw,
it
was
backwards
yeah,
so
it's
it's
either.
We
have
to
change
this,
but
to
me
this
seems
backwards
like
if,
if
the
button
press
is
implying
thrust,
then
up
should
be
more
thrust
and
down
should
be
you
know,
backwards,
e
or
whatever.
So
if
I
change
this
to
one
and
then
change
this
to
negative
one,
what
I
should
get
now,
if
I
rerun
the
server.
C
A
A
A
A
B
A
And
according
according
to
this,
we
didn't
get
disconnected.
So
my
guess
is
it's
the
server,
but
it's
hard
to
know
because
it
it
doesn't
block
new
connections
which
is
somewhat
annoying.
C
E
B
Again,
I'm
saying
in
the
beginning,
I
remember
there
was
an
issue
on
the
stomp
side
where
there
was
no
heartbeat
on
the
link
right
and
when
there
was
no
heartbeat
right.
But
that
was
different,
though,
because
it
would,
it
would
just
time
out,
but
this
is
an
actual
like
framing
problem
from
an
amqp
point
of
view.
B
B
B
E
D
B
B
A
B
B
B
D
D
B
B
A
So
it
looks
like
we
need
to
figure
out
how
to
orient
how
the
sprites
should
be
oriented
within
the
box
2d
world.
I
wish
the
box.
I
wish
the
documentation
for
any
of
these
things
was
better
like
is.
F
A
F
If
we
had
a
thrust
vector
that
was
just
like
x
is
0
and
y
is
1.,
so
it's
always
assumed
to
be
straight
up
and
multiply
that
by
the
force
constant
and
then
we
rotate
it
by
the
same
angle
that
the
ship's
already
rotated
by
then
we
rotate
what
the
force
vector
because
you're
doing
a
manual
rotation
right
now
using
trig.
I
feel
like
that
should
be
in
a
vector
library.
A
No,
no,
no,
it's
not
a
so
the
trig
is,
is
applying
the
force
along
the
direction
that
the
object
is
pointing
yeah,
because
you
assume
that
if
you
have
a
object,
that's
shaped
like
a
cigar,
the
motors
at
the
back
or
the
thrusters
at
the
back.
So
if
the
thing
is
pointed
this
way,
you
can't
apply
a
force
in
the
up
one
direction.
That's
why
you've.
A
Along
yeah,
but
the
you
there
is
no
you'd
have
to
do
the
math
on
on
rotating,
like
you
can't.
E
F
F
What
I'm
saying
you
can
have
a
vector,
and
you
can
call
a
function,
called
set
rotation
on
that
vector
that
will
rotate
it.
So
if
it's
pointed
at
zero
one,
you
can
rotate
it
45
degrees
or
put
in
my
radius.
B
F
A
A
F
B
You
can
retrieve
the
rotation
and
you
can
apply
forces,
but
when
you
apply
forces
and
torques,
it
results
in
new
vectors
and
new
rotations.
You
don't
set
them
directly
because
that's
a
kinematic
way
of
thinking
right.
So
it's
either
it's
one
of
two
things
right.
You
can
physically
simulate
it
using.
B
You
know,
forces
and
torques,
which
is
just
a
rotational
force
or
you
can
kinematically
animate
it
to
set
the
rotation,
but
essentially
which
point
you
turn
the
physics
simulation
off
to
do
that
manually
yourself.
F
B
Doesn't
matter
a
little
bit
right,
so
yeah
in
the
case
of
we
want
to
apply
a
force
in
the
direction
that
the
cylinder
cylindrical
pod
is
pointing
right,
so
the
thrusters
down
here
on
the
bottom,
the
pods,
pointing
this
way.
We
want
to
apply
a
force
this
way
and
we
want
it
to
move
like
this
right,
and
so
the
question
is:
what
is
the
angle
if
you
look
at
this
triangle?
What
is
this
angle
right
here
in
this
little?
If
you
look
at
this
is
a
straight
line.
B
A
Yeah,
so
so
to
to
simplify
it.
Essentially,
the
box2d
library
has
no
vector
math
to
to
manipulate
vectors
as
objects,
and
so
it
expects
you
to
do
that.
So
if
we
want
to
bring
in
another
vector
math
library
to
do
what
you're
suggesting
we
we
could
do
that,
but
we've
already
done
what
we
need
to
do
with
the
sine
and
the
cosine,
which
is
the
vector
math.
Well,.
F
A
A
It
appears
that
0
is
not
in
the
up
direction,
but
phasor's
zero
is
in
the
up
direction,
so
we
just
have
to
figure
out
which
up
is
up
in
which
system
and
then
start
with
them
pointed
in
the
same
direction.
I
couldn't
care
less.
If
up
was
this
way,
I
just
need
to
know
which
way
it
is
in
both
coordinate
systems.
A
Coordinate
systems
that
that
are
potentially
not
behaving
the
same
like
they
could
be
rotated
by
90
degrees.
They
could
be
out
by
180
degrees.
It
appears
that
they're
rotated
by
90
degrees,
so
it
wasn't
the
force
that
was
the
problem.
It
was
the
force
is
being
applied
directly,
but
the
way
that
it
moves
in
the
coordinate
system
wasn't
what
we
expected.
So
that
means
that
the
actual
rotation
of
the
thing
is
here.
So
we
just
need
to
change
where
the
phasor
sprite
is
pointed
when
it
starts.
A
Sense
or
we
need
to
change
the
starting
rotation
of
the
pod
when
we
initialize
it
also
could
not
care
less
righty
you're,
probably
the
box
2d
guru.
Should
we
should
we
change
the
phaser
sprite,
or
should
we.
D
A
F
A
F
A
Right,
but
where
the
challenge
here
is
that
we're
we
need
to
rotate
oh,
but
I
can
oh,
I
can
do
this
hang
on.
Does
phaser
have
a
get
rotation.
No,
the
body
already
has
an
angle.
All
right
hang
on
a
second.
I
need
to
hack
on
some
stuff
here:
real
quick,
basically,
I'm
going
to
just
add
an
extra
rotation
to
the
object
and
that'll
fix
all
our
problems.
D
D
F
F
A
And
there
is
a
b,
so
I
don't
does
the
sprite.
C
The
sprite,
the
physics
group.
A
I
I
I
don't
know
but
anyway,
so
we
need
to
rotate
this
90
degrees
and
the
angle
is
zero.
So
if
we
do
player,
sprite
set
angle
to
player,
sprite
oops,
that's
fine
player,
sprite
angle,
plus
90..
What.
B
So
in
the
in
the
box
duty
library
there
is
a
b2
math
header
that
does
have
a
b2
rotation
struct,
where
you
can
construct
it
via
the
angle
in
radians
and
then,
after
that,
you
can
take
back
out
the
x
and
y
axis.
B
B
A
So
now,
I'm
just
basically
adding
90
degrees
of
rotation
in
actual
degrees,
not
radians
to
whatever
it
already
has
and
we'll
see
if
it
starts
in
the
right
place.
A
A
A
E
D
E
C
Physics
simulation
is
killing
his.
E
C
C
C
A
Yeah
so
there's
there's
some
issue
with
the
with
the
torque.
It
does
not
appear
to
be
applying
torque
in
the
opposite
direction.
A
A
A
C
E
B
There
we
go
like
what
might
be
handy
here
is
like
a
a
local
display
from
the
server
of
just
the
box,
2d
simulation
and
show
the
vectors
on
the
body
and
the
shapes
as
far
as
box
2d
is
concerned,
and
then
you
could
compare
the
client
against
what
box
2d
thinks
because
often
they're,
not
necessarily
one
in
the
same.
B
So
like,
if
you
look
at
the
way,
some
of
the
stuff
that
we
looked
at
before
for
box
2d
shows
the
simulation.
It's
literally
just
shapes
right,
it's
just
lines,
boxes
circles
and
then
they're
corresponding
vectors
right
so
like
you
can
have
your
graphical
display
of
your
client
and
you
can
have
your
box
2d
display
of
what
it
thinks
is
the
state
of
the
world
and
all
the
shapes
it's
simulating,
and
you
can
realize,
like
hey
over
here.
B
D
B
B
But
it
it
depends
on
which
way
it's
quicker
to
do
it
right,
like
you,
already
have
the
simulation
data
on
the
server
side,
so
it
may
be
very
quick
to
do,
but
at
the
same
time,
yes,
I
agree
in
having
it
in
the
client
and
being
able
to
hit
a
little
button
and
say:
let's
see
the
physics
simulation.
That
would
be
ideal.
A
B
Server,
not
necessarily
you
could
you
could
have
it
the
bug
mode
where
you
had
it
built
directly
and
just
directly
use
some
box
2d
like
there's
a
there's,
a
box
to
the
draw
debug
example
that
you
could
probably
integrate
and
just
run
it
with
like
a
headed
like
a
the
server
with
an
option
to
for
the
display
in
the
long
term,
though
thinking
it
through,
it's
not
going
to
work
because,
of
course,
we're
going
to
containerize
it,
and
we
want
as
less
surface
area
as
possible
right
from
a
pod
main
from
a
container
point
of
view.
A
But
the
other
thing
is
that,
like
box
to
d,
wouldn't
be
able
to
display
the
thing
that
we're
doing,
because
that
that
just
comes
in
as
numbers
like,
how
would
how
would
we
display
the
torque.
B
A
A
Correct
so
like
when,
when
a
real,
when,
when
real
people
that
build
real
video
games
for
a
real
living
for
their
real
families,
to
put
real
food
on
their
table,
what
do
they
do?
They
actually
build
like
an
extra
game
server
client
to
show
that
stuff
like
if
you're
building
you
know
the
next
shooter
game
like.
B
B
B
D
F
Way
is
it
let's
see
you're
sending
it
to
degrees
now
right.
A
Anything
it's
it
sends
a
negative
number
or
it
sends
negative
one
or
positive
one
for
either
the
up
down
or
the
left
right,
and
so
the
y
is
the
turning,
and
so
we
have
a.
We
have
a
negative
one
for
y.
We
multiply
by
the
force
multiplier
we
divide
by
two
and
then
that's
the
torque
that
we're
applying
to
the
body,
but
it
didn't
appear
that
it
was
rotating
it
the
correct
direction.
So
let
me
try
something
different.
D
A
A
A
Yeah,
so
so
the
part
of
the
challenge
that
I
was
trying
to
figure
out
was
basically
like
so
apply
torque.
If
we
go
back
to
the
box
to
d
reference,
apply
torque
effects
to
angular
velocity
without
affecting
the
linear
velocity
of
the
center
of
mass,
and
so
I
really
don't
think
apply.
Torque
is
like
the
thing
we
want
to
be
using.
We
really
do
want
to
be
applying
a
force,
but
the
challenge
is:
we
have
to
calculate
the
point
at
which
to
apply
the
force.
A
But
this
point
is
the
work
like
it's.
The
documentation
doesn't
make
sense
to
me.
It
says
the
world
position
of
the
point
of
the
application,
but
like
the
world
position,
meaning
the
position
in
the
actual
game
world
or
the
position
on
the
actual
object,
and
so
you
can
do
stuff
like
get
a
local
point
relative
to
the
body's
origin.
A
D
G
Common
problem
with
a
lot
of
game
development
right
is
like,
if
you're
looking
at
a
simulation
which
parts
need
to
be
simulated
and
which
parts
need
to
be
faked
and
for
most
things,
including
flight
sims,
they're
actually
faked.
Because
writing
a
series
of
control
programs
for
thrusters
and
simulating
those
thrusters
in
addition,
is
going
to
be
very
complicated
and
time
consuming
versus
just
saying
we're
just
going
to
apply
a
rotation
and
then
recalculate
physics
afterwards,
and
so
for
our
particular
circumstance.
We
may
want
to
avoid
as
much
you
know.
G
That's
not
going
to
actually
get
the
desired
result
that
a
user
is,
you
know
expecting,
so
your
thruster
is
going
to
have
to
ramp
over
time.
You're
going
to
have
to
modulate
that
you're
going
to
have
to
automatically
you
know,
handle
edge
cases
about
rotation
or
movement
where
the
user
is
kind
of
out
of
control.
The
ship
right,
like
those
are
all
things
to
consider
and
we
can
just
kind
of
throw
them
out
the
window
if
we
just
fake
it.
A
Build
changes
yeah.
Well,
no,
it
wouldn't
I
mean
faking,
it
would
just
require
designing
the
faker
math
and
so,
which
is
easier,
like
figuring
out
where
to
apply
the
force
on
the
body
or
writing
fake
math,
to
figure
out
how
quickly
to
turn
the
body
based
on
the
fact
that
the
player
is
pressing.
The
thrust
the
turn
button.
E
E
A
G
Yeah
I
mean
the
the
math
for
rotating
stuff
right
is,
is
pretty
relatively
simple
and
that's
not
the
the
issue
there
right.
It's.
If
we're
using
the
box
2d
force
and
all
this
other
stuff
right,
it
adds
a
lot
more
complications.
It
makes
things
a
lot
harder
to
control
and
we
can
do
it
right.
We
can
write
code
that
handles
thruster
simulation
and
knows
how
to
ramp
each
one
up
and
which
one
to
fire
when
based
on
user
input,
but
I
don't
know
that
we
need
to.
F
A
So
I
because
I
I
don't
know
the
answer-
it
seems
wrong
based
on
the
way
that
it's
working
and
so
given
the
fact
that
it's
not
behaving
in
a
way,
that's
expected.
A
Well,
I
it
already
appears
to
be
wrong,
so
I
think
trying
to
do
the
right
thing,
which
is
what
a
thruster
would
actually
do,
which
is
you
know,
apply
force
to
a
point
on.
The
thing
seems
like
the
logical
thing
to
do.
The
only
reason
I
did
apply
torque
was
because
it
was
a
proof
of
concept
like
okay.
This
will
make
it
turn
great
success
like
not
the
right
thing
to
do.
The
right
thing
to
do
is
apply
force.
The
question
is:
how
do
we
calculate
the
you
know?
A
Trying
to
figure
out
as
a
person
who
doesn't
know
how
to
debug
c
plus
what
world
point
means
then,
like
probably
it
would
take
roddy
like
10
minutes
to
actually
figure
it
out.
Since
he's
worked
with
this
before
you
know
what
I'm
saying
like
any
time,
I
do
something
it's
gonna
take
15
times
longer
than
it
would
take
somebody
that
actually
knows
what
they're
doing
or.
A
B
G
Yeah
and
in
this
case,
like
I
think,
you're
actually
right
on
if
you're
wanting
to
simulate
the
whole
thing
which
normally
like
I
don't
right
when
I
write
game
engine
stuff,
I
do
not
physics
simulate
everything.
I
don't
physics
simulate
movement,
I
only
physics
simulate
portions
of
it
that
need
to
you
know,
seem
realistic
or
interact
realistically
that
are
too
hard
to.
G
You
know,
write
a
ton
of
math
for
so
in
this
case,
like
I
just
be,
you
know,
setting
a
transform
right
on
that
on
that
rigid
body
multiple
times
a
frame
based
on
how
the
rotation
should
be
and
then
relying
on
the
physics
engine
just
to
do
collision
calculations
instead
of
full
movement.
But
if
you
want
to
do
full
movement,
I
would
say:
torque
is
correct
and
the
way
you
should
be
applying
it
is.
You
should
be
calculating
the
distance
like
rotation.
G
Wise
that's
needed
like,
however
many
you
know,
radians
or
whatever,
and
then
multiplying
that
by
the
torque
that
you
need,
and
then
you
should
be
interpolating
that
you
should
be
slurping
that
essentially
between
zero
torque,
maximum
torque
and
then
lowest
amount
of
torque
as
it's
getting
to
the
destination
point.
G
A
You
have
combined
many
many
many
design
tropes
into
that
description,
and
so
in
in
that,
if
we
were
actually
doing
a
simulation,
you
know
if
we
were
using
like
real
rocket
thrusters,
they
would
come
on
fairly
close
to
instantly
and
you
would
inevitably
end
up
overshooting
because
you
have
inertia
and
so
on
and
so
forth.
And
so
what
what
you're
describing
is
is
gamey
fake
physics,
even
in
what
sounded
like
an
attempt
to
describe
real
physics
like
well.
G
That's
kind
of
what
it
is
right,
you're
simulating
things
right,
so
you're
kind
of
into
that
rabbit
hole
of
how
much
do
you
have
to
simulate
to
get
this
to
play
nicely
right
and
my
answer
to
that
almost
always
is
don't
because
it's
a
lot
of
work
and
it's
very
time
consuming
unless
you're
getting
a
lot
of
gain
from
it.
There's
not
necessarily
a
reason
when
you
could
just
go
in
and
just
set
the
transformation.
A
G
It's
it's
the
same
three
lines
of
code,
no
matter
what
you're
doing
the
problem
is.
When
you
start
getting
into
simulating
physics,
you
have
to
write
additional
code
to
make
things
behave.
How
a
player
would
expect
it's!
Why?
If
you
stick
like,
you
know
a
firecracker
on,
you
know
a
little
paper
box
or
something
like
that
right.
It's
not
going
to
be
a
control
mechanism.
D
A
We're
not
writing
anything
to
simulate
physics
box.
2D
already.
Does
that
so
like
right?
Quite
literally,
it's
the
player
hit
the
button.
We've
already
decided
via
some
fake
back
of
the
envelope
math
like
what
the
force
should
be
so
just
apply
the
force
to
the
right
place
on
the
on
the
cylinder
and
it's
going
to
rotate
and
it'll
keep
rotating
until
they
press
the
other
button.
To
make
it
stop
rotating.
Can
I
take
a
shot
that
seems
very,
very
yeah.
Go
for
it
michael.
F
F
And
if
you
see
a
game
that
actually
applies
real
gravity,
it
looks
fake
because
it's
so
unnatural,
like
things
just
go
bam
they
hit.
They
hit
the
ground
so
far
so
hard
and
so
fast
or
if
it's
a
space
game
you
get
like
sucked
into
the
black
hole
way
faster
than
you
want
to,
and
so
it
it
just
feels
better
in
the
game
to
use
a
basic
acceleration
like
a
much
slower
acceleration
toward
a
point
than
than
like
true
gravity.
C
C
Like
that,
like
where
real
physics
would
would
not
make
for
fun
like
a
fun
play,
experience
like
and
I
mean
even
the
games
that
we've
written
are
like
the
flying
games
that
we've
written
like
tracer
and
tracer
and
zorbio
like
there's
zero
physics
in
either
of
those
games.
C
Total
control
of
how
you
would
want
your
user
experience
to
be
without
having
to
work
around
all
the
physics,
the
rigidness
of
like
true
physics,.
G
Right,
the
the
question
that
I'm
talking
about
here
is
like:
why
does
applying
torque
not
make
you
know
easy?
Turning
and
you
know
why
doesn't
it
feel
right
in
the
game
right
and
the
answer
to
that
is
because
you
have
to
do
math
in
between
to
make
that
apply
in
the
way
you
think
it
would
work
like
there's
there's
a
gap
between
you
know
what
you
would
expect
to
see
in
the
game
versus
how
physics
actually
work,
and
so
you
have
to
write
the
code
to
do
that.
Translation
for
the.
A
A
It's
like
opening
the
door
from
the
hinge
versus
opening
the
door
from
the
doorknob
like
apply.
Torque
is
opening
the
door
from
the
hinge
and
apply
force
is
opening
the
door
from
the
doorknob,
but
we
don't
actually
know
where
the
doorknob
is
to
apply
the
force.
A
If
you
say
so,
I
I
feel
like
we've
spent
more
time
debating
on
why
apply
torque
is,
is
or
is
not
the
right
thing
to
do
versus
like
we
could
have
written
the
three
lines
of
code
that
actually
did
the
right
thing,
but
whatever
we
could
write
a
fake
physics
engine
but
which
one
of
the
five
of
us
is
going
to
do
that
and
by
when.
C
C
Well,
no,
it's
not
it's!
Not!
Writing.
I
don't
think
we're
talking
about
writing
a
physics
engine.
It's
like
writing.
Your
your
game
play
to
kind
of
feel
like
you're
in
space,
but
it's
not
like
true
physics
or
like
it
could
be
as
simple
as
you
know,
you
putting
you're
putting
your
velocity
as
a
function
of
the
direction
that
you
place
times.
The
speed
like
you
know
like
whatever
that
speed
is
or
the
direction
is
you
start
going
in
that
direction
like
there's
it's
a
super
simple
mathematical
equation,
but
it's
not
physics.
It's
just
movement
like.
G
Yeah
I
mean
it's:
it's
the
difference
between
needing
to
write
we're
just
talking
about
here.
Eric
is,
if
you're,
applying
the
torque
right.
You
have
to
calculate
your
current
angle,
your
desired
angle
and
get
the
rotation
from
that
multiply
by
the
inertia
right
with
against
the
velocity
and
then
apply
that
torque
and
then
assumably
right.
You
might
have
to
tweak
that
a
little
bit
by
getting
something
closer
to
what
a
user
would
expect
versus
if
you're
not
doing
the
physics
thing
right,
all
you're
doing
is
using
set
transform.
G
That's
one
line
of
code
like
whatever
the
angle
is
that
you
want
to
rotate
the
ship
to
at
that
particular
frame.
You
just
set
transform
and
there's
no
physics
happening.
That's
all
we're
talking
about
is
the
difference
between
those
two
when
you're
talking
about
like
writing
code
and
making
it
work.
Does
that
make
sense.
A
A
And
so
right
now
like
I've,
I'm
the
one
who's
been
doing
most
of
the
work
for
this
stuff.
So
if
I
you
know,
I
I
don't
know
how
to
do
any
of
what
you
just
described,
but
I
can
read
documentation,
and
this
is
documented
so
like
I
can
make
something:
that's
not
fun
and
doesn't
play
well,
but
works
and.
E
B
D
A
B
B
So
maybe
with
five
minutes
or
maybe
two
hours
who
knows
you'd
be
able
to
identify,
or
I
would
be
able
to
identify
how
to
fix
it
to
do
to
act
as
we
expect
and
would
be
correct
according
to
like
what
we're
visually
seeing
right,
but
at
the
end
of
the
day,
that
might
not
still
be
fun.
That's
a
completely
independent
question
from
making
it
work
relatively
correctly
right,
yeah.
C
B
And
so
I
think
derek's
point
was
spot
on
in
that
like
physically
simulating
stuff,
does
take
some
effort
and
is
not
necessarily
doesn't
directly
equate
to
any
fun
factor
right.
But
I
also
agree
with
eric
in
that
we're
saying
the
code
we
have
here
that
he
wrote
is
pretty
close
to
working
and
with
a
little
bit
of
extra
effort
could
be
physically
accurate,
if
not
necessarily
fun,
and
I
think
the
the
small
window
of
taking
what
we
have
and
making
it
work
is
the
next
step.
C
Think
of
it
again,
another
example
like
there's
of
a
really
good
example.
I
can
think
of
a
mixture
of
real
physics
and
fake
physics
making
for
a
really
fun
game.
Experience
is
this
sailing
game
that
I'm
playing
like
where
it's
a
first
person
game
where
you're
on
a
boat
right
and
there's
a
really
cool
physics
simulation
with
the
waves
and
like
the
boat
and
the
boat
has
mass
and
stuff
and
it
moves.
C
You
know
it
stops
slowly
and
stuff,
but
if
you
drop
the
sails
and
you're
against
the
wind,
the
boat's
still
gonna
move
forward,
because
it
would
be
fun
if
the
boat
just
sat
there
like
in
real
physics
like
that
boat,
wouldn't
move,
would
do
nothing,
but
in
a
game,
you're
gonna
drop
the
sails.
You
wanna,
the
players,
that's
gonna
wanna
like
start
to
move,
so
that's
like.
So
they
have
to
fake
that
right.
That's
obviously
a
game
mechanic.
They
faked
around
the
real
physics
engine.
C
G
Yeah,
so
it's
fuzzy
because
it's
been
a
long
time
since
I've
watched
the
presentation,
but
I'm
pretty
sure
they
actually
do
very
little
physics
and
it's
actually
a
bunch
of
really
cool
immersion
tricks,
like
essentially
they're,
just
calculating
like
an
average
vector
based
on
the
wave
input
right
and
that's
just
a
sine
wave.
They
don't
even
like
use.
The
actual
geometry
so
like
what's
going
on,
is
just
like
an
approximation
of.
C
Yeah
yeah,
it's
a,
I
think,
it's
a
great
example
of
of
showing,
like
both
both
you
know,
using
both
fake
and
in
real
physics
for
making
a
really
fun
game.
Experience
like
okay,
it's
a
quite
fun
game.
I
like
it
a
lot
but
definitely
does
have
physics,
though,
and
that's
fine
with
collisions,
because
sometimes,
if
you
bump
into
something
the
wrong
way,
the
physics
engine
freaks
out
and
the
boat
goes
flying
like
100
feet
in
the
air
and
spin
through
the
sky.
C
C
B
E
B
Has
spent
extended
a
bunch
of
time
on
it
and
like
in
my
case,
I
haven't
expended
any
in
this
round
and
I
think
a
little
bit
of
time
and
attention
to
the
problem
would
help
solve
it.
A
I
mean
that
the
hackiest
solution
would
be.
Let
me
look
at
the
numbers
we
had
written
down.
A
I
don't
actually
remember
derek
what
you
like
how
fast
you
said.
You
wanted
the
ship
to
basically
be
able
to
turn
around,
and
so
the
hackiest
way
to
do.
That
is
to
just
take
that
number
and
then
divide
by
the
game,
tick
rate
and
then,
if
the
thruster's
on
in
whatever
direction
it
is
just
move
it
by
that
many
degrees,
yeah
and
then
like
there's,
no
inertia.
It's
just.
You
know.
G
G
B
So
did
we
have
some
rough
notes
refresh
my
memory?
Did
we
have
some
rough
notes
because
I
know
derek
you
had
some
specific
ideas
laid
out
in
our
previous
discussion
over
as
to
how
this
works
yeah.
G
B
A
A
Oh,
so
what
is
that?
It's
this?
It's
literally
the
same
problem
as
the
the
last
problem,
which
was
like
figuring
out.
G
A
D
A
A
B
A
B
A
B
E
C
C
A
C
We
should
try
to
mean
we
can
make
that
a
bit
simpler
process
it'd
be
nice
if
there
was
some
sort
of
like
reflection
in
in
c
plus
plus
or
something
where
you
could
just
add
it
to
a
constant
like
a
struct,
constant
struct
or
something,
and
then
it
just
shows
up
everywhere
else.
So
you
don't
have
to
add
these
specific.
This
set
of,
if
statements
that
we
have
here.
A
G
C
C
B
E
G
Second
and
we're
in
kind
of
a
weird
situation
too,
where
honestly,
I
couldn't
give
you
an
answer
if
it
would
be
faster
to
write
all
this
code
in
c
plus
plus
and
then
you
know,
add
client-side
prediction
later
and
that'll.
You
know
we'll
just
rely
on
like
low
latency
to
the
server
to
keep
things
functional,
because
this
is
a
demo
or
if
it
would
be
better
to
look
at
something
like
running
javascript
on
the
server
for
only
specifically
the
simulation
stuff.
So
we
can
write
code
once
and
then
deploy
it
to
both
client
and
server.
G
G
A
Of
time
all
right,
anybody
got
any
parting
thoughts
for
the
last
40
seconds
of
today.
Oh
geez.
B
Lots
of
work
to
do,
I
think,
is
the
parting
thought.
I
think
I
think
the
more
we
discuss
the
more.
We
realize,
of
course,
that
there
is
a
lot
of
work
that
goes
into
these
things
outside
of
just
our
core
knowledge
area
of
infrastructure
and
getting
things
deployed
on
openshift,
but
actually
building
something
that's
valuable
to
deploy
on
openshift.
To
begin
with
is
a
time-consuming
task
in
itself.