Created
July 21, 2014 02:12
-
-
Save thuzhf/11109f4819c94f69d0b7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Microsoft.Xna.Framework; | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using xna = Microsoft.Xna.Framework; | |
using URWPGSim2D.Common; | |
using URWPGSim2D.StrategyLoader; | |
using URWPGSim2D.Core; | |
using URWPGSim2D.StrategyHelper; | |
namespace URWPGSim2D.Strategy | |
{ | |
#region situation | |
public class CourtSit | |
{ | |
#region ball area | |
/* | |
* -1 defence | |
* 0 middle | |
* 1 attack | |
*/ | |
public static int ballArea(Mission mission, int teamId) | |
{ | |
xna.Vector3 ballPos = mission.EnvRef.Balls[0].PositionMm; | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) | |
{ | |
if (ballPos.X <= -500) | |
{ | |
return -1; | |
} | |
if (ballPos.X <= 500) | |
{ | |
return 0; | |
} | |
return 1; | |
} | |
else | |
{ | |
if (ballPos.X <= -500) | |
{ | |
return 1; | |
} | |
if (ballPos.X <= 500) | |
{ | |
return 0; | |
} | |
return -1; | |
} | |
} | |
#endregion | |
} | |
#endregion | |
#region zdw | |
public class ZDWStrategy | |
{ | |
private Decision[] decisions = null; | |
private static bool flag = true; | |
private float pi = 3.141593f; | |
public void BlockDoor(Mission mission, int teamId, int fishnum) | |
{ | |
float num; | |
Vector3 vector2; | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
RoboFish fish = mission.TeamsRef[teamId].Fishes[fishnum]; | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) | |
{ | |
if (fish.BodyDirectionRad > 0f) | |
{ | |
if (fish.PolygonVertices[0].Z > 250f) | |
{ | |
num = -this.pi / 2f; | |
vector2 = new Vector3(-2100f, 0f, -300f); | |
} | |
else | |
{ | |
num = this.pi / 2f; | |
vector2 = new Vector3(-2100f, 0f, 300f); | |
} | |
} | |
else if (fish.PolygonVertices[0].Z < -250f) | |
{ | |
num = this.pi / 2f; | |
vector2 = new Vector3(-2100f, 0f, -300f); | |
} | |
else | |
{ | |
num = -this.pi / 2f; | |
vector2 = new Vector3(-2100f, 0f, 300f); | |
} | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[fishnum], mission.TeamsRef[teamId].Fishes[fishnum], vector2, num, 5f, 10f, 116f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
if (fish.BodyDirectionRad > 0f) | |
{ | |
if (fish.PolygonVertices[0].Z > 250f) | |
{ | |
num = -this.pi / 2f; | |
vector2 = new Vector3(2100f, 0f, -300f); | |
} | |
else | |
{ | |
num = this.pi / 2f; | |
vector2 = new Vector3(2100f, 0f, 300f); | |
} | |
} | |
else if (fish.PolygonVertices[0].Z < -250f) | |
{ | |
num = this.pi / 2f; | |
vector2 = new Vector3(-2100f, 0f, -300f); | |
} | |
else | |
{ | |
num = -this.pi / 2f; | |
vector2 = new Vector3(-2100f, 0f, 300f); | |
} | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[fishnum], mission.TeamsRef[teamId].Fishes[fishnum], vector2, num, 5f, 10f, 116f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
if ((fish.BodyDirectionRad > 0f) && (fish.BodyDirectionRad < ((this.pi / 180f) * 5f))) | |
{ | |
this.decisions[fishnum].TCode = 14; | |
this.decisions[fishnum].VCode = 2; | |
} | |
else if ((fish.BodyDirectionRad > ((-this.pi / 180f) * 5f)) && (fish.BodyDirectionRad <= 0f)) | |
{ | |
this.decisions[fishnum].TCode = 0; | |
this.decisions[fishnum].VCode = 2; | |
} | |
else if (fish.BodyDirectionRad < ((-this.pi / 180f) * 175f)) | |
{ | |
this.decisions[fishnum].TCode = 14; | |
this.decisions[fishnum].VCode = 2; | |
} | |
else if (fish.BodyDirectionRad > ((this.pi / 180f) * 175f)) | |
{ | |
this.decisions[fishnum].TCode = 0; | |
this.decisions[fishnum].VCode = 2; | |
} | |
} | |
public bool CheckForwardArea(RoboFish fish, HalfCourt label) | |
{ | |
float num = 10f; | |
if ((label == HalfCourt.LEFT) && (fish.PositionMm.X <= (-500f + num))) | |
{ | |
return false; | |
} | |
return true; | |
} | |
public bool CheckGuardArea(RoboFish fish, HalfCourt label) | |
{ | |
float num = 10f; | |
if ((label == HalfCourt.LEFT) && (fish.PositionMm.X >= (500f - num))) | |
{ | |
return false; | |
} | |
return true; | |
} | |
public int CheckNearestFish(Mission mission, int teamId) | |
{ | |
RoboFish fish = mission.TeamsRef[1 - teamId].Fishes[0]; | |
RoboFish fish2 = mission.TeamsRef[1 - teamId].Fishes[2]; | |
RoboFish fish3 = mission.TeamsRef[1 - teamId].Fishes[3]; | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
double distance = this.GetDistance(fish.PolygonVertices[0], positionMm); | |
double num2 = this.GetDistance(fish2.PolygonVertices[2], positionMm); | |
double num3 = this.GetDistance(fish3.PolygonVertices[3], positionMm); | |
int num4 = (distance > num2) ? 2 : 0; | |
if (num4 == 3) | |
{ | |
num4 = (num2 > num3) ? 3 : 2; | |
} | |
else | |
{ | |
num4 = (distance > num3) ? 3 : 0; | |
} | |
Console.WriteLine("**************Nearest fish************" + num4); | |
return num4; | |
} | |
public int DigBall(Mission mission, int teamId, int fishid) | |
{ | |
Console.WriteLine("dig ball####################"); | |
Vector3 destPtMm = new Vector3(); | |
float destDirRad = 0f; | |
int times = 0; | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
Vector3 vector3 = new Vector3(mission.TeamsRef[teamId].Fishes[fishid].PolygonVertices[0].X - positionMm.X, mission.TeamsRef[teamId].Fishes[fishid].PolygonVertices[0].Y - positionMm.Y, mission.TeamsRef[teamId].Fishes[fishid].PolygonVertices[0].Z - positionMm.Z); | |
times = 0; | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) | |
{ | |
if ((vector3.X > 0f) && (vector3.Z > 0f)) | |
{ | |
Console.WriteLine("dig ball###----1-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X, mission.EnvRef.Balls[0].PositionMm.Y, mission.EnvRef.Balls[0].PositionMm.Z - 60f); | |
destDirRad = (this.pi / 180f) * 150f; | |
} | |
else if ((vector3.X > 0f) && (vector3.Z < 0f)) | |
{ | |
Console.WriteLine("dig ball###----4-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X, mission.EnvRef.Balls[0].PositionMm.Y, mission.EnvRef.Balls[0].PositionMm.Z - 60f); | |
destDirRad = (this.pi / 180f) * 150f; | |
} | |
else if ((vector3.X < 0f) && (vector3.Z > 0f)) | |
{ | |
Console.WriteLine("dig ball###----2-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X, mission.EnvRef.Balls[0].PositionMm.Y, mission.EnvRef.Balls[0].PositionMm.Z + 60f); | |
destDirRad = (-this.pi / 180f) * 30f; | |
} | |
else if ((vector3.X < 0f) && (vector3.Z < 0f)) | |
{ | |
Console.WriteLine("dig ball###----3-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X - 60f, mission.EnvRef.Balls[0].PositionMm.Y, mission.EnvRef.Balls[0].PositionMm.Z); | |
destDirRad = (this.pi / 180f) * 30f; | |
} | |
} | |
else if ((vector3.X > 0f) && (vector3.Z > 0f)) | |
{ | |
Console.WriteLine("dig ball###----1-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X, 0f, mission.EnvRef.Balls[0].PositionMm.Z + 60f); | |
destDirRad = (-this.pi / 180f) * 150f; | |
} | |
else if ((vector3.X > 0f) && (vector3.Z < 0f)) | |
{ | |
Console.WriteLine("dig ball###----4-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X + 60f, 0f, mission.EnvRef.Balls[0].PositionMm.Z); | |
destDirRad = (this.pi / 180f) * 150f; | |
} | |
else if ((vector3.X < 0f) && (vector3.Z > 0f)) | |
{ | |
Console.WriteLine("dig ball###----2-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X, 0f, mission.EnvRef.Balls[0].PositionMm.Z - 60f); | |
destDirRad = (this.pi / 180f) * 30f; | |
} | |
else if ((vector3.X < 0f) && (vector3.Z < 0f)) | |
{ | |
Console.WriteLine("dig ball###----3-----"); | |
destPtMm = new Vector3(mission.EnvRef.Balls[0].PositionMm.X, 0f, mission.EnvRef.Balls[0].PositionMm.Z - 60f); | |
destDirRad = (this.pi / 180f) * 30f; | |
} | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref this.decisions[fishid], mission.TeamsRef[teamId].Fishes[fishid], destPtMm, destDirRad, 30f, 10f, mission.CommonPara.MsPerCycle, ref times); | |
return fishid; | |
} | |
public int GetArea(Vector3 point, double offset) | |
{ | |
if (point.X <= (-2100.0 + offset)) | |
{ | |
return 0; | |
} | |
if (((point.X > (-2100.0 + offset)) && (point.X <= (-1700.0 + offset))) && (point.Z < (-500.0 + offset))) | |
{ | |
return 1; | |
} | |
if ((((point.X > (-2100.0 + offset)) && (point.X <= (-1700.0 + offset))) && (point.Z >= (-500.0 + offset))) && (point.Z <= (500.0 + offset))) | |
{ | |
return 2; | |
} | |
if (((point.X > (-2100.0 + offset)) && (point.X <= (-1700.0 + offset))) && (point.Z > (500.0 + offset))) | |
{ | |
return 3; | |
} | |
if ((point.X > (-1700.0 + offset)) && (point.X <= (-500.0 + offset))) | |
{ | |
return 4; | |
} | |
if ((point.X > (-500.0 + offset)) && (point.X < (500.0 + offset))) | |
{ | |
return 5; | |
} | |
if ((point.X >= (500.0 + offset)) && (point.X < (1700.0 + offset))) | |
{ | |
return 6; | |
} | |
if (((point.X >= (1700.0 + offset)) && (point.X < (2100.0 + offset))) && (point.Z < (-500.0 + offset))) | |
{ | |
return 7; | |
} | |
if ((((point.X >= (1700.0 + offset)) && (point.X < (2100.0 + offset))) && (point.Z >= (-500.0 + offset))) && (point.Z <= (500.0 + offset))) | |
{ | |
return 8; | |
} | |
if (((point.X >= (1700.0 + offset)) && (point.X < (2100.0 + offset))) && (point.Z > (500.0 + offset))) | |
{ | |
return 9; | |
} | |
return 10; | |
} | |
public Decision[] GetDecision(Mission mission, int teamId) | |
{ | |
int num3; | |
Vector3 vector11; | |
double num8; | |
Vector3 vector12; | |
Vector3 vector13; | |
Vector3 vector14; | |
float num9; | |
float num10; | |
float num11; | |
double num12; | |
double num13; | |
double num14; | |
int num15; | |
Vector3 vector15; | |
float num16; | |
bool flag; | |
int num17; | |
Vector3 vector16; | |
bool flag2; | |
Vector3 vector17; | |
Vector3 vector18; | |
float num18; | |
if (this.decisions == null) | |
{ | |
this.decisions = new Decision[mission.CommonPara.FishCntPerTeam]; | |
} | |
RoboFish fish = mission.TeamsRef[teamId].Fishes[0]; | |
RoboFish fish2 = mission.TeamsRef[teamId].Fishes[2]; | |
RoboFish fish3 = mission.TeamsRef[teamId].Fishes[3]; | |
RoboFish fish4 = mission.TeamsRef[1 - teamId].Fishes[0]; | |
RoboFish fish5 = mission.TeamsRef[1 - teamId].Fishes[2]; | |
RoboFish fish6 = mission.TeamsRef[1 - teamId].Fishes[3]; | |
Vector3 destPtMm = new Vector3(); | |
float destDirRad = 0f; | |
int times = 0; | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
HalfCourt myHalfCourt = mission.TeamsRef[teamId].Para.MyHalfCourt; | |
Vector3 vector3 = new Vector3(); | |
double num4 = 116.0; | |
Vector3 ballpos = mission.EnvRef.Balls[0].PositionMm; | |
Vector3 fishpos = mission.TeamsRef[teamId].Fishes[0].PolygonVertices[0]; | |
Vector3 vector6 = mission.TeamsRef[teamId].Fishes[2].PolygonVertices[0]; | |
Vector3 vector7 = mission.TeamsRef[teamId].Fishes[3].PolygonVertices[0]; | |
Vector3 vector8 = mission.TeamsRef[teamId].Fishes[0].PositionMm; | |
Vector3 vector9 = mission.TeamsRef[teamId].Fishes[2].PositionMm; | |
Vector3 vector10 = mission.TeamsRef[teamId].Fishes[3].PositionMm; | |
float bodyDirectionRad = mission.TeamsRef[teamId].Fishes[0].BodyDirectionRad; | |
float fishrad = mission.TeamsRef[teamId].Fishes[2].BodyDirectionRad; | |
float num7 = mission.TeamsRef[teamId].Fishes[3].BodyDirectionRad; | |
double[,] trans = new double[2, 2]; | |
double[,] transdiv = new double[2, 2]; | |
int[] numArray8 = new int[3]; | |
numArray8[1] = 2; | |
numArray8[2] = 3; | |
int[] numArray3 = numArray8; | |
numArray8 = new int[3]; | |
numArray8[1] = 2; | |
numArray8[2] = 3; | |
int[] numArray4 = numArray8; | |
Vector3[] vectorArray = new Vector3[numArray3.Length]; | |
float[] numArray5 = new float[numArray3.Length]; | |
double[] numArray6 = new double[numArray3.Length]; | |
Vector3[] vectorArray2 = new Vector3[numArray3.Length]; | |
float[] numArray7 = new float[] { bodyDirectionRad, fishrad, num7 }; | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) | |
{ | |
vector11 = new Vector3(2250f, 0f, 0f); | |
num8 = Math.Atan((double)((vector11.Z - ballpos.Z) / (vector11.X - ballpos.X))); | |
trans[0, 0] = Math.Cos(num8); | |
trans[0, 1] = Math.Sin(num8); | |
trans[1, 0] = -Math.Sin(num8); | |
trans[1, 1] = Math.Cos(num8); | |
transdiv[0, 0] = Math.Cos(num8); | |
transdiv[0, 1] = -Math.Sin(num8); | |
transdiv[1, 0] = Math.Sin(num8); | |
transdiv[1, 1] = Math.Cos(num8); | |
vector12 = this.transpos(fishpos, ballpos, trans); | |
vector13 = this.transpos(vector6, ballpos, trans); | |
vector14 = this.transpos(vector7, ballpos, trans); | |
num9 = bodyDirectionRad - ((float)num8); | |
num10 = fishrad - ((float)num8); | |
num11 = num7 - ((float)num8); | |
num12 = Math.Atan((double)(vector12.Z / vector12.X)); | |
num13 = Math.Atan((double)(vector13.Z / vector13.X)); | |
num14 = Math.Atan((double)(vector14.Z / vector14.X)); | |
vectorArray[0] = vector12; | |
vectorArray[1] = vector13; | |
vectorArray[2] = vector14; | |
numArray5[0] = num9; | |
numArray5[1] = num10; | |
numArray5[2] = num11; | |
numArray6[0] = num12; | |
numArray6[1] = num13; | |
numArray6[2] = num14; | |
if (ballpos.X >= 500f) | |
{ | |
for (num15 = 0; num15 < numArray3.Length; num15++) | |
{ | |
if (num15 == 1) | |
{ | |
vector15 = new Vector3(0f, 0f, ballpos.Z); | |
this.turnrad(ref this.decisions[2], vector9, fishrad, vector15, 150f, 0f, 0.4f, mission, teamId, 2); | |
continue; | |
} | |
num16 = 150f; | |
if (this.leftcheckzone(vectorArray[num15]) == 0) | |
{ | |
if (((((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > (-this.pi / 4f)) && (numArray5[num15] <= 0f)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else if ((((((numArray5[num15] >= (this.pi / 2f)) && (numArray5[num15] <= ((this.pi / 4f) * 3f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > ((this.pi / 4f) * 3f)) && (numArray5[num15] <= this.pi)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) || (((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 1) | |
{ | |
if (((((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= 0f) && (numArray5[num15] < (this.pi / 4f))) && ((numArray6[num15] < (-this.pi / 4f)) && (numArray6[num15] >= (-this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else if ((((((numArray5[num15] >= ((-this.pi / 4f) * 3f)) && (numArray5[num15] <= (-this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= -this.pi) && (numArray5[num15] < ((-this.pi / 4f) * 3f))) && ((numArray6[num15] > (-this.pi / 4f)) && (numArray6[num15] <= (-this.pi / 2f))))) || (((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= (-this.pi / 2f)) && (numArray6[num15] > (-this.pi / 4f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 2) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 0)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 3) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 1)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 4) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 0)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, -300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 5) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 1)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, 300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 6) | |
{ | |
if (((2250f - ballpos.X) < 100f) && (ballpos.Z < -258f)) | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else if (((2250f - ballpos.X) < 100f) && (ballpos.Z > 258f)) | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 7; | |
} | |
} | |
} | |
} | |
else if ((ballpos.X < 500f) && (ballpos.X > -500f)) | |
{ | |
for (num15 = 0; num15 < numArray3.Length; num15++) | |
{ | |
num16 = 150f; | |
if (this.leftcheckzone(vectorArray[num15]) == 0) | |
{ | |
if (((((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > (-this.pi / 4f)) && (numArray5[num15] <= 0f)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else if ((((((numArray5[num15] >= (this.pi / 2f)) && (numArray5[num15] <= ((this.pi / 4f) * 3f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > ((this.pi / 4f) * 3f)) && (numArray5[num15] <= this.pi)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) || (((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 1) | |
{ | |
if (((((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= 0f) && (numArray5[num15] < (this.pi / 4f))) && ((numArray6[num15] < (-this.pi / 4f)) && (numArray6[num15] >= (-this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else if ((((((numArray5[num15] >= ((-this.pi / 4f) * 3f)) && (numArray5[num15] <= (-this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= -this.pi) && (numArray5[num15] < ((-this.pi / 4f) * 3f))) && ((numArray6[num15] > (-this.pi / 4f)) && (numArray6[num15] <= (-this.pi / 2f))))) || (((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= (-this.pi / 2f)) && (numArray6[num15] > (-this.pi / 4f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 2) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 0) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 3) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 1) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 4) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 0) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, -300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 5) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 1) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, 300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 6) | |
{ | |
flag2 = false; | |
num17 = 0; | |
while (num17 < numArray4.Length) | |
{ | |
vector17 = mission.TeamsRef[(1 + teamId) % 2].Fishes[numArray4[num17]].PositionMm; | |
vector18 = this.transpos(vector17, ballpos, trans); | |
num18 = 500f; | |
if ((((this.leftcheckzone(vector18) == 5) || (this.leftcheckzone(vector18) == 6)) || (this.leftcheckzone(vector18) == 4)) && (((vector18.X * vector18.X) + (vector18.Z * vector18.Z)) <= (num18 * num18))) | |
{ | |
vectorArray2[num15] = (Vector3)((vector17 + ballpos) / 2f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
break; | |
} | |
num17++; | |
} | |
if (!flag2) | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 7; | |
} | |
} | |
} | |
} | |
else if (ballpos.X <= -500f) | |
{ | |
if (this.GetArea(positionMm, 58.0) == 0) | |
{ | |
this.DigBall(mission, teamId, 0); | |
this.DigBall(mission, teamId, 2); | |
} | |
else if (this.GetArea(positionMm, 58.0) == 1) | |
{ | |
Console.WriteLine("--------left----------- ball area 1------------"); | |
destDirRad = (-this.pi / 180f) * 110f; | |
destPtMm = new Vector3(positionMm.X - 40f, 0f, positionMm.Z + 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], fish, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
num3 = this.CheckNearestFish(mission, teamId); | |
if (this.GetDistance(mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0], positionMm) < num4) | |
{ | |
Console.WriteLine("**********fish3 hit emergy**************"); | |
vector3 = mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0]; | |
destPtMm = new Vector3((positionMm.X + vector3.X) / 2f, 0f, (positionMm.Z + vector3.Z) / 2f); | |
destDirRad = mission.TeamsRef[1 - teamId].Fishes[num3].BodyDirectionRad; | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref this.decisions[2], fish2, destPtMm, destDirRad, 30f, 10f, mission.CommonPara.MsPerCycle, ref times); | |
} | |
else | |
{ | |
destDirRad = (-this.pi / 180f) * 110f; | |
destPtMm = new Vector3(positionMm.X - 40f, 0f, positionMm.Z + 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
} | |
else if (this.GetArea(positionMm, 58.0) == 2) | |
{ | |
this.BlockDoor(mission, teamId, 0); | |
this.Stopfish(mission, teamId, 0); | |
if (positionMm.Z > 200f) | |
{ | |
Console.WriteLine("up defend"); | |
destDirRad = (this.pi / 180f) * 100f; | |
destPtMm = new Vector3(-2050f, 0f, positionMm.Z - 100f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else if (positionMm.Z < -200f) | |
{ | |
Console.WriteLine("down defend"); | |
destDirRad = (-this.pi / 180f) * 140f; | |
destPtMm = new Vector3(-2050f, 0f, positionMm.Z + 30f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
Console.WriteLine("center defend"); | |
if (fish2.BodyDirectionRad > 0f) | |
{ | |
destDirRad = (this.pi / 180f) * 60f; | |
destPtMm = new Vector3(positionMm.X - 60f, 0f, 140f); | |
} | |
else | |
{ | |
destDirRad = (-this.pi / 180f) * 60f; | |
destPtMm = new Vector3(positionMm.X - 60f, 0f, -140f); | |
} | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
if (positionMm.X < -1900f) | |
{ | |
this.DigBall(mission, teamId, 0); | |
this.DigBall(mission, teamId, 2); | |
} | |
} | |
this.LeaveGate(mission, teamId); | |
} | |
else if (this.GetArea(positionMm, 58.0) == 3) | |
{ | |
Console.WriteLine("--------left----------- ball area 3------------"); | |
destDirRad = (this.pi / 180f) * 110f; | |
destPtMm = new Vector3(positionMm.X + 40f, 0f, positionMm.Z - 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], fish, destPtMm, destDirRad, 5f, 10f, 116f, 10, 10, 15, mission.CommonPara.MsPerCycle, false); | |
num3 = this.CheckNearestFish(mission, teamId); | |
if (this.GetDistance(mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0], positionMm) < num4) | |
{ | |
vector3 = mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0]; | |
destPtMm = new Vector3((positionMm.X + vector3.X) / 2f, 0f, (positionMm.Z + vector3.Z) / 2f); | |
destDirRad = mission.TeamsRef[1 - teamId].Fishes[num3].BodyDirectionRad; | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref this.decisions[2], fish2, destPtMm, destDirRad, 30f, 10f, mission.CommonPara.MsPerCycle, ref times); | |
} | |
else | |
{ | |
destDirRad = (-this.pi / 180f) * 110f; | |
destPtMm = new Vector3(positionMm.X + 40f, 0f, positionMm.Z - 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
} | |
if (this.GetArea(positionMm, 58.0) == 4) | |
{ | |
Console.WriteLine("--------left----------- ball area 4------------"); | |
destDirRad = this.pi / 6f; | |
destPtMm = new Vector3(positionMm.X - 40f, 0f, positionMm.Z + 30f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], fish, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
num3 = this.CheckNearestFish(mission, teamId); | |
if (this.GetDistance(mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0], positionMm) < num4) | |
{ | |
vector3 = mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0]; | |
destPtMm = new Vector3((positionMm.X + vector3.X) / 2f, 0f, (positionMm.Z + vector3.Z) / 2f); | |
destDirRad = mission.TeamsRef[1 - teamId].Fishes[num3].BodyDirectionRad; | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref this.decisions[2], fish2, destPtMm, destDirRad, 30f, 10f, mission.CommonPara.MsPerCycle, ref times); | |
} | |
else | |
{ | |
destDirRad = this.pi / 6f; | |
destPtMm = new Vector3(positionMm.X - 40f, 0f, positionMm.Z - 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
} | |
} | |
} | |
else if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) | |
{ | |
vector11 = new Vector3(-2250f, 0f, 0f); | |
num8 = Math.Atan((double)((vector11.Z - ballpos.Z) / (vector11.X - ballpos.X))); | |
if (ballpos.Z >= 0f) | |
{ | |
num8 = ((float)num8) - this.pi; | |
} | |
else | |
{ | |
num8 = ((float)num8) + this.pi; | |
} | |
trans[0, 0] = Math.Cos(num8); | |
trans[0, 1] = Math.Sin(num8); | |
trans[1, 0] = -Math.Sin(num8); | |
trans[1, 1] = Math.Cos(num8); | |
transdiv[0, 0] = Math.Cos(num8); | |
transdiv[0, 1] = -Math.Sin(num8); | |
transdiv[1, 0] = Math.Sin(num8); | |
transdiv[1, 1] = Math.Cos(num8); | |
vector12 = this.transpos(fishpos, ballpos, trans); | |
vector13 = this.transpos(vector6, ballpos, trans); | |
vector14 = this.transpos(vector7, ballpos, trans); | |
num9 = bodyDirectionRad - ((float)num8); | |
num10 = fishrad - ((float)num8); | |
num11 = num7 - ((float)num8); | |
num12 = Math.Atan((double)(vector12.Z / vector12.X)); | |
num13 = Math.Atan((double)(vector13.Z / vector13.X)); | |
num14 = Math.Atan((double)(vector14.Z / vector14.X)); | |
vectorArray[0] = vector12; | |
vectorArray[1] = vector13; | |
vectorArray[2] = vector14; | |
numArray5[0] = num9; | |
numArray5[1] = num10; | |
numArray5[2] = num11; | |
numArray6[0] = num12; | |
numArray6[1] = num13; | |
numArray6[2] = num14; | |
if (ballpos.X <= -500f) | |
{ | |
for (num15 = 0; num15 < numArray3.Length; num15++) | |
{ | |
if (num15 == 1) | |
{ | |
vector15 = new Vector3(0f, 0f, ballpos.Z); | |
this.turnrad(ref this.decisions[2], vector9, fishrad, vector15, 150f, this.pi, 0.4f, mission, teamId, 2); | |
continue; | |
} | |
num16 = 150f; | |
if (this.leftcheckzone(vectorArray[num15]) == 0) | |
{ | |
if (((((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > (-this.pi / 4f)) && (numArray5[num15] <= 0f)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else if ((((((numArray5[num15] >= (this.pi / 2f)) && (numArray5[num15] <= ((this.pi / 4f) * 3f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > ((this.pi / 4f) * 3f)) && (numArray5[num15] <= this.pi)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) || (((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 1) | |
{ | |
if (((((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= 0f) && (numArray5[num15] < (this.pi / 4f))) && ((numArray6[num15] < (-this.pi / 4f)) && (numArray6[num15] >= (-this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else if ((((((numArray5[num15] >= ((-this.pi / 4f) * 3f)) && (numArray5[num15] <= (-this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= -this.pi) && (numArray5[num15] < ((-this.pi / 4f) * 3f))) && ((numArray6[num15] > (-this.pi / 4f)) && (numArray6[num15] <= (-this.pi / 2f))))) || (((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= (-this.pi / 2f)) && (numArray6[num15] > (-this.pi / 4f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 2) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 0)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 3) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 1)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 4) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 0)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, -300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 5) | |
{ | |
flag = true; | |
num17 = 0; | |
while (num17 < numArray3.Length) | |
{ | |
if ((num17 != num15) && (this.leftcheckzone(vectorArray[num17]) == 1)) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, 300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 6) | |
{ | |
if (((2250f + ballpos.X) < 100f) && (ballpos.Z < -258f)) | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else if (((2250f + ballpos.X) < 100f) && (ballpos.Z > 258f)) | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 7; | |
} | |
} | |
} | |
} | |
else if ((ballpos.X < 500f) && (ballpos.X > -500f)) | |
{ | |
for (num15 = 0; num15 < numArray3.Length; num15++) | |
{ | |
num16 = 150f; | |
if (this.leftcheckzone(vectorArray[num15]) == 0) | |
{ | |
if (((((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > (-this.pi / 4f)) && (numArray5[num15] <= 0f)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else if ((((((numArray5[num15] >= (this.pi / 2f)) && (numArray5[num15] <= ((this.pi / 4f) * 3f))) && ((numArray6[num15] >= 0.0) && (numArray6[num15] <= (this.pi / 4f)))) || (((numArray5[num15] > ((this.pi / 4f) * 3f)) && (numArray5[num15] <= this.pi)) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) || (((numArray5[num15] >= (-this.pi / 2f)) && (numArray5[num15] <= (-this.pi / 4f))) && ((numArray6[num15] > (this.pi / 4f)) && (numArray6[num15] <= (this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 1) | |
{ | |
if (((((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= 0f) && (numArray5[num15] < (this.pi / 4f))) && ((numArray6[num15] < (-this.pi / 4f)) && (numArray6[num15] >= (-this.pi / 2f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 0; | |
} | |
else if ((((((numArray5[num15] >= ((-this.pi / 4f) * 3f)) && (numArray5[num15] <= (-this.pi / 2f))) && ((numArray6[num15] <= 0.0) && (numArray6[num15] >= (-this.pi / 4f)))) || (((numArray5[num15] >= -this.pi) && (numArray5[num15] < ((-this.pi / 4f) * 3f))) && ((numArray6[num15] > (-this.pi / 4f)) && (numArray6[num15] <= (-this.pi / 2f))))) || (((numArray5[num15] >= (this.pi / 4f)) && (numArray5[num15] <= (this.pi / 2f))) && ((numArray6[num15] <= (-this.pi / 2f)) && (numArray6[num15] > (-this.pi / 4f))))) && (((vectorArray[num15].X * vectorArray[num15].X) + (vectorArray[num15].Z * vectorArray[num15].Z)) <= (num16 * num16))) | |
{ | |
this.decisions[numArray3[num15]].VCode = 1; | |
this.decisions[numArray3[num15]].TCode = 14; | |
} | |
else | |
{ | |
vectorArray2[num15] = ballpos; | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 2) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 0) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 3) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 1) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 4) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 0) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, -100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, -300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 5) | |
{ | |
flag = true; | |
num17 = 0; | |
while ((num17 < numArray3.Length) && (num17 != num15)) | |
{ | |
if (this.leftcheckzone(vectorArray[num17]) == 1) | |
{ | |
flag = false; | |
break; | |
} | |
num17++; | |
} | |
if (flag) | |
{ | |
vector16 = new Vector3(-100f, 0f, 100f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], (float)num8, 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
vector16 = new Vector3(-300f, 0f, 300f); | |
vectorArray2[num15] = this.transposdiv(vector16, ballpos, transdiv); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 15f, 30f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
continue; | |
} | |
if (this.leftcheckzone(vectorArray[num15]) == 6) | |
{ | |
flag2 = false; | |
for (num17 = 0; num17 < numArray4.Length; num17++) | |
{ | |
vector17 = mission.TeamsRef[(1 + teamId) % 2].Fishes[numArray4[num17]].PositionMm; | |
vector18 = this.transpos(vector17, ballpos, trans); | |
num18 = 500f; | |
if ((((this.leftcheckzone(vector18) == 5) || (this.leftcheckzone(vector18) == 6)) || (this.leftcheckzone(vector18) == 4)) && (((vector18.X * vector18.X) + (vector18.Z * vector18.Z)) <= (num18 * num18))) | |
{ | |
vectorArray2[num15] = (Vector3)((vector17 + ballpos) / 2f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[numArray3[num15]], mission.TeamsRef[teamId].Fishes[numArray3[num15]], vectorArray2[num15], numArray7[num15], 5f, 10f, 150f, 14, 14, 15, mission.CommonPara.MsPerCycle, false); | |
break; | |
} | |
} | |
if (!flag2) | |
{ | |
this.decisions[numArray3[num15]].VCode = 14; | |
this.decisions[numArray3[num15]].TCode = 7; | |
} | |
} | |
} | |
} | |
else if (ballpos.X >= 500f) | |
{ | |
if (this.GetArea(positionMm, 58.0) == 10) | |
{ | |
this.DigBall(mission, teamId, 0); | |
this.DigBall(mission, teamId, 2); | |
} | |
else if (this.GetArea(positionMm, 58.0) == 7) | |
{ | |
Console.WriteLine("--------right----------- ball area 7------------"); | |
destDirRad = (-this.pi / 180f) * 70f; | |
destPtMm = new Vector3(positionMm.X + 40f, 0f, positionMm.Z + 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], fish, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
num3 = this.CheckNearestFish(mission, teamId); | |
if (this.GetDistance(mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0], positionMm) < num4) | |
{ | |
Console.WriteLine("**********fish3 hit emergy**************"); | |
vector3 = mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0]; | |
destPtMm = new Vector3((positionMm.X + vector3.X) / 2f, 0f, (positionMm.Z + vector3.Z) / 2f); | |
destDirRad = mission.TeamsRef[1 - teamId].Fishes[num3].BodyDirectionRad; | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref this.decisions[2], fish2, destPtMm, destDirRad, 30f, 10f, mission.CommonPara.MsPerCycle, ref times); | |
} | |
else | |
{ | |
destDirRad = (-this.pi / 180f) * 70f; | |
destPtMm = new Vector3(positionMm.X + 40f, 0f, positionMm.Z + 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
} | |
else if (this.GetArea(positionMm, 58.0) == 8) | |
{ | |
this.BlockDoor(mission, teamId, 0); | |
this.Stopfish(mission, teamId, 0); | |
if (positionMm.Z > 200f) | |
{ | |
Console.WriteLine("up defend"); | |
destDirRad = (this.pi / 180f) * 80f; | |
destPtMm = new Vector3(2050f, 0f, positionMm.Z - 100f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else if (positionMm.Z < -200f) | |
{ | |
Console.WriteLine("down defend"); | |
destDirRad = (-this.pi / 180f) * 40f; | |
destPtMm = new Vector3(2050f, 0f, positionMm.Z + 30f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
else | |
{ | |
Console.WriteLine("center defend"); | |
if (fish2.BodyDirectionRad > 0f) | |
{ | |
destDirRad = (this.pi / 180f) * 120f; | |
destPtMm = new Vector3(positionMm.X + 60f, 0f, 140f); | |
} | |
else | |
{ | |
destDirRad = (-this.pi / 180f) * 120f; | |
destPtMm = new Vector3(positionMm.X + 60f, 0f, -140f); | |
} | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
if (positionMm.X < -1900f) | |
{ | |
this.DigBall(mission, teamId, 0); | |
this.DigBall(mission, teamId, 2); | |
} | |
} | |
this.LeaveGate(mission, teamId); | |
} | |
else if (this.GetArea(positionMm, 58.0) == 9) | |
{ | |
Console.WriteLine("--------right----------- ball area 9------------"); | |
destDirRad = (this.pi / 180f) * 70f; | |
destPtMm = new Vector3(positionMm.X - 40f, 0f, positionMm.Z - 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], fish, destPtMm, destDirRad, 5f, 10f, 116f, 10, 10, 15, mission.CommonPara.MsPerCycle, false); | |
num3 = this.CheckNearestFish(mission, teamId); | |
if (this.GetDistance(mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0], positionMm) < num4) | |
{ | |
vector3 = mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0]; | |
destPtMm = new Vector3((positionMm.X + vector3.X) / 2f, 0f, (positionMm.Z + vector3.Z) / 2f); | |
destDirRad = mission.TeamsRef[1 - teamId].Fishes[num3].BodyDirectionRad; | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref this.decisions[2], fish2, destPtMm, destDirRad, 30f, 10f, mission.CommonPara.MsPerCycle, ref times); | |
} | |
else | |
{ | |
destDirRad = (this.pi / 180f) * 70f; | |
destPtMm = new Vector3(positionMm.X - 40f, 0f, positionMm.Z - 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
} | |
if (this.GetArea(positionMm, 58.0) == 6) | |
{ | |
Console.WriteLine("--------right----------- ball area 6------------"); | |
destDirRad = (this.pi / 6f) * 5f; | |
destPtMm = new Vector3(positionMm.X + 40f, 0f, positionMm.Z + 30f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], fish, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
num3 = this.CheckNearestFish(mission, teamId); | |
if (this.GetDistance(mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0], positionMm) < num4) | |
{ | |
vector3 = mission.TeamsRef[1 - teamId].Fishes[num3].PolygonVertices[0]; | |
destPtMm = new Vector3((positionMm.X + vector3.X) / 2f, 0f, (positionMm.Z + vector3.Z) / 2f); | |
destDirRad = mission.TeamsRef[1 - teamId].Fishes[num3].BodyDirectionRad; | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref this.decisions[2], fish2, destPtMm, destDirRad, 30f, 10f, mission.CommonPara.MsPerCycle, ref times); | |
} | |
else | |
{ | |
destDirRad = (this.pi / 6f) * 5f; | |
destPtMm = new Vector3(positionMm.X + 40f, 0f, positionMm.Z - 40f); | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[2], fish2, destPtMm, destDirRad, 5f, 10f, 116f, 6, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
} | |
} | |
} | |
return this.decisions; | |
} | |
public double GetDistance(Vector3 point1, Vector3 point2) | |
{ | |
return Math.Sqrt(Math.Pow((double)(point1.X - point2.X), 2.0) + Math.Pow((double)(point1.Z - point2.Z), 2.0)); | |
} | |
public string GetTeamName() | |
{ | |
return "Team 4"; | |
} | |
public Decision[] HoldAngle(Mission mission, int angle, int delta, int fishnum, int teamId, int vcode) | |
{ | |
double num = ((((angle + 360) + delta) * 1.0) / 180.0) * this.pi; | |
double num2 = ((((angle + 360) - delta) * 1.0) / 180.0) * this.pi; | |
double num3 = mission.TeamsRef[teamId].Fishes[fishnum].BodyDirectionRad + (2f * this.pi); | |
this.decisions[fishnum].VCode = vcode; | |
if ((num3 >= num2) && (num3 <= num)) | |
{ | |
this.decisions[fishnum].TCode = 7; | |
} | |
else if ((num3 > (num2 + this.pi)) && (num3 <= (num + this.pi))) | |
{ | |
this.decisions[fishnum].TCode = 14; | |
this.decisions[fishnum].VCode = 2; | |
} | |
else if ((num3 > num) && (num3 <= (num2 + this.pi))) | |
{ | |
this.decisions[fishnum].TCode = 0; | |
this.decisions[fishnum].VCode = 2; | |
} | |
else | |
{ | |
this.decisions[fishnum].TCode = 14; | |
this.decisions[fishnum].VCode = 2; | |
} | |
return this.decisions; | |
} | |
public void LeaveGate(Mission mission, int teamId) | |
{ | |
RoboFish fish = mission.TeamsRef[teamId].Fishes[0]; | |
RoboFish fish2 = mission.TeamsRef[teamId].Fishes[2]; | |
HalfCourt myHalfCourt = mission.TeamsRef[teamId].Para.MyHalfCourt; | |
if (this.GetArea(fish2.PolygonVertices[0], 0.0) == 0) | |
{ | |
Console.WriteLine("go out"); | |
if ((fish2.PolygonVertices[0].Z < 0f) && (fish2.PolygonVertices[0].Z > -200f)) | |
{ | |
this.decisions[2].VCode = 1; | |
if (myHalfCourt == HalfCourt.LEFT) | |
{ | |
this.decisions[2].TCode = 14; | |
} | |
else | |
{ | |
this.decisions[2].TCode = 0; | |
} | |
} | |
else if ((fish2.PrePolygonVertices[0].Z >= 0f) && (fish2.PolygonVertices[0].Z < 200f)) | |
{ | |
this.decisions[2].VCode = 1; | |
if (myHalfCourt == HalfCourt.LEFT) | |
{ | |
this.decisions[2].TCode = 0; | |
} | |
else | |
{ | |
this.decisions[2].TCode = 14; | |
} | |
} | |
} | |
if (this.GetArea(fish.PolygonVertices[0], 0.0) == 0) | |
{ | |
Console.WriteLine("go out"); | |
if ((fish.PolygonVertices[0].Z < 0f) && (fish.PolygonVertices[0].Z > -200f)) | |
{ | |
this.decisions[0].VCode = 1; | |
if (myHalfCourt == HalfCourt.LEFT) | |
{ | |
this.decisions[0].TCode = 0; | |
} | |
else | |
{ | |
this.decisions[0].TCode = 14; | |
} | |
} | |
else if ((fish.PrePolygonVertices[0].Z >= 0f) && (fish.PolygonVertices[0].Z < 200f)) | |
{ | |
this.decisions[0].VCode = 1; | |
if (myHalfCourt == HalfCourt.LEFT) | |
{ | |
this.decisions[0].TCode = 14; | |
} | |
else | |
{ | |
this.decisions[0].TCode = 0; | |
} | |
} | |
} | |
} | |
public int leftcheckzone(Vector3 fishpos) | |
{ | |
float num = 300f; | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) <= (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z <= 0f)) | |
{ | |
return 0; | |
} | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) <= (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z > 0f)) | |
{ | |
return 1; | |
} | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) > (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z <= 0f)) | |
{ | |
return 2; | |
} | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) > (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z > 0f)) | |
{ | |
return 3; | |
} | |
if ((fishpos.X > 0f) && (fishpos.Z <= -58f)) | |
{ | |
return 4; | |
} | |
if ((fishpos.X > 0f) && (fishpos.Z > 58f)) | |
{ | |
return 5; | |
} | |
if (((fishpos.X > 0f) && (fishpos.Z > -58f)) && (fishpos.Z <= 58f)) | |
{ | |
return 6; | |
} | |
return -1; | |
} | |
public void Pushout(Mission mission, int RFishID, int FishID, int line) | |
{ | |
int num = 0; | |
if (line == -500) | |
{ | |
if (num != 1) | |
{ | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], mission.TeamsRef[0].Fishes[FishID], mission.TeamsRef[1].Fishes[RFishID].PositionMm, -3.14f, 5f, 10f, 116f, 14, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
if (mission.TeamsRef[0].Fishes[FishID].PolygonVertices[0].X < -500f) | |
{ | |
num = 1; | |
this.decisions[FishID].TCode = 14; | |
this.decisions[FishID].VCode = 2; | |
} | |
if (mission.TeamsRef[0].Fishes[FishID].PositionMm.X > -300f) | |
{ | |
num = 0; | |
} | |
} | |
else | |
{ | |
if (num != 1) | |
{ | |
URWPGSim2D.StrategyHelper.Helpers.Dribble(ref this.decisions[0], mission.TeamsRef[0].Fishes[FishID], mission.TeamsRef[1].Fishes[RFishID].PositionMm, 0f, 5f, 10f, 116f, 14, 4, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
if (mission.TeamsRef[0].Fishes[FishID].PolygonVertices[0].X > 500f) | |
{ | |
num = 1; | |
this.decisions[FishID].TCode = 14; | |
this.decisions[FishID].VCode = 2; | |
} | |
if (mission.TeamsRef[0].Fishes[FishID].PositionMm.X < 300f) | |
{ | |
num = 0; | |
} | |
} | |
} | |
public int rightcheckzone(Vector3 fishpos) | |
{ | |
float num = 300f; | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) <= (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z >= 0f)) | |
{ | |
return 0; | |
} | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) <= (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z < 0f)) | |
{ | |
return 1; | |
} | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) > (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z >= 0f)) | |
{ | |
return 2; | |
} | |
if (((((fishpos.X * fishpos.X) + (fishpos.Z * fishpos.Z)) > (num * num)) && (fishpos.X <= 0f)) && (fishpos.Z < 0f)) | |
{ | |
return 3; | |
} | |
if ((fishpos.X > 0f) && (fishpos.Z >= 58f)) | |
{ | |
return 4; | |
} | |
if ((fishpos.X > 0f) && (fishpos.Z <= -58f)) | |
{ | |
return 5; | |
} | |
if (((fishpos.X > 0f) && (fishpos.Z > -58f)) && (fishpos.Z < 58f)) | |
{ | |
return 6; | |
} | |
return -1; | |
} | |
public void Stopfish(Mission mission, int teamId, int fishnum) | |
{ | |
RoboFish fish; | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) | |
{ | |
fish = mission.TeamsRef[teamId].Fishes[fishnum]; | |
if ((fish.BodyDirectionRad > ((this.pi / 180f) * 80f)) && (fish.BodyDirectionRad < ((this.pi / 180f) * 100f))) | |
{ | |
if (((fish.PositionMm.X > -2100f) && (fish.PositionMm.X < -2050f)) && ((fish.PositionMm.Z > 100f) && (fish.PositionMm.Z < 130f))) | |
{ | |
this.decisions[fishnum].VCode = 0; | |
this.decisions[fishnum].TCode = 0; | |
} | |
} | |
else if ((((fish.BodyDirectionRad < ((-this.pi / 180f) * 80f)) && (fish.BodyDirectionRad > ((-this.pi / 180f) * 100f))) && ((fish.PositionMm.X > -2100f) && (fish.PositionMm.X < -2050f))) && ((fish.PositionMm.Z < -100f) && (fish.PositionMm.Z > -130f))) | |
{ | |
this.decisions[fishnum].VCode = 0; | |
this.decisions[fishnum].TCode = 0; | |
} | |
} | |
else | |
{ | |
fish = mission.TeamsRef[teamId].Fishes[fishnum]; | |
if ((fish.BodyDirectionRad > ((this.pi / 180f) * 80f)) && (fish.BodyDirectionRad < ((this.pi / 180f) * 100f))) | |
{ | |
if (((fish.PositionMm.X < 2100f) && (fish.PositionMm.X > 2050f)) && ((fish.PositionMm.Z > 100f) && (fish.PositionMm.Z < 130f))) | |
{ | |
this.decisions[fishnum].VCode = 0; | |
this.decisions[fishnum].TCode = 0; | |
} | |
} | |
else if ((((fish.BodyDirectionRad < ((-this.pi / 180f) * 80f)) && (fish.BodyDirectionRad > ((-this.pi / 180f) * 100f))) && ((fish.PositionMm.X < 2100f) && (fish.PositionMm.X > 2050f))) && ((fish.PositionMm.Z < -100f) && (fish.PositionMm.Z > -130f))) | |
{ | |
this.decisions[fishnum].VCode = 0; | |
this.decisions[fishnum].TCode = 0; | |
} | |
} | |
} | |
public Vector3 transpos(Vector3 fishpos, Vector3 ballpos, double[,] trans) | |
{ | |
return new Vector3 { X = (float)((trans[0, 0] * (fishpos.X - ballpos.X)) + (trans[0, 1] * (fishpos.Z - ballpos.Z))), Y = 0f, Z = (float)((trans[1, 0] * (fishpos.X - ballpos.X)) + (trans[1, 1] * (fishpos.Z - ballpos.Z))) }; | |
} | |
public Vector3 transposdiv(Vector3 fishpos, Vector3 ballpos, double[,] transdiv) | |
{ | |
return new Vector3 { X = ((float)((transdiv[0, 0] * fishpos.X) + (transdiv[0, 1] * fishpos.Z))) + ballpos.X, Y = 0f, Z = ((float)((transdiv[1, 0] * fishpos.X) + (transdiv[1, 1] * fishpos.Z))) + ballpos.Z }; | |
} | |
public void turnrad(ref Decision decision, Vector3 fishpos, float fishrad, Vector3 dest, float deltadest, float destrad, float deltarad, Mission mission, int teamId, int fishid) | |
{ | |
float num = Math.Abs((float)(fishpos.X - dest.X)); | |
float num2 = Math.Abs((float)(fishpos.Z - dest.Z)); | |
int times = 0; | |
if (((num * num) + (num2 * num2)) > (deltadest * deltadest)) | |
{ | |
URWPGSim2D.StrategyHelper.Helpers.PoseToPose(ref decision, mission.TeamsRef[teamId].Fishes[fishid], dest, destrad, 10f, 58f, mission.CommonPara.MsPerCycle, ref times); | |
} | |
else if ((fishrad >= (destrad - deltarad)) && (fishrad <= (destrad + deltarad))) | |
{ | |
decision.VCode = 0; | |
decision.TCode = 7; | |
} | |
else if (fishrad < (destrad - deltarad)) | |
{ | |
decision.VCode = 1; | |
decision.TCode = 14; | |
} | |
else | |
{ | |
decision.VCode = 1; | |
decision.TCode = 0; | |
} | |
} | |
} | |
#endregion | |
#region cyj | |
public class CYJStrategy | |
{ | |
Decision[] decisions; | |
public float dist(xna.Vector3 v1, xna.Vector3 v2) | |
{ | |
double d = ((v1.X - v2.X) * (v1.X - v2.X)) + ((v1.Z - v2.Z) * (v1.Z - v2.Z)); | |
return (float)Math.Sqrt(d); | |
} | |
public static void myDribble(ref Decision decision, RoboFish fish, xna.Vector3 destPtMm, float destDirRad, float angleTheta1, float angleTheta2, float disThreshold, int VCode1, int VCode2, int cycles, int msPerCycle, bool flag) | |
{ | |
double num = ((double)(15 * msPerCycle)) / 1000.0; | |
double num2 = ((double)(cycles * msPerCycle)) / 1000.0; | |
xna.Vector3 vector = flag ? fish.PositionMm : fish.PolygonVertices[0]; | |
double num3 = Math.Sqrt(Math.Pow((double)(destPtMm.X - vector.X), 2.0) + Math.Pow((double)(destPtMm.Z - vector.Z), 2.0)); | |
double num4 = xna.MathHelper.ToRadians(Helpers.GetAngleDegree(destPtMm - fish.PositionMm)); | |
if (num3 < 30.0) | |
{ | |
num4 = destDirRad; | |
} | |
double num5 = num4 - fish.BodyDirectionRad; | |
if (num5 > 3.1415926535897931) | |
{ | |
num5 -= 6.2831853071795862; | |
} | |
else if (num5 < -3.1415926535897931) | |
{ | |
num5 += 6.2831853071795862; | |
} | |
float num6 = (Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[0]) + Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[14])) / 2f; | |
double num7 = Math.Abs((double)(num5 / ((double)num6))); | |
double num8 = num3 / ((double)DataBasedOnExperiment.VCodeAndVelocityTable[14]); | |
if (num8 > num) | |
{ | |
num8 = num; | |
} | |
double num9 = num5 / num8; | |
int index = 7; | |
if (num5 > 0.0) | |
{ | |
while ((index < 14) && (DataBasedOnExperiment.TCodeAndAngularVelocityTable[index] < num9)) | |
{ | |
index++; | |
} | |
if ((fish.AngularVelocityRadPs * num2) > num5) | |
{ | |
index = 0; | |
} | |
} | |
else | |
{ | |
while ((index > 0) && (DataBasedOnExperiment.TCodeAndAngularVelocityTable[index] > num9)) | |
{ | |
index--; | |
} | |
if ((fish.AngularVelocityRadPs * num2) < num5) | |
{ | |
index = 14; | |
} | |
} | |
decision.TCode = index; | |
switch (decision.TCode) | |
{ | |
case 0: | |
decision.VCode = 10; | |
break; | |
case 1: | |
decision.VCode = 10; | |
break; | |
case 2: | |
decision.VCode = 10; | |
break; | |
case 3: | |
decision.VCode = 14; | |
break; | |
case 4: | |
decision.VCode = 14; | |
break; | |
case 5: | |
decision.VCode = 14; | |
break; | |
case 6: | |
decision.VCode = 14; | |
break; | |
case 8: | |
decision.VCode = 14; | |
break; | |
case 9: | |
decision.VCode = 14; | |
break; | |
case 10: | |
decision.VCode = 14; | |
break; | |
case 11: | |
decision.VCode = 14; | |
break; | |
case 12: | |
decision.VCode = 10; | |
break; | |
case 13: | |
decision.VCode = 10; | |
break; | |
case 14: | |
decision.VCode = 10; | |
break; | |
} | |
} | |
public Decision[] Attack(Mission mission, int teamId) | |
{ | |
Decision[] decisionArray = null; | |
int num = 1; | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) | |
{ | |
num = -1; | |
} | |
xna.Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
if (decisionArray == null) | |
{ | |
decisionArray = new Decision[mission.CommonPara.FishCntPerTeam]; | |
} | |
for (int i = 0; i < mission.CommonPara.FishCntPerTeam; i++) | |
{ | |
xna.Vector3 vector2 = mission.TeamsRef[teamId].Fishes[i].PolygonVertices[0]; | |
decisionArray[i].VCode = 14; | |
decisionArray[i].TCode = 7; | |
xna.Vector3 vector3 = new xna.Vector3(num * 2250f, 0f, 0f); | |
xna.Vector3 vector4 = new xna.Vector3(); | |
xna.Vector3 vector5 = new xna.Vector3(); | |
vector5 = (xna.Vector3)(((positionMm - vector3) / this.dist(positionMm, vector3)) * mission.EnvRef.Balls[0].RadiusMm); | |
vector4 = positionMm + ((xna.Vector3)(0.9f * vector5)); | |
float destDirRad = xna.MathHelper.ToRadians(Helpers.GetAngleDegree(vector3 - vector4)); | |
if (this.dist(vector2, vector4) > 800f) | |
{ | |
myDribble(ref decisionArray[i], mission.TeamsRef[teamId].Fishes[i], vector4, destDirRad, 5f, 10f, 150f, 12, 8, 15, 100, true); | |
Console.WriteLine("{0:d}th 800", i + 1); | |
} | |
else if (this.dist(mission.EnvRef.Balls[0].PositionMm, vector3) > 100f) | |
{ | |
Console.WriteLine("{0:d}th 100", i + 1); | |
Helpers.Dribble(ref decisionArray[i], mission.TeamsRef[teamId].Fishes[i], vector4, destDirRad, 10f, 20f, 150f, 14, 14, 15, 100, true); | |
} | |
else | |
{ | |
Console.WriteLine("{0:d}th stop", i + 1); | |
decisionArray[i].VCode = 0; | |
decisionArray[i].TCode = 7; | |
} | |
} | |
if (num == 1) | |
{ | |
if ((mission.TeamsRef[teamId].Fishes[2].PositionMm.X > 350f) && (Math.Abs(mission.TeamsRef[teamId].Fishes[2].BodyDirectionRad) < 1.7951958020513104)) | |
{ | |
decisionArray[2].VCode = 0; | |
decisionArray[2].TCode = 7; | |
Helpers.Dribble(ref decisionArray[2], mission.TeamsRef[teamId].Fishes[2], new xna.Vector3(0f, 0f, 0f), 1.570796f, 5f, 10f, 150f, 12, 8, 15, 100, true); | |
} | |
if ((mission.TeamsRef[teamId].Fishes[3].PositionMm.X < -350f) && (Math.Abs(mission.TeamsRef[teamId].Fishes[3].BodyDirectionRad) > 1.7951958020513104)) | |
{ | |
decisionArray[3].VCode = 0; | |
decisionArray[3].TCode = 7; | |
Helpers.Dribble(ref decisionArray[3], mission.TeamsRef[teamId].Fishes[3], new xna.Vector3(0f, 0f, 0f), 1.570796f, 5f, 10f, 150f, 12, 8, 15, 100, true); | |
} | |
return decisionArray; | |
} | |
if ((mission.TeamsRef[teamId].Fishes[2].PositionMm.X < -350f) && (Math.Abs(mission.TeamsRef[teamId].Fishes[2].BodyDirectionRad) > 1.7951958020513104)) | |
{ | |
decisionArray[2].VCode = 0; | |
decisionArray[2].TCode = 7; | |
Helpers.Dribble(ref decisionArray[2], mission.TeamsRef[teamId].Fishes[2], new xna.Vector3(0f, 0f, 0f), 1.570796f, 5f, 10f, 150f, 12, 8, 15, 100, true); | |
} | |
if ((mission.TeamsRef[teamId].Fishes[3].PositionMm.X > 350f) && (Math.Abs(mission.TeamsRef[teamId].Fishes[3].BodyDirectionRad) < 1.7951958020513104)) | |
{ | |
decisionArray[3].VCode = 0; | |
decisionArray[3].TCode = 7; | |
Helpers.Dribble(ref decisionArray[3], mission.TeamsRef[teamId].Fishes[3], new xna.Vector3(0f, 0f, 0f), 1.570796f, 5f, 10f, 150f, 12, 8, 15, 100, true); | |
} | |
return decisionArray; | |
} | |
public Decision[] GetDecision(Mission mission, int teamId) | |
{ | |
if (this.decisions == null) | |
{ | |
this.decisions = new Decision[mission.CommonPara.FishCntPerTeam]; | |
} | |
if (((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) && (mission.EnvRef.Balls[0].PositionMm.X < 0f)) || ((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) && (mission.EnvRef.Balls[0].PositionMm.X >= 0f))) | |
{ | |
this.decisions = this.Attack(mission, teamId); | |
} | |
else if (((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) && (mission.EnvRef.Balls[0].PositionMm.X >= 0f)) || ((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) && (mission.EnvRef.Balls[0].PositionMm.X < 0f))) | |
{ | |
this.decisions = this.Attack(mission, teamId); | |
} | |
return this.decisions; | |
} | |
} | |
#endregion | |
#region tk | |
public class TKStrategy | |
{ | |
private Vector3[] corner = null; | |
private bool debug = true; | |
private Decision[] decisions = null; | |
private float defenceLine; | |
private float offenceLine; | |
private int onArea; | |
private float R = 0f; | |
private int[] times = null; | |
private Decision actFast(int i, Vector3 position, Vector3 fishPm, double bodyDirectionRad) | |
{ | |
double x = fishPm.X; | |
double z = fishPm.Z; | |
double num3 = position.X; | |
double num4 = position.Z; | |
double num5 = Math.Atan((num4 - z) / (num3 - x)); | |
if ((num3 - x) < 0.0) | |
{ | |
if (num5 > 0.0) | |
{ | |
num5 -= 3.1415926535897931; | |
} | |
else | |
{ | |
num5 += 3.1415926535897931; | |
} | |
} | |
double num6 = num5 - bodyDirectionRad; | |
if (num6 > 3.1415926535897931) | |
{ | |
num6 -= 6.2831853071795862; | |
} | |
else if (num6 < -3.1415926535897931) | |
{ | |
num6 += 6.2831853071795862; | |
} | |
double num7 = Math.Sqrt(Math.Pow(x - num3, 2.0) + Math.Pow(z - num4, 2.0)); | |
if (num6 > 0.0) | |
{ | |
if (Math.Abs(num6) > 0.31415926535897931) | |
{ | |
this.decisions[i].TCode = 15; | |
this.decisions[i].VCode = 1; | |
} | |
else | |
{ | |
this.decisions[i].TCode = 7; | |
if (num7 > 10.0) | |
{ | |
this.decisions[i].VCode = 15; | |
} | |
else | |
{ | |
this.decisions[i].VCode = 0; | |
} | |
} | |
} | |
if (num6 < 0.0) | |
{ | |
if (Math.Abs(num6) > 0.31415926535897931) | |
{ | |
this.decisions[i].TCode = 0; | |
this.decisions[i].VCode = 1; | |
} | |
else | |
{ | |
this.decisions[i].TCode = 7; | |
if (num7 > 10.0) | |
{ | |
this.decisions[i].VCode = 15; | |
} | |
else | |
{ | |
this.decisions[i].VCode = 0; | |
} | |
} | |
} | |
return this.decisions[i]; | |
} | |
private void assert(bool condtion, string info) | |
{ | |
if (!condtion) | |
{ | |
Console.WriteLine("assert fail: " + info); | |
if (this.debug) | |
{ | |
Environment.Exit(-1); | |
} | |
} | |
} | |
private bool atLeft(Vector3 v, Vector3 p) | |
{ | |
float num = this.getAngle(v); | |
float num2 = this.getAngle(p); | |
if ((num * num2) < 0f) | |
{ | |
return !this.atLeft(v, -p); | |
} | |
return ((num - num2) >= 0f); | |
} | |
private bool dribble(Mission mission, int teamId, int fishId, Vector3 targetPoint, float targetTangle, Vector3 tempTarget, int v1, int v2) | |
{ | |
Vector3 vector = mission.TeamsRef[teamId].Fishes[fishId].PolygonVertices[0]; | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
float bodyDirectionRad = mission.TeamsRef[teamId].Fishes[fishId].BodyDirectionRad; | |
float num2 = 2f * this.R; | |
if (Vector3.Distance(targetPoint, vector) >= num2) | |
{ | |
Helpers.Dribble(ref this.decisions[fishId], mission.TeamsRef[teamId].Fishes[fishId], targetPoint, targetTangle, 10f, 20f, 100f, 14, 14, 15, mission.CommonPara.MsPerCycle, true); | |
} | |
else | |
{ | |
this.times[fishId] = 0; | |
Helpers.Dribble(ref this.decisions[fishId], mission.TeamsRef[teamId].Fishes[fishId], targetPoint, targetTangle, 5f, 10f, 100f, v1, v2, 15, mission.CommonPara.MsPerCycle, false); | |
} | |
return (Vector3.Distance(tempTarget, positionMm) <= 50f); | |
} | |
private float getAngle(Vector3 v) | |
{ | |
return MathHelper.ToRadians(Helpers.GetAngleDegree(v)); | |
} | |
private float getAngleBetween(Vector3 a, Vector3 b) | |
{ | |
return this.getAngleBetween(this.getAngle(a), this.getAngle(b)); | |
} | |
private float getAngleBetween(float a, float b) | |
{ | |
float num = b - a; | |
if (num < -3.1415926535897931) | |
{ | |
return (num + 6.283185f); | |
} | |
if (num > 3.1415926535897931) | |
{ | |
num -= 6.283185f; | |
} | |
return num; | |
} | |
private int getAngleLoc(Mission mission, int teamId, int fishId, float e) | |
{ | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
Vector3[] vectorArray = new Vector3[] { mission.TeamsRef[teamId].Fishes[this.getId(0)].PositionMm, mission.TeamsRef[teamId].Fishes[this.getId(1)].PositionMm, mission.TeamsRef[teamId].Fishes[this.getId(2)].PositionMm }; | |
int num = 0; | |
if (Vector3.Distance(vectorArray[fishId], positionMm) > e) | |
{ | |
return -1; | |
} | |
for (int i = 0; i < 3; i++) | |
{ | |
if ((i != fishId) && (this.atLeft(vectorArray[fishId] - positionMm, vectorArray[i] - positionMm) && (Vector3.Distance(vectorArray[i], positionMm) <= e))) | |
{ | |
num++; | |
} | |
} | |
return num; | |
} | |
private int getArea(Vector3 v, int onArea) | |
{ | |
if (onArea == 0) | |
{ | |
if (v.X <= -1700f) | |
{ | |
if (v.Z <= -500f) | |
{ | |
return 1; | |
} | |
if (v.Z <= 500f) | |
{ | |
return 2; | |
} | |
return 3; | |
} | |
if (v.X <= -500f) | |
{ | |
return 4; | |
} | |
if (v.X <= 500f) | |
{ | |
return 5; | |
} | |
if (v.X <= 1700f) | |
{ | |
return 6; | |
} | |
if (v.Z <= -500f) | |
{ | |
return 7; | |
} | |
if (v.Z <= 500f) | |
{ | |
return 8; | |
} | |
return 9; | |
} | |
return (10 - this.getArea(v, 1 - onArea)); | |
} | |
public Decision[] GetDecision(Mission mission, int teamId) | |
{ | |
int num; | |
Vector3 vector7; | |
if (this.decisions == null) | |
{ | |
this.decisions = new Decision[mission.CommonPara.FishCntPerTeam]; | |
this.times = new int[mission.CommonPara.FishCntPerTeam]; | |
for (num = 0; num < mission.CommonPara.FishCntPerTeam; num++) | |
{ | |
this.times[num] = 0; | |
} | |
this.corner = new Vector3[] { new Vector3(-2100f, 0f, -1500f), new Vector3(-2100f, 0f, 1500f), new Vector3(2100f, 0f, -1500f), new Vector3(2100f, 0f, 1500f) }; | |
this.R = mission.EnvRef.Balls[0].RadiusMm; | |
} | |
this.print(new object[] { "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`" }); | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
float e = 300f; | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == 0) | |
{ | |
this.onArea = 0; | |
} | |
else | |
{ | |
this.onArea = 1; | |
} | |
if (this.onArea == 0) | |
{ | |
this.offenceLine = 500f; | |
this.defenceLine = -500f; | |
vector7 = new Vector3(2250f, 0f, 0f); | |
} | |
else | |
{ | |
this.offenceLine = -500f; | |
this.defenceLine = 500f; | |
vector7 = new Vector3(-2250f, 0f, 0f); | |
} | |
// this.assert(this.onArea == teamId, "onArea == teamId"); | |
int num3 = this.getArea(positionMm, this.onArea); | |
for (num = 0; num < 3; num++) | |
{ | |
Vector3 vector4; | |
Vector3 vector5; | |
Vector3 vector6; | |
float num4; | |
int fishId = this.getId(num); | |
float bodyDirectionRad = mission.TeamsRef[teamId].Fishes[fishId].BodyDirectionRad; | |
Vector3 vector = mission.TeamsRef[teamId].Fishes[fishId].PositionMm; | |
Vector3 vector2 = mission.TeamsRef[teamId].Fishes[fishId].PolygonVertices[0]; | |
if ((num3 == 1) || (num3 == 3)) | |
{ | |
vector5 = this.getNearestCorner(positionMm); | |
Console.WriteLine("go to Corner " + vector5.ToString()); | |
vector6 = vector5 - positionMm; | |
vector6.Normalize(); | |
vector4 = positionMm - ((Vector3)((vector6 * 0.9f) * this.R)); | |
num4 = this.getAngle(vector5 - vector4); | |
this.dribble(mission, teamId, fishId, vector4, num4, vector5, 14, 12); | |
} | |
else | |
{ | |
vector5 = vector7; | |
vector6 = vector5 - positionMm; | |
vector6 = (Vector3)(vector6 / Vector3.Distance(vector5, positionMm)); | |
if ((this.getNearNum(mission, teamId, e) == 3) && (this.getAngleLoc(mission, teamId, num, e) == 2)) | |
{ | |
vector6 = this.getUnit(this.getAngle(vector6) + MathHelper.ToRadians(30f)); | |
} | |
if ((this.getNearNum(mission, teamId, e) == 3) && (this.getAngleLoc(mission, teamId, num, e) == 0)) | |
{ | |
vector6 = this.getUnit(this.getAngle(vector6) + MathHelper.ToRadians(-30f)); | |
} | |
if ((this.getNearNum(mission, teamId, e) == 2) && (this.getAngleLoc(mission, teamId, num, e) == 1)) | |
{ | |
vector6 = this.getUnit(this.getAngle(vector6) + MathHelper.ToRadians(20f)); | |
} | |
if ((this.getNearNum(mission, teamId, e) == 2) && (this.getAngleLoc(mission, teamId, num, e) == 0)) | |
{ | |
vector6 = this.getUnit(this.getAngle(vector6) + MathHelper.ToRadians(-20f)); | |
} | |
vector4 = positionMm - ((Vector3)((vector6 * 0.85f) * this.R)); | |
num4 = this.getAngle(vector5 - vector4); | |
if (num3 > 4) | |
{ | |
this.dribble(mission, teamId, fishId, vector4, num4, vector5, 14, 14); | |
} | |
else | |
{ | |
this.dribble(mission, teamId, fishId, vector4, num4, vector5, 14, 12); | |
} | |
if ((Math.Abs(this.getAngleBetween(this.getAngle(positionMm - vector2), num4)) <= MathHelper.ToRadians(10f)) && (Vector3.Distance(vector2, positionMm) <= (1.1f * this.R))) | |
{ | |
this.decisions[fishId].VCode = 15; | |
} | |
} | |
if (num == 1) | |
{ | |
if (num3 > 5) | |
{ | |
vector4 = new Vector3((this.offenceLine * 2f) / 3f, 0f, positionMm.Z); | |
num4 = this.getAngle(vector4 - vector2); | |
this.run(mission, teamId, fishId, vector4, num4); | |
} | |
} | |
else if ((num == 2) && (num3 < 5)) | |
{ | |
vector4 = new Vector3((this.defenceLine * 2f) / 3f, 0f, positionMm.Z); | |
num4 = this.getAngle(vector4 - vector2); | |
this.run(mission, teamId, fishId, vector4, num4); | |
} | |
} | |
this.print(new object[] { "onArea", this.onArea, num3 }); | |
this.motionless(1); | |
this.motionless(4); | |
return this.decisions; | |
} | |
private int getId(int myId) | |
{ | |
if (myId != 0) | |
{ | |
return (myId + 1); | |
} | |
return 0; | |
} | |
private Vector3 getNearestCorner(Vector3 v) | |
{ | |
float num = 1E+08f; | |
int index = 0; | |
for (int i = 0; i < 4; i++) | |
{ | |
if (Vector3.Distance(v, this.corner[i]) < num) | |
{ | |
num = Vector3.Distance(v, this.corner[i]); | |
index = i; | |
} | |
} | |
return this.corner[index]; | |
} | |
private int getNearNum(Mission mission, int teamId, float e) | |
{ | |
if (teamId == 2) | |
{ | |
return (this.getNearNum(mission, 0, e) + this.getNearNum(mission, 1, e)); | |
} | |
Vector3 positionMm = mission.EnvRef.Balls[0].PositionMm; | |
Vector3[] vectorArray = new Vector3[] { mission.TeamsRef[teamId].Fishes[this.getId(0)].PositionMm, mission.TeamsRef[teamId].Fishes[this.getId(1)].PositionMm, mission.TeamsRef[teamId].Fishes[this.getId(2)].PositionMm }; | |
int num = 0; | |
for (int i = 0; i < 3; i++) | |
{ | |
if (Vector3.Distance(vectorArray[i], positionMm) <= e) | |
{ | |
num++; | |
} | |
} | |
return num; | |
} | |
private Vector3 getUnit(float angle) | |
{ | |
return new Vector3(Convert.ToSingle(Math.Cos((double)angle)), 0f, Convert.ToSingle(Math.Sin((double)angle))); | |
} | |
private void motionless(int fishId) | |
{ | |
this.decisions[fishId].VCode = 0; | |
this.decisions[fishId].TCode = 7; | |
} | |
private Decision PointToPointFast(Vector3 DesPositionMm, Vector3 StartPositionMm, float StartDirection) | |
{ | |
int num6; | |
Decision decision = new Decision(); | |
decision.TCode = 7; | |
decision.VCode = 15; | |
Vector3 v = DesPositionMm - StartPositionMm; | |
float num = this.getAngle(v); | |
float num2 = StartDirection - num; | |
float num3 = (num * 180f) / 3.141593f; | |
float num4 = (StartDirection * 180f) / 3.141593f; | |
float num5 = Math.Abs((float)(num4 - num3)); | |
if (num2 > 3.1415926535897931) | |
{ | |
num2 -= 6.283185f; | |
} | |
else if (num2 < -3.1415926535897931) | |
{ | |
num2 += 6.283185f; | |
} | |
if (num2 <= 0f) | |
{ | |
for (num6 = 8; num6 <= 15; num6++) | |
{ | |
if (Math.Abs(num2) > Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[num6])) | |
{ | |
decision.TCode = num6; | |
if (Math.Abs(num2) > 1.1) | |
{ | |
decision.TCode = 14; | |
} | |
} | |
} | |
} | |
else | |
{ | |
for (num6 = 6; num6 >= 0; num6--) | |
{ | |
if (Math.Abs(num2) > Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[num6])) | |
{ | |
decision.TCode = num6; | |
if (Math.Abs(num2) > 1.1) | |
{ | |
decision.TCode = 0; | |
} | |
} | |
} | |
} | |
switch (decision.TCode) | |
{ | |
case 0: | |
case 14: | |
case 15: | |
decision.VCode = 8; | |
return decision; | |
case 1: | |
case 13: | |
decision.VCode = 10; | |
return decision; | |
case 2: | |
case 12: | |
decision.VCode = 13; | |
return decision; | |
case 3: | |
case 4: | |
case 5: | |
case 6: | |
case 8: | |
case 9: | |
case 10: | |
case 11: | |
decision.VCode = 14; | |
return decision; | |
case 7: | |
return decision; | |
} | |
return decision; | |
} | |
public void PoseToPose(ref Decision decision, RoboFish fish, Vector3 destPtMm, float destDirRad, float minTheta, float maxTheta) | |
{ | |
minTheta = MathHelper.ToRadians(minTheta); | |
minTheta = MathHelper.ToRadians(maxTheta); | |
double num = Vector3.Distance(destPtMm, fish.PolygonVertices[0]); | |
double num2 = this.getAngle(destPtMm - fish.PositionMm); | |
if (num < 30.0) | |
{ | |
num2 = destDirRad; | |
} | |
double num3 = num2 - fish.BodyDirectionRad; | |
if (num3 > 3.1415926535897931) | |
{ | |
num3 -= 6.2831854820251465; | |
} | |
else if (num3 < -3.1415926535897931) | |
{ | |
num3 += 6.2831854820251465; | |
} | |
float num4 = (Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[0]) + Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[14])) / 2f; | |
double num5 = Math.Abs((double)(num3 / ((double)num4))); | |
double num6 = num / num5; | |
int index = 9; | |
while ((index < 14) && (DataBasedOnExperiment.VCodeAndVelocityTable[index] < num6)) | |
{ | |
index++; | |
} | |
decision.VCode = index; | |
if (Math.Abs(num3) > maxTheta) | |
{ | |
decision.VCode = 2; | |
} | |
else if (Math.Abs(num3) < minTheta) | |
{ | |
decision.VCode = 14; | |
} | |
double num8 = num / ((double)DataBasedOnExperiment.VCodeAndVelocityTable[14]); | |
if (num8 > 1.5) | |
{ | |
num8 = 1.5; | |
} | |
double num9 = num3 / num8; | |
index = 7; | |
if (num3 <= 0.0) | |
{ | |
while ((index > 0) && (DataBasedOnExperiment.TCodeAndAngularVelocityTable[index] > num9)) | |
{ | |
index--; | |
} | |
if ((((double)fish.AngularVelocityRadPs) / 2.0) < num3) | |
{ | |
index = 13; | |
} | |
} | |
else | |
{ | |
while ((index < 14) && (DataBasedOnExperiment.TCodeAndAngularVelocityTable[index] < num9)) | |
{ | |
index++; | |
} | |
if ((((double)fish.AngularVelocityRadPs) / 2.0) > num3) | |
{ | |
index = 1; | |
} | |
} | |
decision.TCode = index; | |
} | |
private void print(params object[] strs) | |
{ | |
string str = ""; | |
for (int i = 0; i < strs.Length; i++) | |
{ | |
str = str + strs[i].ToString() + " "; | |
} | |
Console.WriteLine(str); | |
} | |
private bool run(Mission mission, int teamID, int fishID, Vector3 targetPoint, float targetTangle) | |
{ | |
Vector3 positionMm = mission.TeamsRef[teamID].Fishes[fishID].PositionMm; | |
Helpers.Dribble(ref this.decisions[fishID], mission.TeamsRef[teamID].Fishes[fishID], targetPoint, targetTangle, 5f, 10f, 150f, 14, 12, 10, mission.CommonPara.MsPerCycle, false); | |
return (Vector3.Distance(targetPoint, positionMm) <= 50f); | |
} | |
private void rush(Mission mission, int teamId, int id, Vector3 targetPoint, float targetAngle) | |
{ | |
float bodyDirectionRad = mission.TeamsRef[teamId].Fishes[id].BodyDirectionRad; | |
this.decisions[id].TCode = 7; | |
this.decisions[id].VCode = 15; | |
int num3 = Convert.ToInt16((float)(this.getAngleBetween(targetAngle, bodyDirectionRad) / MathHelper.ToRadians(10f))); | |
if ((num3 >= 0) && (num3 <= 7)) | |
{ | |
this.decisions[id].TCode = 7 + num3; | |
} | |
else if ((num3 < 0) && (num3 >= -8)) | |
{ | |
this.decisions[id].TCode = 8 + num3; | |
} | |
else if (num3 < -8) | |
{ | |
this.decisions[id].TCode = 0; | |
} | |
else | |
{ | |
this.decisions[id].TCode = 14; | |
} | |
} | |
} | |
#endregion | |
#region bxk | |
public class BXKStrategy | |
{ | |
private Decision[] decisions = null; | |
private float dg; | |
private const float MAX_DELTA_THETA = 0.5235988f; | |
private float mg; | |
private const float MIN_DELTA_THETA = 0.08726646f; | |
private double r; | |
private double[] tTable = new double[] { -0.35519999265670776, -0.29210001230239868, -0.2199999988079071, -0.17309999465942383, -0.12349999696016312, -0.078400000929832458, -0.055300001055002213, -0.0048000002279877663, 0.046999998390674591, 0.083499997854232788, 0.13220000267028809, 0.16539999842643738, 0.23909999430179596, 0.29199999570846558, 0.34389999508857727 }; | |
private double[] vTable = new double[] { 0.0, 0.0, 0.0, 60.0, 101.0, 112.0, 112.0, 154.0, 169.0, 205.0, 268.0, 289.0, 298.0, 294.0, 307.0 }; | |
private double xg; | |
private double zg; | |
public float CalVectorAngle(Vector3 vector) | |
{ | |
if (((Math.Abs(vector.X) > float.Epsilon) || (Math.Abs(vector.Y) > float.Epsilon)) || (Math.Abs(vector.Z) > float.Epsilon)) | |
{ | |
vector.Normalize(); | |
} | |
float num = Vector3.Dot(vector, new Vector3(1f, 0f, 0f)); | |
if (num > 1f) | |
{ | |
num = 1f; | |
} | |
else if (num < -1f) | |
{ | |
num = -1f; | |
} | |
float num2 = (float)Math.Acos((double)num); | |
if (vector.Z < 0f) | |
{ | |
num2 = -num2; | |
} | |
if (num2 > 3.141593f) | |
{ | |
return (num2 - 6.283185f); | |
} | |
if (num2 < -3.141593f) | |
{ | |
num2 += 6.283185f; | |
} | |
return num2; | |
} | |
public float CalVectorAngleDiff(Vector3 BaseEmitPostion, Vector3 BaseTailPositon, float AngleOfCalVectror) | |
{ | |
Vector3 vector = BaseTailPositon - BaseEmitPostion; | |
float num = AngleOfCalVectror - this.CalVectorAngle(vector); | |
if (num < -3.1415926535897931) | |
{ | |
return (num + 6.283185f); | |
} | |
if (num > 3.1415926535897931) | |
{ | |
num -= 6.283185f; | |
} | |
return num; | |
} | |
public int Compare(float a, float b, float c, float d, float e) | |
{ | |
int num = 6; | |
if ((((a <= b) && (a <= c)) && (a <= d)) && (a <= e)) | |
{ | |
num = 0; | |
} | |
if ((((b <= a) && (b <= c)) && (b <= d)) && (b <= e)) | |
{ | |
num = 1; | |
} | |
if ((((c <= a) && (c <= b)) && (c <= d)) && (c <= e)) | |
{ | |
num = 2; | |
} | |
if ((((d <= a) && (d <= b)) && (d <= c)) && (d <= e)) | |
{ | |
num = 3; | |
} | |
if ((((e <= a) && (e <= b)) && (e <= c)) && (e <= d)) | |
{ | |
num = 4; | |
} | |
return num; | |
} | |
public float Farth(Vector3 BaseEmitPostion, Vector3 BaseTailPositon) | |
{ | |
Vector3 vector = BaseTailPositon - BaseEmitPostion; | |
return (float)Math.Sqrt((double)(((vector.X * vector.X) + (vector.Y * vector.Y)) + (vector.Z * vector.Z))); | |
} | |
public static double GetAngleDegree(Vector2 v) | |
{ | |
float x = v.X; | |
float y = v.Y; | |
double num3 = 0.0; | |
if (Math.Abs(x) < float.Epsilon) | |
{ | |
if (Math.Abs(y) < float.Epsilon) | |
{ | |
return 0.0; | |
} | |
if (y > 0f) | |
{ | |
return 90.0; | |
} | |
if (y < 0f) | |
{ | |
num3 = -90.0; | |
} | |
return num3; | |
} | |
if (x < 0f) | |
{ | |
if (y >= 0f) | |
{ | |
return (((180.0 * Math.Atan((double)(y / x))) / 3.1415926535897931) + 180.0); | |
} | |
return (((180.0 * Math.Atan((double)(y / x))) / 3.1415926535897931) - 180.0); | |
} | |
return ((180.0 * Math.Atan((double)(y / x))) / 3.1415926535897931); | |
} | |
public static double GetAngleDegree(Vector3 v) | |
{ | |
float x = v.X; | |
float z = v.Z; | |
double num3 = 0.0; | |
if (Math.Abs(x) < float.Epsilon) | |
{ | |
if (Math.Abs(z) < float.Epsilon) | |
{ | |
return 0.0; | |
} | |
if (z > 0f) | |
{ | |
return 90.0; | |
} | |
if (z < 0f) | |
{ | |
num3 = -90.0; | |
} | |
return num3; | |
} | |
if (x < 0f) | |
{ | |
if (z >= 0f) | |
{ | |
return (((180.0 * Math.Atan((double)(z / x))) / 3.1415926535897931) + 180.0); | |
} | |
return (((180.0 * Math.Atan((double)(z / x))) / 3.1415926535897931) - 180.0); | |
} | |
return ((180.0 * Math.Atan((double)(z / x))) / 3.1415926535897931); | |
} | |
public Decision[] GetDecision(Mission mission, int teamId) | |
{ | |
int num; | |
RoboFish fish; | |
Ball ball; | |
Vector3 vector3; | |
Vector3 vector7; | |
int num18; | |
double num19; | |
double num20; | |
if (this.decisions == null) | |
{ | |
this.decisions = new Decision[mission.CommonPara.FishCntPerTeam]; | |
this.r = mission.EnvRef.Balls[0].RadiusMm; | |
this.zg = 0.0; | |
} | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) | |
{ | |
this.xg = 1350.0 + this.r; | |
this.dg = -750f; | |
this.mg = -1350f; | |
} | |
else | |
{ | |
this.xg = -1350.0 - this.r; | |
this.dg = 750f; | |
this.mg = 1350f; | |
} | |
Vector3 baseTailPositon = new Vector3((float)this.xg, 0f, (float)this.zg); | |
Vector3 vector2 = baseTailPositon; | |
for (num = 0; num < mission.CommonPara.FishCntPerTeam; num++) | |
{ | |
fish = mission.TeamsRef[teamId].Fishes[num]; | |
ball = mission.EnvRef.Balls[0]; | |
double d = MathHelper.ToRadians((float)GetAngleDegree(baseTailPositon - ball.PositionMm)); | |
vector3 = new Vector3(ball.PositionMm.X - ((float)(this.r * Math.Cos(d))), 0f, ball.PositionMm.Z - ((float)(this.r * Math.Sin(d)))); | |
double introduced33 = Math.Pow((double)(vector3.X - fish.PolygonVertices[0].X), 2.0); | |
double num3 = Math.Sqrt(introduced33 + Math.Pow((double)(vector3.Z - fish.PolygonVertices[0].Z), 2.0)); | |
double num4 = MathHelper.ToRadians((float)GetAngleDegree(vector3 - fish.PositionMm)); | |
if (num3 < 30.0) | |
{ | |
num4 = d; | |
} | |
double num5 = num4 - fish.BodyDirectionRad; | |
if (num5 > 3.1415926535897931) | |
{ | |
num5 -= 6.2831853071795862; | |
} | |
else if (num5 < -3.1415926535897931) | |
{ | |
num5 += 6.2831853071795862; | |
} | |
double num6 = Math.Abs((double)(num5 / this.tTable[0])); | |
double num7 = num3 / num6; | |
int index = 1; | |
while ((index < 14) && (this.vTable[index] < num7)) | |
{ | |
index++; | |
} | |
this.decisions[num].VCode = index; | |
if (Math.Abs(num5) > 0.52) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
double num9 = MathHelper.ToRadians((float)GetAngleDegree(ball.PositionMm - fish.PositionMm)); | |
if (Math.Abs((double)(num9 - fish.BodyDirectionRad)) < 0.087) | |
{ | |
this.decisions[num].VCode = 14; | |
} | |
double num10 = num3 / this.vTable[14]; | |
if (num10 > 1.5) | |
{ | |
num10 = 1.5; | |
} | |
double num11 = num5 / num10; | |
index = 7; | |
if (num5 > 0.0) | |
{ | |
goto Label_03F4; | |
} | |
while ((index > 0) && (this.tTable[index] > num11)) | |
{ | |
index--; | |
} | |
if ((((double)fish.AngularVelocityRadPs) / 2.0) < num5) | |
{ | |
index = 13; | |
} | |
goto Label_0434; | |
Label_03EC: | |
index++; | |
Label_03F4: | |
if ((index < 14) && (this.tTable[index] < num11)) | |
{ | |
goto Label_03EC; | |
} | |
if ((((double)fish.AngularVelocityRadPs) / 2.0) > num5) | |
{ | |
index = 1; | |
} | |
Label_0434: | |
this.decisions[num].TCode = index; | |
} | |
for (num = 0; num < mission.CommonPara.FishCntPerTeam; num++) | |
{ | |
fish = mission.TeamsRef[teamId].Fishes[num]; | |
ball = mission.EnvRef.Balls[0]; | |
float destDirRad = MathHelper.ToRadians((float)GetAngleDegree(baseTailPositon - ball.PositionMm)); | |
vector3 = new Vector3(ball.PositionMm.X - ((float)(this.r * Math.Cos((double)destDirRad))), 0f, ball.PositionMm.Z - ((float)(this.r * Math.Sin((double)destDirRad)))); | |
float[] numArray = new float[5]; | |
float[] numArray2 = new float[5]; | |
Vector3 vector6 = new Vector3(this.mg, 0f, 0f); | |
float num13 = this.Farth(ball.PositionMm, vector6); | |
int num14 = 0; | |
while (num14 < 5) | |
{ | |
numArray[num14] = this.Farth(mission.TeamsRef[teamId].Fishes[num14].PositionMm, ball.PositionMm); | |
num14++; | |
} | |
for (num14 = 0; num14 < 5; num14++) | |
{ | |
numArray2[num14] = this.Farth(mission.TeamsRef[teamId].Fishes[num14].PositionMm, baseTailPositon); | |
} | |
int num15 = this.Compare(numArray[0], numArray[1], numArray[2], numArray[3], numArray[4]); | |
int num16 = this.Compare(numArray2[0], numArray2[1], numArray2[2], numArray2[3], numArray2[4]); | |
if (num13 < 700f) | |
{ | |
Vector3 vector4 = new Vector3(this.dg, 0f, 1000f); | |
Vector3 vector5 = new Vector3(this.dg, 0f, -1000f); | |
if (ball.PositionMm.Z >= mission.TeamsRef[teamId].Fishes[num15].PositionMm.Z) | |
{ | |
baseTailPositon = vector4; | |
} | |
else | |
{ | |
baseTailPositon = vector5; | |
} | |
PoseToPose(ref this.decisions[num], fish, vector3, destDirRad, 0.08726646f, 0.5235988f); | |
} | |
else | |
{ | |
baseTailPositon = vector2; | |
PoseToPose(ref this.decisions[num], fish, vector3, destDirRad, 0.08726646f, 0.5235988f); | |
} | |
float num17 = this.Farth(ball.PositionMm, baseTailPositon); | |
} | |
if (mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) | |
{ | |
if ((mission.EnvRef.Balls[0].PositionMm.X <= 2250f) && (mission.EnvRef.Balls[0].PositionMm.X >= 500f)) | |
{ | |
for (num = 1; num < 3; num++) | |
{ | |
this.decisions[num].VCode = 0; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
if ((mission.EnvRef.Balls[0].PositionMm.X <= -500f) && (mission.EnvRef.Balls[0].PositionMm.X >= -2250f)) | |
{ | |
for (num = 3; num < 5; num++) | |
{ | |
this.decisions[num].VCode = 0; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
} | |
else | |
{ | |
if ((mission.EnvRef.Balls[0].PositionMm.X <= 2250f) && (mission.EnvRef.Balls[0].PositionMm.X >= 500f)) | |
{ | |
for (num = 3; num < 5; num++) | |
{ | |
this.decisions[num].VCode = 0; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
if ((mission.EnvRef.Balls[0].PositionMm.X <= -500f) && (mission.EnvRef.Balls[0].PositionMm.X >= -2250f)) | |
{ | |
for (num = 1; num < 3; num++) | |
{ | |
this.decisions[num].VCode = 0; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
} | |
if (((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) && (mission.EnvRef.Balls[0].PositionMm.X <= -1300f)) && (mission.EnvRef.Balls[0].PositionMm.X >= -2250f)) | |
{ | |
num18 = 0; | |
num = 0; | |
num19 = 0.0; | |
for (num = 0; num < 5; num++) | |
{ | |
if ((num != 1) && (num != 2)) | |
{ | |
num20 = this.Farth(mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[1 - teamId].Fishes[num].PositionMm); | |
if (num20 > num19) | |
{ | |
num19 = num20; | |
num18 = num; | |
} | |
} | |
} | |
vector7 = mission.TeamsRef[1 - teamId].Fishes[num18].PolygonVertices[0]; | |
this.decisions[1] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[1].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[1].AngularVelocityRadPs); | |
} | |
if (((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) && (mission.EnvRef.Balls[0].PositionMm.X >= 1300f)) && (mission.EnvRef.Balls[0].PositionMm.X <= 2250f)) | |
{ | |
num18 = 0; | |
num = 0; | |
num19 = 0.0; | |
for (num = 0; num < 5; num++) | |
{ | |
if ((num != 1) && (num != 2)) | |
{ | |
num20 = this.Farth(mission.TeamsRef[teamId].Fishes[1].PositionMm, mission.TeamsRef[1 - teamId].Fishes[num].PositionMm); | |
if (num20 > num19) | |
{ | |
num19 = num20; | |
num18 = num; | |
} | |
} | |
} | |
vector7 = mission.TeamsRef[1 - teamId].Fishes[num18].PolygonVertices[0]; | |
this.decisions[1] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[1].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[1].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[1].AngularVelocityRadPs); | |
} | |
for (num = 0; num < 5; num++) | |
{ | |
switch (num) | |
{ | |
case 3: | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) && (mission.EnvRef.Balls[0].PositionMm.X <= -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(-250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z + 500f); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
if (this.Farth(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0]) < 30f) | |
{ | |
this.decisions[num].VCode = 1; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) && (mission.EnvRef.Balls[0].PositionMm.X >= 500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z + 500f); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
if (this.Farth(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0]) < 30f) | |
{ | |
this.decisions[num].VCode = 1; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
break; | |
case 4: | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) && (mission.EnvRef.Balls[0].PositionMm.X <= -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(-250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
if (this.Farth(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0]) < 30f) | |
{ | |
this.decisions[num].VCode = 1; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) && (mission.EnvRef.Balls[0].PositionMm.X >= 500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
if (this.Farth(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0]) < 30f) | |
{ | |
this.decisions[num].VCode = 1; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
break; | |
case 1: | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) && (mission.EnvRef.Balls[0].PositionMm.X >= 500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z + 500f); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
if (this.Farth(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0]) < 30f) | |
{ | |
this.decisions[num].VCode = 1; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) && (mission.EnvRef.Balls[0].PositionMm.X <= -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(-250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z + 500f); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
if (this.Farth(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0]) < 30f) | |
{ | |
this.decisions[num].VCode = 1; | |
this.decisions[num].TCode = 7; | |
} | |
} | |
break; | |
case 2: | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.LEFT) && (mission.EnvRef.Balls[0].PositionMm.X >= 500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
} | |
if ((((mission.TeamsRef[teamId].Para.MyHalfCourt == HalfCourt.RIGHT) && (mission.EnvRef.Balls[0].PositionMm.X <= -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X > -500f)) && (mission.TeamsRef[teamId].Fishes[num].PositionMm.X < 500f)) | |
{ | |
vector7 = new Vector3(-250f, 0f, mission.EnvRef.Balls[0].PositionMm.Z); | |
this.decisions[num] = this.Pose2P(vector7, mission.TeamsRef[teamId].Fishes[num].PolygonVertices[0], mission.TeamsRef[teamId].Fishes[num].BodyDirectionRad, mission.TeamsRef[teamId].Fishes[num].AngularVelocityRadPs); | |
if ((this.decisions[num].TCode > 12) || (this.decisions[num].TCode < 4)) | |
{ | |
this.decisions[num].VCode = 1; | |
} | |
} | |
break; | |
} | |
} | |
return this.decisions; | |
} | |
public Decision Pose2P(Vector3 GoalP, Vector3 FishP, float FishDir, float FishAngularVelocityRadPs) | |
{ | |
Decision decision = new Decision(); | |
float num = this.CalVectorAngleDiff(FishP, GoalP, FishDir) + (FishAngularVelocityRadPs * 0.1f); | |
int num2 = 0; | |
int num3 = 0; | |
num2 = -((int)(num / 0.08984955f)) + 7; | |
if (num2 < 0) | |
{ | |
num2 = 0; | |
} | |
else if (num2 > 14) | |
{ | |
num2 = 14; | |
} | |
num3 = 0x11 - (Math.Abs((int)(num2 - 7)) * 2); | |
if (num3 < 0) | |
{ | |
num3 = 0; | |
} | |
else if (num3 > 14) | |
{ | |
num3 = 15; | |
} | |
decision.VCode = num3; | |
decision.TCode = num2; | |
return decision; | |
} | |
public static void PoseToPose(ref Decision decision, RoboFish fish, Vector3 destPtMm, float destDirRad, float minTheta, float maxTheta) | |
{ | |
double num = Math.Sqrt(Math.Pow((double)(destPtMm.X - fish.PolygonVertices[0].X), 2.0) + Math.Pow((double)(destPtMm.Z - fish.PolygonVertices[0].Z), 2.0)); | |
double num2 = MathHelper.ToRadians((float)GetAngleDegree(destPtMm - fish.PositionMm)); | |
if (num < 30.0) | |
{ | |
num2 = destDirRad; | |
} | |
double num3 = num2 - fish.BodyDirectionRad; | |
if (num3 > 3.1415926535897931) | |
{ | |
num3 -= 6.2831853071795862; | |
} | |
else if (num3 < -3.1415926535897931) | |
{ | |
num3 += 6.2831853071795862; | |
} | |
float num4 = (Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[0]) + Math.Abs(DataBasedOnExperiment.TCodeAndAngularVelocityTable[14])) / 2f; | |
double num5 = Math.Abs((double)(num3 / ((double)num4))); | |
double num6 = num / num5; | |
int index = 9; | |
while ((index < 14) && (DataBasedOnExperiment.VCodeAndVelocityTable[index] < num6)) | |
{ | |
index++; | |
} | |
decision.VCode = index; | |
if (Math.Abs(num3) > maxTheta) | |
{ | |
decision.VCode = 2; | |
} | |
else if (Math.Abs(num3) < minTheta) | |
{ | |
decision.VCode = 14; | |
} | |
double num8 = num / ((double)DataBasedOnExperiment.VCodeAndVelocityTable[14]); | |
if (num8 > 1.5) | |
{ | |
num8 = 1.5; | |
} | |
double num9 = num3 / num8; | |
index = 7; | |
if (num3 > 0.0) | |
{ | |
while ((index < 14) && (DataBasedOnExperiment.TCodeAndAngularVelocityTable[index] < num9)) | |
{ | |
index++; | |
} | |
if ((((double)fish.AngularVelocityRadPs) / 2.0) > num3) | |
{ | |
index = 1; | |
} | |
} | |
else | |
{ | |
while ((index > 0) && (DataBasedOnExperiment.TCodeAndAngularVelocityTable[index] > num9)) | |
{ | |
index--; | |
} | |
if ((((double)fish.AngularVelocityRadPs) / 2.0) < num3) | |
{ | |
index = 13; | |
} | |
} | |
decision.TCode = index; | |
} | |
} | |
#endregion | |
#region main | |
public class Strategy : MarshalByRefObject, IStrategy | |
{ | |
#region decisions def | |
private Decision[] decisions = null; | |
private Decision[] zdwDecisions = null; | |
private Decision[] cyjDecisions = null; | |
private Decision[] tkDecisions = null; | |
private Decision[] bxkDecisions = null; | |
#endregion | |
#region strategy def | |
private ZDWStrategy zdwStrategy = new ZDWStrategy(); | |
private CYJStrategy cyjStrategy = new CYJStrategy(); | |
private TKStrategy tkStrategy = new TKStrategy(); | |
private BXKStrategy bxkStrategy = new BXKStrategy(); | |
#endregion | |
/// <summary> | |
/// 获取队伍名称 在此处设置参赛队伍的名称 | |
/// </summary> | |
/// <returns>队伍名称字符串</returns> | |
public string GetTeamName() | |
{ | |
return "t3"; | |
} | |
/// <summary> | |
/// 获取当前仿真使命(比赛项目)当前队伍所有仿真机器鱼的决策数据构成的数组 | |
/// </summary> | |
/// <param name="mission">服务端当前运行着的仿真使命Mission对象</param> | |
/// <param name="teamId">当前队伍在服务端运行着的仿真使命中所处的编号 | |
/// 用于作为索引访问Mission对象的TeamsRef队伍列表中代表当前队伍的元素</param> | |
/// <returns>当前队伍所有仿真机器鱼的决策数据构成的Decision数组对象</returns> | |
public Decision[] GetDecision(Mission mission, int teamId) | |
{ | |
xna.Vector3 f1 = mission.TeamsRef[teamId].Fishes[0].PolygonVertices[0]; | |
xna.Vector3 f3 = mission.TeamsRef[teamId].Fishes[2].PolygonVertices[2]; | |
xna.Vector3 f4 = mission.TeamsRef[teamId].Fishes[2].PolygonVertices[3]; | |
xna.Vector3 ball = mission.EnvRef.Balls[0].PositionMm; | |
double d = mission.EnvRef.Balls[0].RadiusMm * 15; | |
if (CourtSit.ballArea(mission, teamId) == -1) | |
{ | |
decisions = tkStrategy.GetDecision(mission, teamId); | |
if (Math.Abs(mission.EnvRef.Balls[0].PositionMm.X) >= 1250) | |
{ | |
decisions = cyjStrategy.GetDecision(mission, teamId); | |
} | |
} | |
else if (CourtSit.ballArea(mission, teamId) == 0) | |
{ | |
decisions = tkStrategy.GetDecision(mission, teamId); | |
} | |
else | |
{ | |
decisions = tkStrategy.GetDecision(mission, teamId); | |
if(Math.Abs(mission.EnvRef.Balls[0].PositionMm.X)>=1800) | |
{ | |
d = d * 2; | |
} | |
} | |
bxkDecisions = bxkStrategy.GetDecision(mission, teamId); | |
xna.Vector3 dis1 = f1 - ball; | |
xna.Vector3 dis2 = f3 - ball; | |
xna.Vector3 dis3 = f4 - ball; | |
if (dis1.Length() > d) | |
{ | |
decisions[0] = bxkDecisions[0]; | |
} | |
if (dis2.Length() > d) | |
{ | |
decisions[2] = bxkDecisions[2]; | |
} | |
if (dis3.Length() > d) | |
{ | |
decisions[3] = bxkDecisions[3]; | |
} | |
return decisions; | |
} | |
} | |
#endregion | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment