public override void OnStart() { RenderedModel = transform.FindChild("Render").gameObject; ModelCollider = RenderedModel.GetComponentInChildren <BoxCollider>(); Physics.IgnoreLayerCollision(LayerMask.NameToLayer("LocalPlayer"), LayerMask.NameToLayer("Weapon")); }
public Model3d(DataModel dataModel) { dataModel_origin = dataModel; dataModel_cur = dataModel_origin.DeepCopy(); renderedModel = new RenderedModel(dataModel_origin); }
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); } }
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); }
public void Add(RenderedModel model) { models.Add(model); }