public bool canPlace(Tower t) { Color[] pixels = new Color[t.texture.Width * t.texture.Height]; renderTarget.GetData(0, new Rectangle((int)(t.Pos.X - t.Offset.X), (int)(t.Pos.Y - t.Offset.Y), t.texture.Width, t.texture.Height), pixels, 0, pixels.Length); //renderTarget.GetData(0, new Rectangle((int)(t.Pos.X), (int)(t.Pos.Y), t.texture.Width, t.texture.Height), pixels, 0, pixels.Length); bool isColliding = t.PixelCollition(pixels, new Rectangle(0, 0, t.texture.Width, t.texture.Height)); t.canPlace = isColliding; return !isColliding; }
public void Update(SpriteBatch spriteBatch) { ObjectFactory(); KeyboardState keyState = Keyboard.GetState(); if (WasKeyPressed(Keys.D1, keyState)) { Tower t = new NormalTower(penguinNormal, new Vector2(Mouse.GetState().Position.X, Mouse.GetState().Position.Y)); selcetedTower = t; } if (WasKeyPressed(Keys.D2, keyState)) { Tower t = new ExplosiveTower(penguinMad, new Vector2(Mouse.GetState().Position.X, Mouse.GetState().Position.Y)); selcetedTower = t; } //if (WasKeyPressed(Keys.D3, keyState)) //{ // Tower t = new Tower(penguinKing, new Vector2(Mouse.GetState().Position.X, Mouse.GetState().Position.Y)); // selcetedTower = t; //} if (selcetedTower != null) { selcetedTower.Pos = new Vector2(Mouse.GetState().Position.X, Mouse.GetState().Position.Y); } prevKeyState = keyState; if (WasLeftMouseButtonPressed()) { if (selcetedTower != null && canPlace(selcetedTower)) { Tower t = selcetedTower.Copy(); t.Activate(); tower.Add(t); UpdateRenderTarget(spriteBatch); } } prevLeftMouseButtonState = Mouse.GetState().LeftButton; foreach (Enemy e in enemy) { e.Update(); } if (selcetedTower != null) { canPlace(selcetedTower); } foreach (Tower t in tower) { foreach (Enemy e in enemy) { Shoot(t, e); } } foreach (Shot s in shot) { s.Update(); } emitter.EmitterLocation = new Vector2(Mouse.GetState().X, Mouse.GetState().Y); emitter.Update(); clock.AddTime(0.01f); }
public void Shoot(Tower t, Enemy e) { if (Vector2.Distance(t.Pos, e.GetPos()) < range && clock.Timer() < 0.01f) { shot.Add(new Shot(shotsprite, t.Pos, e)); } }