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;
        }
Exemple #2
0
        /// <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;
            }
        }
Exemple #4
0
        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;
 }