/// <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); }
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); }
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; }
/// <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); }
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())); } } } }
/// <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"); }
/// <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); }
/// <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; } }
/// <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; }
/// <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)); }
/// <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))); }