Пример #1
0
        /// <summary>
        /// Returns a rectangle that describes the area of overlap of the textures.
        /// </summary>
        /// <param name="s1">The first sprite.</param>
        /// <param name="s2">The second sprite.</param>
        /// <returns>The rectangle describing the overlap area.</returns>
        public static Rectangle GetOverlap(TPSprite s1, TPSprite s2)
        {
            Rectangle A = GetRect(s1);
            Rectangle B = GetRect(s2);
            int top = Math.Max(A.Top, B.Top);
            int bottom = Math.Min(A.Bottom, B.Bottom);
            int left = Math.Max(A.Left, B.Left);
            int right = Math.Min(A.Right, B.Right);

            return new Rectangle(left, top, right - left, bottom - top);
        }
Пример #2
0
        protected override void Load()
        {
            base.Load();
            myLayers = new TPLayer[NumLayers];
            for (int x = 0; x < NumLayers; x++)
            {
                myLayers[x] = new TPLayer(this.layers);
            }

            mySprite = new Bullseye(new Vector2(200, 200));
            myLayers[2].AddEntity(mySprite);

            backgroundTexture = new TPSprite(TPEngine.Get().TextureManager.LoadTexture(@"art/minigame/emaildetail"));
            backgroundTexture.Position = new Vector2(backgroundTexture.Position.X, backgroundTexture.Position.Y);
            myLayers[0].AddEntity(backgroundTexture);

            myLayers[2].AddEntity(bulletHole);
            myLayers[2].AddEntity(explosion);

            from.Position.X = 240;
            from.Position.Y = 165;
            from.RenderColor = Color.Black;

            subject.Position.X = 240 + from.HalfSize.X;
            subject.Position.Y = 250;
            subject.RenderColor = Color.Black;

            body.Position.X = 300;
            body.Position.Y = 400;
            body.RenderColor = Color.Black;

            myLayers[1].AddEntity(from);
            myLayers[1].AddEntity(subject);
            myLayers[1].AddEntity(body);

            if (FirstRunDetail)
            {
                TPEngine.Get().SpriteDictionary.Add("bulletHoleDetail", bulletHole);
                TPEngine.Get().SpriteDictionary.Add("explosionDetail", explosion);
                TPEngine.Get().SpriteDictionary.Add("MinigameMySpriteDetail", mySprite);
                TPEngine.Get().StringDictionary.Add("fromDetail", from);
                TPEngine.Get().StringDictionary.Add("subjectDetail", subject);
                TPEngine.Get().StringDictionary.Add("bodyDetail", body);
                FirstRunDetail = false;
            }
            //TPEngine.Get().StringDictionary.Add("MinigameLevel", level);
        }
Пример #3
0
        public static bool PerPixelTest(TPSprite spriteA, Color[] dataA, TPSprite spriteB, Color[] dataB)
        {
            Rectangle overlap;
            // Find the bounds of the rectangle intersection
            overlap = TPCollider.GetOverlap(spriteA, spriteB);

            // Check every point within the intersection bounds
            for (int y = overlap.Top; y < overlap.Bottom; y++)
            {
                for (int x = overlap.Left; x < overlap.Right; x++)
                {
                    int xipos;
                    int yipos;
                    if (spriteA.Position.X < 0)
                    {
                        xipos = (int)(x - Math.Ceiling(spriteA.Position.X));
                    }
                    else
                    {
                        xipos = (int)(x - Math.Floor(spriteA.Position.X));
                    }
                    if (spriteA.Position.Y < 0)
                    {
                        yipos = (int)(y - Math.Ceiling(spriteA.Position.Y));
                    }
                    else
                    {
                        yipos = (int)(y - Math.Floor(spriteA.Position.Y));
                    }
                    int dataAIndex = (int)(xipos + (yipos * spriteA.Width));
                    int dataBIndex = (int)((x - Math.Floor(spriteB.Position.X)) + (y - Math.Floor(spriteB.Position.Y)) * spriteB.Width);
                    // Get the color of both pixels at this point
                    Color colorA = dataA[dataAIndex];
                    Color colorB = dataB[dataBIndex];

                    // If both pixels are not completely transparent,
                    if (colorA.A != 0 && colorB.A != 0)
                    {
                        // then an intersection has been found
                        return true;
                    }
                }
            }

            // No intersection found
            return false;
        }
