private bool shoot(UnitBase obj)
{
const double HIT = 5;
const int SIZE = 26;
double[] d = new double[SIZE];
int smallest = 0;
Vector3[] v = new Vector3[SIZE];
v[0] = new Vector3(obj.Position.X+1, obj.Position.Y+1, obj.Position.Z+1);
v[1] = new Vector3(obj.Position.X, obj.Position.Y+1, obj.Position.Z+1);
v[2] = new Vector3(obj.Position.X+1, obj.Position.Y, obj.Position.Z+1);
v[3] = new Vector3(obj.Position.X+1, obj.Position.Y+1, obj.Position.Z);
v[4] = new Vector3(obj.Position.X, obj.Position.Y, obj.Position.Z+1);
v[5] = new Vector3(obj.Position.X, obj.Position.Y+1, obj.Position.Z);
v[6] = new Vector3(obj.Position.X+1, obj.Position.Y, obj.Position.Z);
v[7] = new Vector3(obj.Position.X-1, obj.Position.Y-1, obj.Position.Z-1);
v[8] = new Vector3(obj.Position.X, obj.Position.Y-1, obj.Position.Z-1);
v[9] = new Vector3(obj.Position.X-1, obj.Position.Y, obj.Position.Z-1);
v[10] = new Vector3(obj.Position.X-1, obj.Position.Y-1, obj.Position.Z);
v[11] = new Vector3(obj.Position.X, obj.Position.Y, obj.Position.Z-1);
v[12] = new Vector3(obj.Position.X, obj.Position.Y-1, obj.Position.Z);
v[13] = new Vector3(obj.Position.X-1, obj.Position.Y, obj.Position.Z);
v[14] = new Vector3(obj.Position.X+1, obj.Position.Y+1, obj.Position.Z-1);
v[15] = new Vector3(obj.Position.X+1, obj.Position.Y-1, obj.Position.Z+1);
v[16] = new Vector3(obj.Position.X-1, obj.Position.Y+1, obj.Position.Z+1);
v[17] = new Vector3(obj.Position.X+1, obj.Position.Y-1, obj.Position.Z-1);
v[18] = new Vector3(obj.Position.X-1, obj.Position.Y+1, obj.Position.Z-1);
v[19] = new Vector3(obj.Position.X-1, obj.Position.Y-1, obj.Position.Z+1);
v[20] = new Vector3(obj.Position.X+1, obj.Position.Y, obj.Position.Z-1);
v[21] = new Vector3(obj.Position.X+1, obj.Position.Y-1, obj.Position.Z);
v[22] = new Vector3(obj.Position.X, obj.Position.Y+1, obj.Position.Z-1);
v[23] = new Vector3(obj.Position.X, obj.Position.Y-1, obj.Position.Z+1);
v[24] = new Vector3(obj.Position.X-1, obj.Position.Y+1, obj.Position.Z);
v[25] = new Vector3(obj.Position.X-1, obj.Position.Y, obj.Position.Z+1);
for (int i = 0; i < SIZE; i++)
d = dist(_camera.Position, v);
for (int i = 0; i < SIZE; i++)
if (d < HIT)
return true;
for (int i = 0; i < SIZE-1; i++)
{
if (d < d)
smallest = i;
}
<span class="cpp-keyword">if</span> (d[SIZE-<span class="cpp-number">1</span>] < d[smallest])
smallest = SIZE-<span class="cpp-number">1</span>;
shortest_dist = d[smallest];
obj.Position = v[smallest];
<span class="cpp-keyword">return</span> <span class="cpp-keyword">false</span>;
}
<span class="cpp-keyword">private</span> <span class="cpp-keyword">double</span> dist(Vector3 player, Vector3 obj)
{
<span class="cpp-keyword">return</span> Math.Sqrt(Math.Pow((player.X-obj.X),<span class="cpp-number">2</span>) + Math.Pow((player.Y-obj.Y),<span class="cpp-number">2</span>) + Math.Pow((player.Z-obj.Z),<span class="cpp-number">2</span>));
}
</pre></div><!–ENDSCRIPT–>
Why doesn't this work?
I'm trying to make an object come towards me. To do this, I move the item I want to come towards me in all possible directions by 1. Whichever direction moves the object closes to me, I move it in that direction. The object will move in my general direction, but it will just continue on past (not through) me and off into infinity. My code is:
Why don't you just get the direction vector and move along that?
Seriously, it's as simple as this: (pseudocode)
Hope this helps.
Seriously, it's as simple as this: (pseudocode)
float distanceToMove = 1.0f; // Or whatever you want it to beVector3 direction = _camera.Position - obj.Position;direction.Normalize();obj.Position += direction * distanceToMove;
Hope this helps.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement