# HG changeset patch # User nemo # Date 1257186298 0 # Node ID f777ac80ffefe514f2dc4014de7582ab6a7464ea # Parent 41b46f83d088871528d8a0a368b1fa10f564452d A basic Spidey hat, leave hat on when roping. diff -r 41b46f83d088 -r f777ac80ffef hedgewars/uGears.pas --- a/hedgewars/uGears.pas Sun Nov 01 17:19:55 2009 +0000 +++ b/hedgewars/uGears.pas Mon Nov 02 18:24:58 2009 +0000 @@ -781,7 +781,7 @@ var i, t: LongInt; amt: TAmmoType; hx, hy, cx, cy, tx, ty, sx, sy, m: LongInt; // hedgehog, crosshair, temp, sprite, direction - lx, ly, dx, dy, ax, ay, aAngle, dAngle: real; // laser, change + lx, ly, dx, dy, ax, ay, aAngle, dAngle, hAngle: real; // laser, change defaultPos, HatVisible: boolean; VertexBuffer: array [0..1] of TVertex2f; begin @@ -928,10 +928,12 @@ if Gear^.X < CurAmmoGear^.X then begin dAngle:= 0; + hAngle:= 180; i:= 1 end else begin dAngle:= 180; + hAngle:= 0; i:= -1 end; sx:= hwRound(Gear^.X) + WorldDx; @@ -941,6 +943,10 @@ 1, 0, DxDy2Angle(CurAmmoGear^.dY, CurAmmoGear^.dX) + dAngle); + with PHedgehog(Gear^.Hedgehog)^ do + if (HatTex <> nil) then + DrawRotatedTextureF(HatTex, 1.0, -1.0, -6.0, sx, sy, 0, i, 32, + i*DxDy2Angle(CurAmmoGear^.dY, CurAmmoGear^.dX) + hAngle); defaultPos:= false end; gtBlowTorch: begin @@ -1036,7 +1042,6 @@ 1, 0); HatVisible:= true; - HatVisible:= true; defaultPos:= false end else diff -r 41b46f83d088 -r f777ac80ffef hedgewars/uStore.pas --- a/hedgewars/uStore.pas Sun Nov 01 17:19:55 2009 +0000 +++ b/hedgewars/uStore.pas Mon Nov 02 18:24:58 2009 +0000 @@ -37,6 +37,7 @@ procedure DrawSurfSprite(X, Y, Height, Frame: LongInt; Source: PTexture); procedure DrawTexture(X, Y: LongInt; Texture: PTexture); procedure DrawTextureF(Texture: PTexture; Scale: GLfloat; X, Y, Frame, Dir, Frames: LongInt); +procedure DrawRotatedTextureF(Texture: PTexture; Scale, OffsetX, OffsetY: GLfloat; X, Y, Frame, Dir, Frames: LongInt; Angle: real); procedure DrawRotated(Sprite: TSprite; X, Y, Dir: LongInt; Angle: real); procedure DrawRotatedF(Sprite: TSprite; X, Y, Frame, Dir: LongInt; Angle: real); procedure DrawRotatedTex(Tex: PTexture; hw, hh, X, Y, Dir: LongInt; Angle: real); @@ -456,7 +457,64 @@ begin glPushMatrix; glTranslatef(X, Y, 0); -glScalef(Scale, Scale, 1.0); + +if Dir < 0 then + hw:= - 16 +else + hw:= 16; + +ft:= Frame / Frames * Texture^.ry; +fb:= (Frame + 1) / Frames * Texture^.ry; + +glBindTexture(GL_TEXTURE_2D, Texture^.id); + +VertexBuffer[0].X:= -hw; +VertexBuffer[0].Y:= -16; +VertexBuffer[1].X:= hw; +VertexBuffer[1].Y:= -16; +VertexBuffer[2].X:= hw; +VertexBuffer[2].Y:= 16; +VertexBuffer[3].X:= -hw; +VertexBuffer[3].Y:= 16; + +TextureBuffer[0].X:= 0; +TextureBuffer[0].Y:= ft; +TextureBuffer[1].X:= Texture^.rx; +TextureBuffer[1].Y:= ft; +TextureBuffer[2].X:= Texture^.rx; +TextureBuffer[2].Y:= fb; +TextureBuffer[3].X:= 0; +TextureBuffer[3].Y:= fb; + +glEnableClientState(GL_VERTEX_ARRAY); +glEnableClientState(GL_TEXTURE_COORD_ARRAY); + +glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); +glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); +glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); + +glDisableClientState(GL_TEXTURE_COORD_ARRAY); +glDisableClientState(GL_VERTEX_ARRAY); + + +glPopMatrix +end; + +procedure DrawRotatedTextureF(Texture: PTexture; Scale, OffsetX, OffsetY: GLfloat; X, Y, Frame, Dir, Frames: LongInt; Angle: real); +var ft, fb: GLfloat; + hw: LongInt; + VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; +begin +glPushMatrix; +glTranslatef(X, Y, 0); + +if Dir < 0 then + glRotatef(Angle, 0, 0, -1) +else + glRotatef(Angle, 0, 0, 1); + +glTranslatef(Dir*OffsetX, OffsetY, 0); +glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); if Dir < 0 then hw:= - 16 diff -r 41b46f83d088 -r f777ac80ffef share/hedgewars/Data/Graphics/Hats/spidey.png Binary file share/hedgewars/Data/Graphics/Hats/spidey.png has changed