예제 #1
0
 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;
 }
예제 #2
0
        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);
        }
예제 #3
0
        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));
            }
        }