Skip to content

Instantly share code, notes, and snippets.

@thuzhf
Created July 21, 2014 02:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thuzhf/11109f4819c94f69d0b7 to your computer and use it in GitHub Desktop.
Save thuzhf/11109f4819c94f69d0b7 to your computer and use it in GitHub Desktop.
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