1
2 #include "tux.h"
3
update()4 void Orca::update ()
5 {
6 frame++ ;
7 last_pos = orca_pos ;
8 orca -> setTransform ( & orca_pos ) ;
9
10 int step = frame % 38 ;
11
12 if ( step > 19 )
13 orcaSeq -> selectStep ( 38 - step ) ;
14 else
15 orcaSeq -> selectStep ( step ) ;
16 }
17
18
Orca()19 Orca::Orca ()
20 {
21 orca = new ssgTransform ;
22 orca -> ref () ;
23
24 orcaSeq = new ssgTimedSelector ;
25
26 sgCoord c ;
27
28 /* Flipper coordinates */
29
30 ssgBranch *lfgeode = new ssgBranch () ; lfgeode -> setName ( "Orca_lf" ) ;
31 ssgBranch *rfgeode = new ssgBranch () ; rfgeode -> setName ( "Orca_rf" ) ;
32 ssgBranch *flukegeode = new ssgBranch () ; flukegeode -> setName ( "Orca_fluke" ) ;
33 ssgBranch *fingeode = new ssgBranch () ; fingeode -> setName ( "Orca_fin" ) ;
34
35 float lmult = 1.3 ;
36 lfgeode -> addKid ( MakeFlipper ( orcafin_gst, 1.0, lmult* 0.77, 1.0 ) ) ;
37 rfgeode -> addKid ( MakeFlipper ( orcafin_gst, -1.0, lmult* 0.77, 1.0 ) ) ;
38 flukegeode-> addKid ( MakeFlukes ( orcafin_gst, 1.3, lmult*-0.77, 1.0, TRUE )) ;
39 fingeode -> addKid ( MakeFlukes ( orcafin_gst, 1.0, lmult* 1.1, 1.1, FALSE)) ;
40
41 /* Tail.....................................Nose */
42 float orca_y [7] = { -5.13, -4.62, -2.97, 0.00, 1.65, 1.98, 2.20 } ;
43 float orca_z [7] = { -0.65, -0.65, -0.05, 0.15, -0.32, -0.48, -0.45 } ;
44 float orca_r [7] = { 0.00, 0.27, 1.02, 1.18, 0.68, 0.26, 0.00 } ;
45
46 for ( int q = 0 ; q < 7 ; q++ )
47 orca_y[q]*=lmult;
48
49 for ( int i = 0 ; i < 20 ; i++ )
50 {
51 ssgBranch *group = new ssgBranch () ; group->setName ( "Orca Grp #" ) ;
52 ssgBranch *geode = new ssgBranch () ; geode->setName ( "Orca Gd #" ) ;
53 float orca_z2 [ 7 ] ;
54
55 memcpy ( orca_z2, orca_z, 7 * sizeof(float) ) ;
56
57 orca_z2 [ 0 ] += 1.60 * sin ( (float) (i-10) * M_PI / 20.0 ) ;
58 orca_z2 [ 1 ] += 1.80 * sin ( (float) (i-10) * M_PI / 20.0 ) ;
59 orca_z2 [ 2 ] += 0.60 * sin ( (float) (i-10) * M_PI / 20.0 ) ;
60 orca_z2 [ 3 ] += 0.10 * sin ( (float) (i-10) * M_PI / 20.0 ) ;
61 orca_z2 [ 4 ] -= 0.06 * sin ( (float) (i-10) * M_PI / 20.0 ) ;
62 orca_z2 [ 5 ] -= 0.10 * sin ( (float) (i-10) * M_PI / 20.0 ) ;
63 orca_z2 [ 6 ] -= 0.11 * sin ( (float) (i-10) * M_PI / 20.0 ) ;
64
65 geode -> addKid ( MakeXSection ( orca_gst, 7, orca_y,
66 orca_z2, orca_z, orca_r, 11,
67 25.0/256.0, -4.50, (217.0-25.0)/256.0, (4.95+2.09)*lmult,
68 9.0/128.0, -1.08, ( 47.0- 9.0)/128.0, 1.26+1.08 ) ) ;
69
70 sgSetVec3 ( c.xyz, 0.0, lmult*-4.2, orca_z2[1] ) ;
71 sgSetVec3 ( c.hpr, 0.0, (float)(i-10)*0.8, 0.0 ) ;
72 ssgTransform *flukescs = new ssgTransform ( & c ) ;
73
74 sgSetVec3 ( c.xyz, 0.0, 0.0, 1.10 ) ;
75 sgSetVec3 ( c.hpr, 0.0, -(float)(i-20), 0.0 ) ;
76 ssgTransform *finscs = new ssgTransform ( & c ) ;
77
78 sgSetVec3 ( c.xyz, 1.0, 0.0, -0.2 ) ;
79 sgSetVec3 ( c.hpr, 10.0, 0.0, (float)(i-10)*2.0 ) ;
80 ssgTransform *lfscs = new ssgTransform ( & c ) ;
81
82 sgSetVec3 ( c.xyz, -1.0, 0.0, -0.2 ) ;
83 sgSetVec3 ( c.hpr,-10.0, 0.0, -(float)(i-10)*2.0 ) ;
84 ssgTransform *rfscs = new ssgTransform ( & c ) ;
85
86 lfscs -> addKid ( lfgeode ) ;
87 rfscs -> addKid ( rfgeode ) ;
88
89 finscs -> addKid ( fingeode ) ;
90 flukescs-> addKid ( flukegeode ) ;
91 group -> addKid ( finscs ) ;
92 group -> addKid ( flukescs ) ;
93 group -> addKid ( lfscs ) ;
94 group -> addKid ( rfscs ) ;
95 group -> addKid ( geode ) ;
96 orcaSeq -> addKid ( group ) ;
97 }
98
99 /*
100 orcaSeq -> setDuration ( 0.03, -1 ) ;
101 orcaSeq -> setLimits ( SSG_ANIM_SWING, 0, 19 ) ;
102 */
103 orca -> addKid ( orcaSeq ) ;
104 }
105
106
107