summaryrefslogtreecommitdiff
path: root/types.bmx
diff options
context:
space:
mode:
Diffstat (limited to 'types.bmx')
-rw-r--r--types.bmx228
1 files changed, 212 insertions, 16 deletions
diff --git a/types.bmx b/types.bmx
index 31cc433..caf62ad 100644
--- a/types.bmx
+++ b/types.bmx
@@ -10,16 +10,34 @@ Import noddybox.bitmapfont
Const MASSSIZE:Int=8
Const MASSRAD:Int=4
+Const SHIPSIZE:Int=12
+Const SHIPRAD:Int=6
+
+Type Lookup
+ Global si:Double[]
+ Global co:Double[]
+
+ Function Init()
+ si=New Double[360]
+ co=New Double[360]
+
+ For Local a:Int=0 To 359
+ si[a]=Sin(a)
+ co[a]=Cos(a)
+ Next
+ End Function
+End Type
Type GameGFX
Global font:TBitmapFont
Global smallfont:TBitmapFont
Global star:TImage
- Global mass:TImage
+ Global ship:TImage
Global collector:TImage
Global point:TImage
Global particle:Timage
Global pointer:TImage
+ Global shock:TImage
Global play_button:TImage
Global edit_button:TImage
@@ -29,17 +47,71 @@ Type GameGFX
Global left_button:TImage
Global right_button:TImage
Global scores_button:TImage
+ Global keys_button:TImage
End Type
-Type TMass
+Type GameConfig
+ Global kleft:Int
+ Global kright:Int
+ Global kthrust:Int
+ Global kreverse:Int
+ Global kblast:Int
+
+ Function Load()
+ Local s:TStream=ReadStream("ppinch.config")
+
+ If s=Null
+ kleft=KEY_O
+ kright=KEY_P
+ kthrust=KEY_Q
+ kreverse=KEY_A
+ kblast=KEY_SPACE
+ Return
+ EndIf
+
+ s=LittleEndianStream(s)
+
+ kleft=s.ReadInt()
+ kright=s.ReadInt()
+ kthrust=s.ReadInt()
+ kreverse=s.ReadInt()
+ kblast=s.ReadInt()
+
+ s.Close()
+ End Function
+
+ Function Save()
+ Local s:TStream=WriteStream("ppinch.config")
+
+ If s=Null
+ Return
+ EndIf
+
+ s=LittleEndianStream(s)
+
+ s.WriteInt(kleft)
+ s.WriteInt(kright)
+ s.WriteInt(kthrust)
+ s.WriteInt(kreverse)
+ s.WriteInt(kblast)
+
+ s.Close()
+ End Function
+EndType
+
+Type TGfxObject
Field x:Double
Field y:Double
+EndType
+
+Type TMass Extends TGfxObject
Field v:TVector
Field mass:Double
Field friend:Int
Field inverse:Int
Field img:TImage
Field swallow:Int
+ Field rad:Int
Method New()
v=TVector.Create()
@@ -49,6 +121,7 @@ Type TMass
friend=True
inverse=False
swallow=0
+ rad=MASSRAD
End Method
Method Attract(o:TMass)
@@ -70,15 +143,43 @@ Type TMass
v.Add(d)
- If d.Length()>MASSSIZE
- d.SetLength(MASSSIZE)
+ If v.Length()>MASSSIZE
+ v.SetLength(MASSSIZE)
EndIf
EndIf
End Method
- Method Move()
+ Method Move(wrap:Int)
x:+v.x
y:+v.y
+
+ If wrap
+ If x<0
+ x:+GraphicsWidth()
+ EndIf
+ If x>GraphicsWidth()
+ x:-GraphicsWidth()
+ EndIf
+ If y<0
+ y:+GraphicsHeight()
+ EndIf
+ If y>GraphicsHeight()
+ y:-GraphicsHeight()
+ EndIf
+ Else
+ If x<0
+ x=0
+ EndIf
+ If x>GraphicsWidth()
+ x=GraphicsWidth()
+ EndIf
+ If y<0
+ y=0
+ EndIf
+ If y>GraphicsHeight()
+ y=GraphicsHeight()
+ EndIf
+ EndIf
End Method
Method Draw()
@@ -89,11 +190,61 @@ Type TMass
End Type
-Type TPoint
+Type TShip Extends TMass
+ Field a:Int
+
+ Method New()
+ v=TVector.Create()
+ x=-1
+ y=-1
+ mass=25
+ friend=False
+ inverse=False
+ swallow=0
+ rad=SHIPRAD
+ a=0
+ End Method
+
+ Method RotateLeft()
+ a:-2
+ If a<0
+ a:+359
+ EndIf
+ End Method
+
+ Method RotateRight()
+ a=(a+2) Mod 360
+ End Method
+
+ Method Thrust()
+ v.x:+Lookup.si[a]*0.1
+ v.y:+Lookup.co[a]*-0.1
+ If v.Length()>MASSSIZE
+ v.SetLength(MASSSIZE)
+ EndIf
+ End Method
+
+ Method Reverse()
+ v.x:+Lookup.si[a]*-0.05
+ v.y:+Lookup.co[a]*0.05
+ If v.Length()>MASSSIZE
+ v.SetLength(MASSSIZE)
+ EndIf
+ End Method
+
+ Method Draw()
+ SetColor(255,255,255)
+ SetRotation(a)
+ DrawImage(img,x,y)
+ SetRotation(0)
+ swallow=0
+ End Method
+End Type
+
+
+Type TPoint Extends TGfxObject
Global img:TImage
- Field x:Double
- Field y:Double
Field lx:Double
Field ly:Double
Field v:TVector
@@ -124,7 +275,7 @@ Type TPoint
Local d:TVector=TVector.Create(o.x-x,o.y-y)
Local l:Double=d.Length()
- If l<MASSRAD
+ If l<o.rad
If o.friend
dead=True
Else
@@ -143,24 +294,39 @@ Type TPoint
v.Add(d)
- If d.Length()>MASSRAD
- d.SetLength(MASSRAD)
+ If v.Length()>MASSRAD
+ v.SetLength(MASSRAD)
EndIf
EndIf
Return dead
End Method
- Method Move()
+ Method Move(wrap:Int=False)
If (Not dead) And (Not lost)
lx=x
ly=y
x:+v.x
y:+v.y
- If x<0 Or y<0 Or x>GraphicsWidth() Or y>GraphicsHeight()
- lost=True
- TParticleMachine.AddLost(Self)
+ If wrap
+ If x<0
+ x:+GraphicsWidth()
+ EndIf
+ If x>GraphicsWidth()
+ x:-GraphicsWidth()
+ EndIf
+ If y<0
+ y:+GraphicsHeight()
+ EndIf
+ If y>GraphicsHeight()
+ y:-GraphicsHeight()
+ EndIf
+ Else
+ If x<0 Or y<0 Or x>GraphicsWidth() Or y>GraphicsHeight()
+ lost=True
+ TParticleMachine.AddLost(Self)
+ EndIf
EndIf
EndIf
End Method
@@ -176,6 +342,7 @@ End Type
Type TParticle
Global img:TImage
+ Field parent:TGfxObject
Field x:Double
Field y:Double
Field a:Double
@@ -228,6 +395,21 @@ Type TParticle
Return o
End Function
+ Function Angular:TParticle(x:Int, y:Int, a:Int, sp:Double, r:Int, g:Int, b:Int, al:Double, ali:Double, parent:TGfxObject)
+ Local o:TParticle=New TParticle
+ o.parent=parent
+ o.x=x
+ o.y=y
+ o.dx=sp*Lookup.si[a]
+ o.dy=sp*Lookup.co[a]
+ o.r=r
+ o.g=g
+ o.b=b
+ o.a=al
+ o.ai=ali
+ Return o
+ End Function
+
Method Update()
x:+dx
y:+dy
@@ -236,7 +418,12 @@ Type TParticle
If a>0
SetAlpha(a)
SetColor(r,g,b)
- DrawImage(img,x,y)
+
+ If parent
+ DrawImage(img,parent.x+x,parent.y+y)
+ Else
+ DrawImage(img,x,y)
+ EndIf
EndIf
End Method
End Type
@@ -271,6 +458,15 @@ Type TParticleMachine
Next
End Function
+ Function AddShockwave(o:TGfxObject)
+ For Local a:Int=0 To 359
+ list.AddLast(TParticle.Angular(0,0,a,1.0,255,255,0,1,-0.01,o))
+ list.AddLast(TParticle.Angular(0,0,a,Rnd(0.8,1.2),255,0,0,1,-0.01,o))
+ list.AddLast(TParticle.Angular(0,0,a,Rnd(0.8,1.2),255,0,0,1,-0.01,o))
+ list.AddLast(TParticle.Angular(0,0,a,Rnd(0.8,1.2),255,0,0,1,-0.01,o))
+ Next
+ End Function
+
Function Process()
Local l:TLink=list.FirstLink()
Local t:TLink