aboutsummaryrefslogtreecommitdiff
path: root/pmpd_list.c
diff options
context:
space:
mode:
authorCyrille Henry <nusmuk@users.sourceforge.net>2013-05-01 16:45:34 +0000
committerCyrille Henry <nusmuk@users.sourceforge.net>2013-05-01 16:45:34 +0000
commit7d2a7d2cb03f9a238babc6d17949cb89d64d02ec (patch)
tree713d40c9c68d0bc1a44c4a01f1bf15235057f63a /pmpd_list.c
parent515722a58656d57343b78eedb6a74e1e87830058 (diff)
add all pmpd3d new functionality to pmpd
svn path=/trunk/externals/pmpd/; revision=17107
Diffstat (limited to 'pmpd_list.c')
-rw-r--r--pmpd_list.c223
1 files changed, 223 insertions, 0 deletions
diff --git a/pmpd_list.c b/pmpd_list.c
index e69de29..7ede167 100644
--- a/pmpd_list.c
+++ b/pmpd_list.c
@@ -0,0 +1,223 @@
+void pmpd_massPosXL(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i,j;
+ t_atom pos_list[x->nb_mass];
+
+ if (argc==0)
+ {
+ for (i=0; i < x->nb_mass; i++)
+ {
+ SETFLOAT(&(pos_list[i]),x->mass[i].posX);
+ }
+ outlet_anything(x->main_outlet, gensym("massPosXL"),x->nb_mass , pos_list);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_SYMBOL))
+ {
+ i = 0;
+ j = 0;
+ while (j < x->nb_mass)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->mass[j].Id)
+ {
+ SETFLOAT(&(pos_list[i]),x->mass[i].posX);
+ i++;
+ }
+ j++;
+ }
+ outlet_anything(x->main_outlet, gensym("massPosXL"),i , pos_list);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_FLOAT))
+ {
+ SETFLOAT(&(pos_list[0]),x->mass[(int)atom_getfloatarg(0, argc, argv)].posX);
+ outlet_anything(x->main_outlet, gensym("massPosXL"),1 , pos_list);
+ }
+}
+
+void pmpd_massForceXL(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i,j;
+ t_atom pos_list[x->nb_mass];
+
+ if (argc==0)
+ {
+ for (i=0; i< x->nb_mass; i++)
+ {
+ SETFLOAT(&(pos_list[i]),x->mass[i].forceX);
+ }
+ outlet_anything(x->main_outlet, gensym("massForceXL"),x->nb_mass , pos_list);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_SYMBOL))
+ {
+ i = 0;
+ j = 0;
+ while (j < x->nb_mass)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->mass[j].Id)
+ {
+ SETFLOAT(&(pos_list[i]),x->mass[j].forceX);
+ i++;
+ }
+ j++;
+ }
+ outlet_anything(x->main_outlet, gensym("massForceXL"),i , pos_list);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_FLOAT))
+ {
+ SETFLOAT(&(pos_list[0]),x->mass[(int)atom_getfloatarg(0, argc, argv)].forceX);
+ outlet_anything(x->main_outlet, gensym("massForceXL"),1 , pos_list);
+ }
+}
+
+void pmpd_massSpeedXL(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i,j;
+ t_atom pos_list[x->nb_mass];
+
+ if (argc==0)
+ {
+ for (i=0; i< x->nb_mass; i++)
+ {
+ SETFLOAT(&(pos_list[i]),x->mass[i].speedX);
+ }
+ outlet_anything(x->main_outlet, gensym("massSpeedXL"),x->nb_mass , pos_list);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_SYMBOL))
+ {
+ i = 0;
+ j = 0;
+ while (j < x->nb_mass)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->mass[j].Id)
+ {
+ SETFLOAT(&(pos_list[i]),x->mass[j].speedX);
+ i++;
+ }
+ j++;
+ }
+ outlet_anything(x->main_outlet, gensym("massSpeedXL"),i , pos_list);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_FLOAT))
+ {
+ SETFLOAT(&(pos_list[0]),x->mass[(int)atom_getfloatarg(0, argc, argv)].speedX);
+ outlet_anything(x->main_outlet, gensym("massSpeedXL"),1 , pos_list);
+ }
+}
+
+// ---------------------------------------------------------------------
+
+void pmpd_linkPosXL(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i,j;
+ t_atom pos_list[x->nb_link];
+
+ if (argc==0)
+ {
+ for (i=0; i < x->nb_link; i++)
+ {
+ SETFLOAT(&(pos_list[i]),(x->link[i].mass1->posX + x->link[i].mass2->posX)/2);
+ }
+ outlet_anything(x->main_outlet, gensym("linkPosXL"),x->nb_link , pos_list);
+ }
+ else
+ if ( (argc==1) && (argv[0].a_type == A_SYMBOL) )
+ {
+ j=0;
+ for (i=0; i < x->nb_link; i++)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id)
+ {
+ SETFLOAT(&(pos_list[j]),(x->link[i].mass1->posX + x->link[i].mass2->posX)/2);
+ j++;
+ }
+ }
+ outlet_anything(x->main_outlet, gensym("linkPosXL"),j , pos_list);
+ }
+}
+
+void pmpd_linkLengthXL(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i,j;
+ t_atom pos_list[x->nb_link];
+
+ if (argc==0)
+ {
+ for (i=0; i < x->nb_link; i++)
+ {
+ SETFLOAT(&(pos_list[i]),x->link[i].mass2->posX - x->link[i].mass1->posX);
+ }
+ outlet_anything(x->main_outlet, gensym("linkLengthXL"),x->nb_link , pos_list);
+ }
+ else
+ if ( (argc==1) && (argv[0].a_type == A_SYMBOL) )
+ {
+ j=0;
+ for (i=0; i < x->nb_link; i++)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id)
+ {
+ SETFLOAT(&(pos_list[j]),x->link[i].mass2->posX - x->link[i].mass1->posX);
+ j++;
+ }
+ }
+ outlet_anything(x->main_outlet, gensym("linkLengthXL"),j , pos_list);
+ }
+}
+
+void pmpd_linkPosSpeedXL(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i,j;
+ t_atom pos_list[x->nb_link];
+
+ if (argc==0)
+ {
+ for (i=0; i < x->nb_link; i++)
+ {
+ SETFLOAT(&(pos_list[i]),(x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2);
+ }
+ outlet_anything(x->main_outlet, gensym("linkPosSpeedXL"),x->nb_link , pos_list);
+ }
+ else
+ if ( (argc==1) && (argv[0].a_type == A_SYMBOL) )
+ {
+ j=0;
+ for (i=0; i < x->nb_link; i++)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id)
+ {
+ SETFLOAT(&(pos_list[j]),(x->link[i].mass1->speedX + x->link[i].mass2->speedX)/2);
+ j++;
+ }
+ }
+ outlet_anything(x->main_outlet, gensym("linkPosSpeedXL"),j , pos_list);
+ }
+}
+
+void pmpd_linkLengthSpeedXL(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i,j;
+ t_atom pos_list[x->nb_link];
+
+ if (argc==0)
+ {
+ for (i=0; i < x->nb_link; i++)
+ {
+ SETFLOAT(&(pos_list[i]),x->link[i].mass2->speedX - x->link[i].mass1->speedX);
+ }
+ outlet_anything(x->main_outlet, gensym("linkLengthSpeedXL"), x->nb_link, pos_list);
+ }
+ else
+ if ( (argc==1) && (argv[0].a_type == A_SYMBOL) )
+ {
+ j=0;
+ for (i=0; i < x->nb_link; i++)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->link[i].Id)
+ {
+ SETFLOAT(&(pos_list[j]),x->link[i].mass2->speedX - x->link[i].mass1->speedX);
+ j++;
+ }
+ }
+ outlet_anything(x->main_outlet, gensym("linkLengthSpeedXL"), j, pos_list);
+ }
+}
+