Me estoy volviendo loco, no se por qué me da error, os cuento.
Estoy intentando hacer una explosión, hasta aquí todo bien, el problema viene cuando me meto a tocar código, mirad:
Código Delphi
[-]GLfireFXManager1.RingExplosion(8,10,5,XVector,YVector);
donde XVector e YVector son de tipo TAffineFltVector.
Intento compilar y me da el siguiente error:
[Error] Unit1.pas(46): Incompatible types: 'TVector3f' and 'TAffineFltVector'
Me voy a ver como está hecha la función RingExplosion con Crt + Botón izquierdo del ratón y está así:
Código Delphi
[-]
procedure TGLFireFXManager.RingExplosion(minInitialSpeed, maxInitialSpeed, lifeBoostFactor : Single;
const ringVectorX, ringVectorY : TAffineVector;
nbParticles : Integer = -1);
var
n : Integer;
tmp, refPos : TVector;
fx, fy, d : Single;
begin
if nbParticles<0 then n:=MaxInt else n:=nbParticles;
if Assigned(Reference) then
refPos:=Reference.AbsolutePosition
else refPos:=NullHmgPoint;
while (NPand (n>0) do begin
fx:=Random-0.5;
fy:=Random-0.5;
d:=RSqrt(Sqr(fx)+Sqr(fy));
PAffineVector(@tmp)^:=VectorCombine(ringVectorX, ringVectorY, fx*d, fy*d);
tmp[3]:=1;
ScaleVector(tmp, minInitialSpeed+Random*(maxInitialSpeed-minInitialSpeed));
with FFireParticles[NP] do begin
Position:=VectorAdd(refPos, VectorMake((2*Random-1)*FireRadius, (2*Random-1)*FireRadius, (2*Random-1)*FireRadius));
Speed:=tmp;
TimeToLive:=ParticleLife*(Random*0.5+0.5)*lifeBoostFactor;
LifeLength:=TimeToLive;
Alpha:=FireDensity;
end;
Inc(NP);
Dec(n);
end;
end;
El caso es que no se por qué me da el error, se supone que no debería de dar error ya que si me voy a mi unidad Geometry.pas Version 2.6 tengo que:
Código Delphi
[-]TAffineVector = TAffineFltVector;
y
Código Delphi
[-]TVector3f = TAffineFltVector;
Además he mirado por internet y todos usan la función RingExplosion de esa forma pero a ellos se ve que no les da error. ¿Alguna idea?. Me estoy desquiciando. Gracias.
EDITO: Me he bajado una demo que hace uso de la función, mañana lo miro y os cuento. Saludos.
EDITO2: Lo he mirado por encima y creo que el fallo está en usar la unit Geometry.pas en vez de la unit VectorGeometry.pas. Saludos.
EDITO3: En efecto ese era el problema, ya tengo la aplicación montada, además si usais un archivo con extensión 3ds os debeis de asegurar de poner la unidad GLFile3DS en la claúsula uses de vuestro programa.