ok i have joined them together but ran into some other problem, i am using physics for collisions with tanks/walls , which means that a tank could in effect push another tank if they are both dynamic(i set the physics gravity to zero so they won's drop of course) but this pushing effect from physics collision does not update on both screens!
I have attached my project media file with the level data in it and this is the code so far:
rem
rem AGK Application
rem
rem Landscape App
SetDisplayAspect( 1024.0 / 600.0 )
global swidth = 3
global sheight = 2
global pointer = 900
global bricklimit=800
global brickcount = 0
loadimage(1,"redbrick.png")
loadimage(2,"greenbrick.png")
loadimage(3,"bluebrick.png")
SetClearColor(180,180,180)
SetPhysicsGravity( 0,0)
type TConfig
HostIP$
Port
endtype
Global Config as TConfig
Config.HostIP$="192.168.0.100"
Config.Port=1026
type TTank
Score
Lives
Health
Spr
StartX as float
StartY as float
endtype
dim Tank[2] as TTank
type mybrick
xloc as integer
yloc as integer
imagenum as integer
spritenumber as integer
sizex as integer
sizey as integer
physicstype as integer
bangle as integer
endtype
dim brick[800] as mybrick
SetPhysicsDebugOn()
clear_level()
load_level()
MainLoop()
end
function MainLoop()
netid=NetworkLobby()
//Make Sprites
CreateTank(1,30-25,50,255,0,0,1.0,"tank.png")
CreateTank(2,60+6,50,0,255,0,2.0,"tank.png")
//autoselect tank if Server or Client
if GetNetworkServerID(netid)=GetNetworkMyClientID(netid)
player=1
else
player=2
endif
//Exit Button
addvirtualbutton(1,50,10,10)
setvirtualbuttontext(1,"Exit")
//Make Screen Joystick
addvirtualjoystick(1,10,90,5)
do
//Exit Button
if getvirtualbuttonpressed(1) =1
exit
Endif
l#=Input(player)
if l#>0 then SendUpdate(netid,player)
Hud(player)
GetUpdate(netid)
Sync()
loop
endfunction
function Hud(player)
print("Score: "+str(Tank[player].Score))
print("Lives: "+str(Tank[player].Lives))
print("Health: "+str(Tank[player].Health))
endfunction
function Input(player)
spr=Tank[player].spr
//Virtual Joystick Input axis x,y
tx#=getvirtualjoystickx(1)
ty#=getvirtualjoysticky(1)
//position before
x1#=getspritexbyoffset(spr)
y1#=getspriteybyoffset(spr)
//after
x2#=getspritexbyoffset(spr)+tx#
y2#=getspriteybyoffset(spr)+ty#
//in screen 0-100 %
x2#=Limit(x2#,0,100)
y2#=Limit(y2#,0,100)
//set new sprite position
setspritepositionbyoffset(spr,x2#,y2#)
//difference before / after
dx#=x2#-x1#
dy#=y2#-y1#
//lenght between before after
l#=sqrt(dx#*dx# + dy#*dy#)
if l#>0 then setspriteangle(spr,atanfull(dx#,dy#)) //set new angle
endfunction l#
function Limit(a#,min#,max#)
if a#<min# then exitfunction min#
if a#>max# then exitfunction max#
endfunction a#
function SendUpdate(netid,player)
//send player nr,x,y,angle to all expect self
messageId = CreateNetworkMessage()
spr=Tank[player].spr
x#=getspritex(spr)
y#=getspritey(spr)
AddNetworkMessageinteger(messageId,player)
AddNetworkMessageFloat(messageId,x#)
AddNetworkMessageFloat(messageId,y#)
AddNetworkMessageFloat(messageId,getspriteangle(spr))
SendNetworkMessage(netid,0,messageId)
endfunction
function GetUpdate(netid)
//read all network messages
//player nr, x, y, angle
do
messageId = GetNetworkMessage (netid)
if messageId=0 then exit
player = GetNetworkMessageinteger(messageId)
x# = GetNetworkMessageFloat(messageId)
y# = GetNetworkMessageFloat(messageId)
a# = GetNetworkMessageFloat(messageId)
spr=Tank[player].spr
setspritepositionbyoffset(spr,x#,y#)
setspriteangle(spr,a#)
DeleteNetworkMessage(messageId)
loop
endfunction
Function CreateTank(Nr,x,y,r,g,b,mass,filename$)
//make sprite , the image must be look up
img=LoadImage(filename$)
CreateSprite (Nr+800,img)
SetSpriteSize(Nr+800,4,-1)
setspritecolor(Nr+800,r,g,b,255)
setSpritePhysicsOn(Nr+800,2)
setspritephysicsmass(Nr+800,mass)
Tank[Nr].Spr=Nr+800
Tank[Nr].StartX=x
Tank[Nr].StartY=y
PlayerReset(Nr)
EndFunction
function PlayerReset(player)
Tank[player].Score=0
Tank[player].Lives=3
Tank[player].Health=100
setspritepositionbyoffset(Tank[player].Spr,Tank[player].StartX,Tank[player].StartY)
EndFunction
function NetworkLobby()
//make two buttons
addvirtualbutton(1,10,20,10)
setvirtualbuttontext(1,"Host")
addvirtualbutton(2,30,20,10)
setvirtualbuttontext(2,"Client")
do
//Host Button
if getvirtualbuttonpressed(1) =1
netid = HostNetwork("MyTankNetwork","Host",Config.Port)
exit
Endif
//Client Button
if getvirtualbuttonpressed(2) = 1
netid = JoinNetwork("MyTankNetwork","Client")
//netid = JoinNetwork( Config.HostIP$, Config.Port, "Client" )
exit
Endif
sync()
loop
//delete the two buttons
deletevirtualbutton(1)
deletevirtualbutton(2)
//return the network id for later use
EndFunction netid
`*********************************************** Clear Function *********************************
function clear_level
brickcount = 0
mode = 0
physicsmod = 1
usedel = 0
for p=1 to bricklimit
if getspriteexists(p)
deletesprite(p)
endif
brick[p].xloc = 0
brick[p].yloc = 0
brick[p].imagenum = 0
brick[p].spritenumber = 0
brick[p].sizex = 0
brick[p].physicstype = 0
brick[p].bangle = 0
next p
print ("cleared")
sync()
endfunction
`************************************************************************************************
function load_level()
myfile = OpenToread("Test2.dat")
`brickcount = readinteger (myfile)
for n = 1 to bricklimit
xl = readinteger (myfile)
yl = readinteger (myfile)
im = readinteger (myfile)
sn= readinteger (myfile)
sx = readinteger (myfile)
sy = readinteger (myfile)
psm = readinteger (myfile)
ba=readinteger (myfile)
brick[n].xloc = xl
brick[n].yloc = yl
brick[n].imagenum = im
brick[n].spritenumber = sn
brick[n].sizex = sx
brick[n].sizey = sy
brick[n].physicstype = psm
brick[n].bangle = ba
if brick[n].spritenumber <> 0
inc brickcount
createsprite (brickcount,brick[n].imagenum)
SetSpriteGroup ( brickcount,brickgroup)
setspritesize(brickcount,sx,sy)
setspriteangle(brickcount,brick[n].bangle)
setspriteposition(brickcount,brick[n].xloc,brick[n].yloc)
if brick[n].physicstype >0
setSpritePhysicsOn(brickcount,1)
setspritephysicsmass(brickcount,10.0)
endif
endif
next n
closefile (myfile)
print("loaded!!")
sync()
endfunction
I had to modify some of your previous code to coincide with the way the level editor makes the data file as far as what numbers sprites are assigned to
Hail to the king, baby!