Problem with my enemy

BlitzMax Forums/BlitzMax Beginners Area/Problem with my enemy

Lillpeter(Posted 2005) [#1]
Iīm currently trying to create an enemy for my game that is going to look like a flying saucer with a big gun under it, i create it like two objects, one body end one gun and then i add them both to a list for updating and rendering.

My problem is: how do i get the gun object to follow along with the body object as long as the body is alive, when i kill the body the gun is going to freak out and have its own move and shoot methods but as long as the body is not dead it should be controlled (or whatever) by the body. And of cource if i could kill the gun first to make the body more or less defenseless.

I donīt even know if itīs a good idea to make this enemy in two objects, maybe you have a better idea.
And what happens when i have several ones of this type active at the same time, i guess the guns have to know wich body they belong to.

Thanks for any help on this.


klepto2(Posted 2005) [#2]
I don't know if there is a better way, but maybe something like this:
Type TEnemy
	Field Gun:TGun
	Field Body:Tbody
	'... Create Functions  and stuff here
	
	Method Move(X:Int)
		If Body And Gun Then
			Body.x:+X
			Gun.X:+x
		ElseIf Body And Not Gun
			Body.x:+X
		ElseIf Not Body And Gun
			Gun.X:+1
		EndIf
	End Method
End Type

Type TGun
	Field Life:Int
	Field x:Int
	Field Y:Int
	Field Image:TImage
End Type

Type TBody
	Field Life:Int
	Field X:Int
	Field Y:Int
	Field Image:TImage
End Type



deps(Posted 2005) [#3]
I would do something like this:

type Tenemy 
    field x, y
    method draw()
    ' ... and so on ...
endtype

type Tsaucer extends Tenemy
    method update()
        ' Move the body
    endmethod
endtype

type Tsaucer_gun extends Tenemy
    field body:Tenemy
    method update()
        if body then
            ' follow body
            x = body.x
            y = body.y
        else
            ' freak out
            x = x - 10 + rand(0,20)
            y = y - 3 + rand(0,6)
        endif
    endmethod
endtype


local ship:tsaucer = new tsaucer
local gun:tsaucer_gun = new tsaucer_gun
gun.body = ship



FlameDuck(Posted 2005) [#4]
Type ASprite Abstract
	Field xPos:Double , yPos:Double
	Field image:TImage , frame:Int , maxFrame:Int

	Method move( xSpeed:Double , ySpeed:Double )
		xPos:+xSpeed
		yPos:+ySpeed
	EndMethod

	Method draw()
		DrawImage image , xPos, yPos , frame
		frame:+1
		frame:Mod maxFrame
	EndMethod
	
	'..whatever other methods you think are nessecary..
EndType

Type TFuselage Extends ISprite
	Field myGun:ISprite
	
	Method move( xSpeed:Double , ySpeed:Double )
		Super.move( xSpeed:Double , ySpeed:Double )
		myGun.move( xSpeed:Double , ySpeed:Double )
	EndMethod
	'..You get the idea..
EndType

Type TGun Extends ISprite
	'..whatever fields you need for the gun
EndType

Local myShip:TFuselage = New TFuselage
myShip.image = LoadAnimImage("ufo.png" , 128 , 64 , 0 , 40)
myShip.maxFrame = 40
myShip.yPos = Rand( 0 , 400 )

myShip.myGun = New TGun
myShip.myGun.image = LoadAnimImage("gunpic.png" , 64 , 64 , 0 , 4)
myShip.myGun.maxFrame = 4
myShip.myGun.yPos = myShip.yPos + 64
Or something to that effect.