public ChaseCamera(GraphicsDevice g, Vehicule TargetToChase) : base(g) { CameraPosition3D = new Vector3(0, 0, 0f); CameraOffset = new Vector3(0, 10f, -20f); TargetOffset = new Vector3(0, 5, 0); this.TargetToChase = TargetToChase; }
/// <summary> /// Get an Angle between self and an object. The method assume the target is in front. /// </summary> /// <param name="Target">Target Vehicule</param> /// <returns>Returns value between -1 and 1</returns> public float GetAngleBetweenTarget(Vehicule Target) { Vector3 PositionAngle = Vector3.Normalize(Target.Position - Position); if (Vector3.Dot(Right, PositionAngle) > 0) { return(-(float)Math.Acos(Vector3.Dot(Target.Forward, PositionAngle))); } return((float)Math.Acos(Vector3.Dot(Target.Forward, PositionAngle))); }
private void UpdateAngleFromPlayer(Vehicule PlayerVehicule) { float AngleBetweenPlayer = MathHelper.ToDegrees(PlayerVehicule.GetAngleBetweenTarget(this)); int FinalAngle = 0; bool Mirror = AngleBetweenPlayer > 0; if (AngleBetweenPlayer <= 2f && AngleBetweenPlayer >= -2f) { FinalAngle = 0; } else if (AngleBetweenPlayer <= 7f && AngleBetweenPlayer >= -7f) { FinalAngle = 5; } else if (AngleBetweenPlayer <= 15f && AngleBetweenPlayer >= -15) { FinalAngle = 10; } else if (AngleBetweenPlayer <= 30f && AngleBetweenPlayer >= -30f) { FinalAngle = 25; } else if (AngleBetweenPlayer <= 40f && AngleBetweenPlayer >= -40f) { FinalAngle = 35; } else if (AngleBetweenPlayer <= 52f && AngleBetweenPlayer >= -52f) { FinalAngle = 45; } else if (AngleBetweenPlayer <= 75f && AngleBetweenPlayer >= -75f) { FinalAngle = 65; } else if (AngleBetweenPlayer <= 100f && AngleBetweenPlayer >= -100f) { FinalAngle = 90; } if (LastAngle != AngleBetweenPlayer) { if (Mirror) { VehiculeDrawablePart.SetTexture(DicVehiculeSpritePerAngle[-FinalAngle]); } else { VehiculeDrawablePart.SetTexture(DicVehiculeSpritePerAngle[FinalAngle]); } LastAngle = AngleBetweenPlayer; } }
public override void Load() { fntFinlanderFont = Content.Load <SpriteFont>("Fonts/Finlander Font"); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(5, 0, 0))); ListVehicule[0].ListActionMenuChoice.Add(new ActionPanelAIFirstAction(ListVehicule[0])); //ListVehicule[0].ListActionMenuChoice.Add(new ActionPanelPlayerAction(ListVehicule[0])); ListVehicule[0].Load(Content, GraphicsDevice); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(0, 0, 0))); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(-5, 0, 5))); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(10, 0, 10))); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(-10, 0, 16))); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(0, 0, 20))); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(-5, 0, 35))); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(10, 0, 30))); ListVehicule.Add(new Vehicule2D(ListAITunnel, ListCollisionBox, GraphicsDevice, new Vector3(-10, 0, 46))); for (int V = 1; V < ListVehicule.Count; ++V) { ListVehicule[V].ListActionMenuChoice.Add(new ActionPanelAIFirstAction(ListVehicule[V])); ListVehicule[V].Load(Content, GraphicsDevice); } ActiveVehicule = ListVehicule[5]; Camera = new ChaseCamera(GraphicsDevice, ActiveVehicule); if (!string.IsNullOrEmpty(MapPath)) { FileStream FS = new FileStream("Content/Maps/Racing/" + MapPath + ".pem", FileMode.Open, FileAccess.Read); BinaryReader BR = new BinaryReader(FS, Encoding.UTF8); BR.BaseStream.Seek(0, SeekOrigin.Begin); int ListAITunnelCount = BR.ReadInt32(); for (int T = 0; T < ListAITunnelCount; ++T) { ListAITunnel.Add(AITunnel.Load(BR, GraphicsDevice, Camera.Projection)); } int ListCollisionBoxCount = BR.ReadInt32(); for (int T = 0; T < ListCollisionBoxCount; ++T) { ListCollisionBox.Add(CollisionBox.Load(BR, GraphicsDevice, Camera.Projection)); } BR.Close(); FS.Close(); LinkAITunnelTogether(); } }
public ActionPanelPlayerAction(Vehicule ActiveVehicule) : base("Player Action", ActiveVehicule, false) { }
public ActionPanelAIFirstAction(Vehicule ActiveVehicule) : base("AI First Action", ActiveVehicule, false) { }
public ActionPanelFollowAITunnel(Vehicule ActiveVehicule) : base("Follow AI Tunnel", ActiveVehicule, false) { }
public ActionPanelRacing(string Name, Vehicule ActiveVehicule, bool CanCancel = true) : base(Name, ActiveVehicule.ListActionMenuChoice, CanCancel) { this.ActiveVehicule = ActiveVehicule; }