예제 #1
0
    public override void OnStart()
    {
        RenderedModel = transform.FindChild("Render").gameObject;
        ModelCollider = RenderedModel.GetComponentInChildren <BoxCollider>();

        Physics.IgnoreLayerCollision(LayerMask.NameToLayer("LocalPlayer"), LayerMask.NameToLayer("Weapon"));
    }
예제 #2
0
    public Model3d(DataModel dataModel)
    {
        dataModel_origin = dataModel;

        dataModel_cur = dataModel_origin.DeepCopy();

        renderedModel = new RenderedModel(dataModel_origin);
    }
예제 #3
0
        public void Update(GameTime gameTime, Player player)
        {
            road.Update(gameTime, player.Position.Y);

            //Destroy coins which the player has passed
            foreach (KeyValuePair <Body, Coin> pair in coins)
            {
                if (pair.Value.Position.Y < player.Position.Y - 10)
                {
                    DestroyCoin(pair.Key);
                }
                pair.Value.Update(gameTime);
            }

            //Destroy models which the player has passed
            for (int i = models.Count - 1; i >= 0; i--)
            {
                RenderedModel model = models[i];
                if (model.Position.Y + 20 < player.Position.Y)
                {
                    models.RemoveAt(i);
                }
            }

            //We can only delete bodies after a physics timestep, so we
            //place coins to be deleted in a queue and delete them next frame
            while (coinDeleteQueue.Count > 0)
            {
                Body b = coinDeleteQueue.Dequeue();
                world.Remove(b);
                coins.Remove(b);
            }

            //Spawn in a big orange sign
            if (player.Position.Y > lastBigSignSpawn + 200)
            {
                lastBigSignSpawn = player.Position.Y + 30;
                BigSign model = BigSign.Instantiate(content);
                model.Position = new Vector3(0, lastBigSignSpawn, 0);
                models.Add(model);
            }

            //Spawn in a coin
            if (TrafficGame.Difficulty >= 0.2f && player.Position.Y > lastCoinSpawn + 10)
            {
                Random r = new Random();
                lastCoinSpawn = player.Position.Y + r.Next(30, 40);
                Vector2 pos  = new Vector2(r.NextDouble().Map(0, 1, -Road.Size / 2, Road.Size / 2), player.Position.Y + lastCoinSpawn);
                var     coin = new Coin(content, world, pos);
                coins.Add(coin.Body, coin);
            }
        }
예제 #4
0
        public Car(ContentManager content, CarType type, World world, float initialSpeed)
        {
            this.World   = world;
            Type         = type;
            DesiredSpeed = initialSpeed;
            InitialSpeed = initialSpeed;

            model       = new RenderedModel(content, type.ModelName, type.TextureName);
            model.Color = colors[new Random().Next(0, colors.Length)];

            BodySize = new Vector2(type.Width, type.Length);

            float rTop = Type.RadiusTop;
            float rBot = Type.RadiusBottom;

            //Some cars rounded bumpers. This code computes the points for these curves. (see the debug view)
            Vertices verts     = new Vertices();
            int      steps     = 4;
            float    angleStep = MathHelper.Pi / steps;

            //Top curve
            for (int i = 0; i <= steps; i++)
            {
                float angle = angleStep * i;
                verts.Add(new Vector2((float)Math.Cos(angle) * BodySize.X / 2, (float)Math.Sin(angle) * rTop + (BodySize.Y / 2 - rTop)));
            }

            //Bottom curve
            for (int i = 0; i <= steps; i++)
            {
                float angle = angleStep * i + MathHelper.Pi;
                verts.Add(new Vector2((float)Math.Cos(angle) * BodySize.X / 2, (float)Math.Sin(angle) * rBot - (BodySize.Y / 2 - rBot)));
            }

            //Create the physics object
            Body = world.CreateBody();
            Body.CreatePolygon(verts, 1f);
            Body.BodyType       = BodyType.Dynamic;
            Body.AngularDamping = 0.5f;
            Body.LinearVelocity = new Vector2(0, initialSpeed);
        }
예제 #5
0
 public void Add(RenderedModel model)
 {
     models.Add(model);
 }