Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
coord_select.cpp
Go to the documentation of this file.
1 #include "cmd/unit_generic.h"
2 #include "star_system.h"
3 #include "loc_select.h"
4 #include "coord_select.h"
5 #include "vs_globals.h"
6 #include "in_kb.h"
7 #include "gfx/camera.h"
11 extern Vector MouseCoordinate( int mouseX, int mouseY );
13 void CoordinateSelect::MouseMoveHandle( KBSTATE, int x, int y, int, int, int )
14 {
15  if (keyState[0]['z'] == DOWN)
17  else
21 }
22 
23 CoordinateSelect::CoordinateSelect( QVector start ) : LocSelAni( "locationselect.ani", true, .5, MIPMAP, true )
24  , LocalPosition( start )
25 {
26  CrosshairSize = 2;
30 }
32 {
33  if (CoordinateSelectChange == 1) {
34  Vector CamPos;
35  Vector CamQ, CamR;
36  _Universe->AccessCamera()->GetPQR( CamPos, CamQ, CamR );
37 
39  float mouseDistance = mousePoint.k*mousePoint.k;
40  mousePoint = Transform( CamPos, CamQ, CamR, mousePoint );
41  //QVector cp;
42  CamPos = _Universe->AccessCamera()->GetPosition();
43  //float mouseDistance = mousePoint.Dot (CamR);
44  //distance out into z...straight line...
45 
46  float distance = CamR.Dot( (LocalPosition-CamPos).Cast() ); //distance out into z...straight line...
47  //VSFileSystem::Fprintf (stderr, "distance:%f\n",distance);
48  //VSFileSystem::Fprintf (stderr, "mdistance:%f %f\n",mouseDistance,TMD);
49  if (mouseDistance != 0)
50  LocalPosition = mousePoint*(distance/mouseDistance)+CamPos.Cast();
51  else
52  LocalPosition = 2*CamR+CamPos.Cast();
54  }
55  if (CoordinateSelectChange == 2) {
56  Vector CamPos, CamQ, CamR;
57  _Universe->AccessCamera()->GetPQR( CamPos, CamQ, CamR );
58  CamPos = _Universe->AccessCamera()->GetPosition();
59 
61  float distance = sqrt( CamR.Dot( LocalPosition ) ); //distance out into z...straight line...
62  //make it a ratio btw top and bottom.... for near and far;
64  float tmp, n, f;
65  GFXGetFrustumVars( true, &tmp, &tmp, &tmp, &tmp, &n, &f );
66  tmp = n+ratio*ratio*ratio*(f-n); //how far n^3 law
67  if (distance != 0)
68  LocalPosition = LocalPosition*(tmp/distance)+CamPos;
69  else
70  LocalPosition = CamPos+CamR*n;
72  }
73 }
75 {
77  UpdateMouse();
79 
81  //VSFileSystem::Fprintf (stderr,"Location: %f %f %f", LocalPosition.i, LocalPosition.j, LocalPosition.k);
82  GFXBlendMode( ONE, ONE );
84  LocSelAni.Draw();
86 }
87