Пример #4
0
        /// <summary>
        /// Constructor of the TDStartState
        /// </summary>
        public TDStartState()
        {
            tdMouse = new TDPointer(new Vector2(200, 200));
            TDLayers = new TPLayer[numLayers];
            for (int i = 0; i < numLayers; i++)
            {
                TDLayers[i] = new TPLayer(layers);
            }
            background = new TPSprite(TPEngine.Get().TextureManager.LoadTexture(@"art/TowerDefense/StartScreenBackground"));
            TDLayers[0].AddEntity(background);
            TDLayers[numLayers-1].AddEntity(tdMouse);
            TowerDefenseManager.setLayers(TDLayers);

            menuwindow = new Window(menuxpos, menuypos, true, TPEngine.Get().TextureManager.LoadTexture(@"art/TowerDefense/startscreenWindow"));
            menuwindow.addButton(TPEngine.Get().TextureManager.LoadTexture(@"art/TowerDefense/StartButton"), "start", startGame);
            menuwindow.addButton(TPEngine.Get().TextureManager.LoadTexture(@"art/TowerDefense/ExitButton"), "exit", quitGame);
        }
Пример #5
0
        protected override void Load()
        {
            base.Load();
            //for (int i = 0; i < 10; i++)
            //{
            //    Items.Add(new TPString(scores[i].ToString()));
            //}
            Items.Add(new TPString("Email 1"));
            Items.Add(new TPString("Email 2"));
            Items.Add(new TPString("Email 3"));
            Items.Add(new TPString("Email 4"));
            Items.Add(new TPString("Email 5"));
            Items.Add(new TPString("Email 6"));
            Items.Add(new TPString("Email 7"));
            Items.Add(new TPString("Email 8"));
            Items.Add(new TPString("Email 9"));
            Items.Add(new TPString("Email 10"));

            myLayers = new TPLayer[NumLayers];
            for (int x = 0; x < NumLayers; x++)
            {
                myLayers[x] = new TPLayer(this.layers);
            }

            mySprite = new Bullseye(new Vector2(200, 200));
            myLayers[2].AddEntity(mySprite);
            myLayers[2].AddEntity(bulletHole);

            backgroundTexture = new TPSprite(TPEngine.Get().TextureManager.LoadTexture(@"art/Quest/emailview"));
            backgroundTexture.Position = new Vector2(backgroundTexture.Position.X, backgroundTexture.Position.Y);
            myLayers[0].AddEntity(backgroundTexture);

            if (Items.Count > 0)
            {
                for (int i = 0; i < Items.Count; i++)
                {
                    buttons.Add(new ReadMoreButton());
                }
                for (int i = 0; i < Items.Count; i++)
                {
                    myLayers[1].AddEntity(Items[i]);
                    myLayers[1].AddEntity(buttons[i]);
                }

                Items[0].Position.X = 150;
                Items[0].Position.Y = 200;
                Items[0].RenderColor = Color.Black;

                buttons[0].Position.X = 1050;
                buttons[0].Position.Y = 190;
                for (int i = 1; i < 10; i++)
                {
                    Items[i].Position.X = 150;
                    Items[i].Position.Y = Items[i - 1].Position.Y + 50;
                    Items[i].RenderColor = Color.Black;

                    buttons[i].Position.X = 1050;
                    buttons[i].Position.Y = buttons[i - 1].Position.Y + 50;
                }
            }

            if (FirstRunEmail)
            {
                TPEngine.Get().SpriteDictionary.Add("bulletHoleEmail", bulletHole);
                TPEngine.Get().SpriteDictionary.Add("MinigameMySpriteEmail", mySprite);
                FirstRunEmail = false;
                if (Items.Count > 0)
                {
                    for (int i = 0; i < 10; i++)
                    {
                        TPEngine.Get().StringDictionary.Add(string.Format("Email{0}", i), (TPString)Items[i]);
                        TPEngine.Get().StringDictionary.Add(string.Format("Button{0}", i), new TPString(buttons[i].ToString()));
                    }
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Loads the resources used by this state
        /// </summary>
        protected override void Load()
        {
            base.Load();

            tdMouse = new TDPointer(new Vector2(200, 200));
            TDLayers = new TPLayer[numLayers];
            for (int i = 0; i < numLayers; i++)
            {
                TDLayers[i] = new TPLayer(layers);
            }
            backgroundTexture = new TPSprite(TPEngine.Get().TextureManager.LoadTexture(@"art/TowerDefense/CurrentMap"));

            //backgroundTexture = new TPSprite(TPEngine.Get().TextureManager.LoadTexture(@"art/TowerDefense/mob"));
            TDLayers[0].AddEntity(backgroundTexture);
            TDLayers[5].AddEntity(tdMouse);

            map = new Map(1280, 720);
            TowerBuilder.Load(map);
            mp = new MapCreator(map);
            TowerDefenseManager.numLayers = numLayers;
            TowerDefenseManager.Start(map, TDLayers);
            Font = TPEngine.Get().FontManager.LoadFont(@"fonts/testfont");
        }
Пример #7
0
        /// <summary>
        /// Occurs when a tower button is clicked, makes the user hold a tower
        /// and ready for planting.
        /// </summary>
        /// <param name="tower">type of tower</param>
        public static void TowerBuildingClicked(string tower)
        {
            int cost = 0;
            switch (tower)
            {
                case "normal":
                    cost = NormalTower.Cost;
                    break;
                case "fast":
                    cost = FastTower.Cost;
                    break;
                case "strong":
                    cost = StrongTower.Cost;
                    break;
                case "spray":
                    cost = SprayTower.Cost;
                    break;
            }

            if (cost > TDPlayerStats.Money)
                return;

            holdingTower = true;
            towertype = tower;
            mouseclick = true;
            TowerHeld = new TDNormalTowerSprite();
            TowerDefenseManager.TDLayers[TowerDefenseManager.numLayers - 1].AddEntity(TowerHeld);
        }
Пример #8
0
        /// <summary>
        /// Updates this instance of the builder
        /// tower building is done here
        /// </summary>
        /// <param name="mousex">mouse x position</param>
        /// <param name="mousey">mouse y position</param>
        public static void Update(int mousex, int mousey)
        {
            Tower newtower;

            switch (towertype)
            {
                case "normal":
                    if(NormalTower.Unlocked && isValidLoc_NormalTower(mousex, mousey))
                    {
                        newtower = new NormalTower(mousex, mousey, UICreator.CurrentColor);
                        cliamLocation_NormalTower(mousex, mousey);
                        holdingTower = false;
                        TowerHeld.Kill();
                        TowerDefenseManager.TDLayers[TowerDefenseManager.numLayers - 1].RemoveEntity(TowerHeld);
                        TowerHeld = null;
                    }
                    break;
                case "fast":
                    if (FastTower.Unlocked  && isValidLoc_NormalTower(mousex, mousey))
                    {
                        newtower = new FastTower(mousex, mousey, UICreator.CurrentColor);
                        cliamLocation_NormalTower(mousex, mousey);
                        holdingTower = false;
                        TowerHeld.Kill();
                        TowerDefenseManager.TDLayers[TowerDefenseManager.numLayers - 1].RemoveEntity(TowerHeld);
                        TowerHeld = null;
                    }
                    break;

                case "strong":
                    if (StrongTower.Unlocked  && isValidLoc_NormalTower(mousex, mousey))
                    {
                        newtower = new StrongTower(mousex, mousey, UICreator.CurrentColor);
                        cliamLocation_NormalTower(mousex, mousey);
                        holdingTower = false;
                        TowerHeld.Kill();
                        TowerDefenseManager.TDLayers[TowerDefenseManager.numLayers - 1].RemoveEntity(TowerHeld);
                        TowerHeld = null;
                    }
                    break;

                case "spray":
                    if (SprayTower.Unlocked  && isValidLoc_NormalTower(mousex, mousey))
                    {
                        newtower = new SprayTower(mousex, mousey, UICreator.CurrentColor);
                        cliamLocation_NormalTower(mousex, mousey);
                        holdingTower = false;
                        TowerHeld.Kill();
                        TowerDefenseManager.TDLayers[TowerDefenseManager.numLayers - 1].RemoveEntity(TowerHeld);
                        TowerHeld = null;
                    }
                    break;
            }
        }
Пример #9
0
 /// <summary>
 /// Enemy Constructor
 /// Takes in a map for the enemy to traverse
 /// adds the enemy to the list of all enemies
 /// sets the enemy to the start location
 /// </summary>
 /// <param name="map">map for the enemy to traverse</param>
 public Enemy(Map map)
 {
     id = count++;
     int i;
     prevpos = new int[9][];
     spawnlocs = new int[3][];
     for (i = 0; i < 9; ++i)
     {
         prevpos[i] = new int[2];
     }
     this.map = map;
     spawnlocs[0] = findspawnLocs();
     ypos = spawnlocs[0][0];
     xpos = spawnlocs[0][1];
     addToPositions(xpos, ypos);
     Enemy.enemyList.Add(this);
     health = 100;
     enemySprite = new TdMobSprite();
     TowerDefenseManager.TDLayers[2].AddEntity(enemySprite);
     temp = (TdMobSprite)enemySprite;
     temp.maxHealth = temp.currHealth = health;
 }
Пример #10
0
 /// <summary>
 /// Transforms the sprite's texture into a rectangle that encompassed the same area.
 /// </summary>
 /// <param name="s">The sprite.</param>
 /// <returns>The rectangle that the sprite occupies.</returns>
 public static Rectangle GetRect(TPSprite s)
 {
     return new Rectangle((int)s.Position.X, (int)s.Position.Y, (int)(s.Width * s.Scale.X), (int)(s.Height * s.Scale.Y));
 }
Пример #11
0
 /// <summary>
 /// Test to see if the textures of two sprites overlap.
 /// </summary>
 /// <param name="s1">The first sprite.</param>
 /// <param name="s2">The second sprite</param>
 /// <returns>Whether or not the textures of the two sprites overlap (ie. they collide)</returns>
 public static bool Test(TPSprite s1, TPSprite s2)
 {
     return (GetRect(s1).Intersects(GetRect(s2)));
 }