summaryrefslogtreecommitdiff
path: root/level.bmx
diff options
context:
space:
mode:
Diffstat (limited to 'level.bmx')
-rw-r--r--level.bmx80
1 files changed, 60 insertions, 20 deletions
diff --git a/level.bmx b/level.bmx
index 95aba16..c7e3e4b 100644
--- a/level.bmx
+++ b/level.bmx
@@ -10,7 +10,7 @@ Import noddybox.bitmapfont
Import noddybox.algorithm
Import "types.bmx"
-Const MAGIC:String="PPINCH0.0"
+Const MAGIC:String="PPINCH_0001"
Const MAX_GRAV:Int=10
Const MAX_POINT:Int=1000
@@ -47,6 +47,7 @@ Type TGravPoint
m.x=x
m.y=y
m.inverse=repel
+ Return m
End Method
Function FromStream:TGravPoint(s:TStream)
@@ -75,27 +76,50 @@ Type TPointLine
Field y2:Float
Field gap:Int
Field v:TVector
+ Field circle:Int
+ Field circvel:Float
Method New()
v=TVector.Create()
+ gap=1
+ circle=False
+ circvel=1
End Method
Method CreatePoints(l:TList)
- Local line:TList=DoLine(x1,y1,x2,y2)
- Local n:Int=line.Count()
- Local i:Int=0
-
- For Local p:TAlgoPoint=EachIn line
- If (i Mod gap)=0
- Local tp:TPoint=New TPoint
- tp.x=p.x
- tp.y=p.y
- tp.v.x=v.x
- tp.v.y=v.y
- l.AddLast(tp)
- EndIf
- i:+1
- Next
+ If circle
+ Local p:TAlgoPoint[]=DoCircle(x1,y1,Abs(x2-x1))
+ Local i:Int=0
+
+ For Local f:Int=0 To 359
+ If (i Mod gap)=0
+ Local tp:TPoint=New TPoint
+ tp.x=p[f].x
+ tp.y=p[f].y
+ tp.v.x=Sin(f+90)*circvel
+ tp.v.y=Cos(f+90)*circvel
+ tp.v.Add(v)
+ l.AddLast(tp)
+ EndIf
+ i:+1
+ Next
+ Else
+ Local line:TList=DoLine(x1,y1,x2,y2)
+ Local n:Int=line.Count()
+ Local i:Int=0
+
+ For Local p:TAlgoPoint=EachIn line
+ If (i Mod gap)=0
+ Local tp:TPoint=New TPoint
+ tp.x=p.x
+ tp.y=p.y
+ tp.v.x=v.x
+ tp.v.y=v.y
+ l.AddLast(tp)
+ EndIf
+ i:+1
+ Next
+ EndIf
End Method
Function FromStream:TPointLine(s:TStream)
@@ -105,8 +129,10 @@ Type TPointLine
o.x2=s.ReadFloat()
o.y2=s.ReadFloat()
o.gap=s.ReadInt()
- o.v.x=s.ReadInt()
- o.v.y=s.ReadInt()
+ o.v.x=s.ReadFloat()
+ o.v.y=s.ReadFloat()
+ o.circle=s.ReadInt()
+ o.circvel=s.ReadFloat()
Return o
End Function
@@ -116,8 +142,10 @@ Type TPointLine
s.WriteFloat(x2)
s.WriteFloat(y2)
s.WriteInt(gap)
- s.WriteInt(v.x)
- s.WriteInt(v.y)
+ s.WriteFloat(v.x)
+ s.WriteFloat(v.y)
+ s.WriteInt(circle)
+ s.WriteFloat(circvel)
End Method
End Type
@@ -129,6 +157,8 @@ Type TLevel
Field winpercent:Int
Field timer:Int
Field invmass:Int
+ Field placemass:Float
+ Field placefriend:Int
Method New()
grav=CreateList()
@@ -138,6 +168,8 @@ Type TLevel
winpercent=50
timer=60
invmass=False
+ placemass=25
+ placefriend=True
End Method
Method CreatePlayfield(masslist:TList, pointlist:TList)
@@ -158,6 +190,8 @@ Type TLevel
o.winpercent=s.ReadInt()
o.timer=s.ReadInt()
o.invmass=s.ReadInt()
+ o.placemass=s.ReadFloat()
+ o.placefriend=s.ReadInt()
c=s.ReadInt()
For Local f:Int=1 To c
@@ -178,6 +212,9 @@ Type TLevel
s.WriteInt(winpercent)
s.WriteInt(timer)
s.WriteInt(invmass)
+ s.WriteFloat(placemass)
+ s.WriteInt(placefriend)
+
s.WriteInt(grav.Count())
For Local o:TGravPoint=EachIn grav
o.ToStream(s)
@@ -193,6 +230,7 @@ End Type
Type TLevelSet
Field name:String
Field level:TList
+ Field stamp:String
Method New()
level=CreateList()
@@ -216,6 +254,7 @@ Type TLevelSet
TLevelException.Error(file + " doesn't appear to be a valid file for this version")
EndIf
+ o.stamp=s.ReadLine()
o.name=s.ReadLine()
c=s.ReadInt()
@@ -236,6 +275,7 @@ Type TLevelSet
EndIf
s.WriteLine(MAGIC)
+ s.WriteLine(CurrentDate()+CurrentTime())
s.WriteLine(name)
s.WriteInt(level.Count())
For Local o:TLevel=EachIn level