Yes, long ago. AFAIR you were the person who commited that for me - thanks
:)

RCL

On Fri, Feb 22, 2008 at 2:04 PM, yeKcim <[EMAIL PROTECTED]> wrote:

> Does this patch applied ?
>
> yeKcim
>
>
>
>
> RCL a écrit :
> > Hello,
> >
> > sorry for spamming the list again, but since I have no svn commit
> > access (my bad... got lost with multiple ssh keys), that's the only
> > way to commit patches for me for now :)
> >
> > Here's a small patch that makes cluster bomb useful. For me,
> > everything it did before is slightly larger "bang", with occasional
> > single splinter. Now it produces correct number of fragments.
> >
> > Tested against revision 4034 (the latest one at the moment of writing
> this).
> >
> > Patch is available here:
> http://rcl.mine.nu/outbound/wormux/cluster_bomb.diff
> > Or, alternatively, at the end of this mail.
> >
> > By the way, who is in charge of weapon logic? I'd like to ask that
> > person some questions :)
> >
> > Best regards,
> > Dmitry 'RCL' Rekman
> >
> >
> >
> > Index: src/weapon/cluster_bomb.cpp
> > ===================================================================
> > --- src/weapon/cluster_bomb.cpp (revision 4034)
> > +++ src/weapon/cluster_bomb.cpp (working copy)
> > @@ -34,6 +34,7 @@
> >  #include "tool/math_tools.h"
> >  #include "tool/i18n.h"
> >  #include "tool/xml_document.h"
> > +#include "game/time.h"
> >
> >  class ClusterBombConfig : public ExplosiveWeaponConfig
> >  {
> > @@ -49,12 +50,14 @@
> >  Cluster(ClusterBombConfig& cfg,
> >  WeaponLauncher * p_launcher);
> >  void Refresh();
> > - void Shoot(int n_x, int n_y);
> > + void Shoot(const Point2i & pos, double strength, double angle);
> >  virtual void SetEnergyDelta(int delta, bool do_report = true);
> >
> >  protected:
> > - void SignalOutOfMap();
> > - void DoExplosion();
> > + virtual void SignalTimeout();
> > + virtual void SignalOutOfMap();
> > + virtual void DoExplosion();
> > + virtual void Draw();
> >  };
> >
> >  class ClusterBomb : public WeaponProjectile
> > @@ -77,19 +80,35 @@
> >  explode_colliding_character = true;
> >  }
> >
> > -void Cluster::Shoot (int x, int y)
> > +void Cluster::Shoot(const Point2i & pos, double strength, double angle)
> >  {
> > + SetCollisionModel( false, true, false ); // a bit hackish...
> > + // we do need to collide with objects, but if we allow for this, the
> clusters
> > + // will explode on spawn (because of colliding with each other)
> > +
> > + begin_time = Time::GetInstance()->Read();
> >  Camera::GetInstance()->FollowObject(this, true);
> >  ResetConstants();
> > - SetXY( Point2i(x, y) );
> > + SetXY( pos );
> > + SetSpeed(strength, angle);
> >  }
> >
> >  void Cluster::Refresh()
> >  {
> >  WeaponProjectile::Refresh();
> > - image->SetRotation_rad(GetSpeedAngle());
> > + // make it rotate
> > + uint time = Time::GetInstance()->Read();
> > + float flying_time = ( float )( time - begin_time );
> > + const float rotations_per_second = 4;
> > + image->SetRotation_rad( rotations_per_second * 2 * M_PI *
> > flying_time / 1000.0f );
> >  }
> >
> > +void Cluster::Draw()
> > +{
> > + // custom Draw() is needed to avoid drawing timeout on top of clusters
> > + image->Draw(GetPosition());
> > +};
> > +
> >  void Cluster::SignalOutOfMap()
> >  {
> >  WeaponProjectile::SignalOutOfMap();
> > @@ -101,7 +120,11 @@
> >  }
> >
> >  void Cluster::SetEnergyDelta(int /* delta */, bool /* do_report */){};
> > +// because of game mechanics, clusters will inherit timeout from its
> > parent bomb,
> > +// and as such, will explode right after launch - something we don't
> want
> > +void Cluster::SignalTimeout(){};
> >
> > +
> >
>  
> //-----------------------------------------------------------------------------
> >
> >  ClusterBomb::ClusterBomb(ClusterBombConfig& cfg,
> > @@ -126,17 +149,24 @@
> >
> >  void ClusterBomb::DoExplosion()
> >  {
> > - const uint nb = static_cast<ClusterBombConfig &>(cfg).nb_fragments;
> > + WeaponProjectile::DoExplosion();
> > +
> > + const uint fragments = static_cast<ClusterBombConfig
> &>(cfg).nb_fragments;
> >  Cluster * cluster;
> > - for (uint i=0; i<nb; ++i) {
> > - double angle = randomSync.GetDouble(2.0 * M_PI);
> > - int x = GetX()+(int)(cos(angle) * (double)cfg.blast_range * 0.9);
> > - int y = GetY()+(int)(sin(angle) * (double)cfg.blast_range * 0.9);
> > +
> > + const float angle_range = M_PI / 2;
> > + Point2i pos = GetPosition();
> > + for (uint i = 0; i < fragments; ++i )
> > + {
> > + double angle = -M_PI / 2; // this angle is "upwards" here
> > + double cluster_deviation = angle_range * i / ( float )fragments -
> > angle_range / 2.0f;
> > + double speed = randomSync.GetDouble(10, 25);
> > +
> >  cluster = new Cluster(static_cast<ClusterBombConfig &>(cfg), launcher);
> > - cluster->Shoot(x,y);
> > + cluster->Shoot( pos, speed, angle + cluster_deviation );
> > +
> >  lst_objects.AddObject(cluster);
> >  }
> > - WeaponProjectile::DoExplosion();
> >  }
> >
> >  void ClusterBomb::SetEnergyDelta(int /* delta */, bool /* do_report
> */){};
> >
> > _______________________________________________
> > Wormux-dev mailing list
> > Wormux-dev@gna.org
> > https://mail.gna.org/listinfo/wormux-dev
> >
>
>
> _______________________________________________
> Wormux-dev mailing list
> Wormux-dev@gna.org
> https://mail.gna.org/listinfo/wormux-dev
>
_______________________________________________
Wormux-dev mailing list
Wormux-dev@gna.org
https://mail.gna.org/listinfo/wormux-dev

Répondre à