// Start is called before the first frame update void Start() { objPlayer = GameObject.Find("Player"); player = objPlayer.GetComponent <Player>(); dirVec = new Vector3[4]; dirVec[0] = new Vector3(0, 1); dirVec[1] = new Vector3(1, 0); dirVec[2] = new Vector3(0, -1); dirVec[3] = new Vector3(-1, 0); sprEnemy = new Sprite[4]; sprEnemy[0] = sprEnemy0; sprEnemy[1] = sprEnemy1; sprEnemy[2] = sprEnemy2; sprEnemy[3] = sprEnemy3; HP = maxHP; map = new List <Tile3>(); path = new List <Tile3>(); openList = new List <Tile3>(); closeList = new List <Tile3>(); playerPos = new Vector3(0, 0, 0); GetMap(); Tile3 start = GetTile(transform.position.x, transform.position.y); Tile3 end = GetTile(0.25f, -0.05f); GetRoute(start, end); }
private bool IsNearLoc(Tile3 srcLoc, Tile3 targetLoc) { float diffX = Math.Abs(srcLoc.X - targetLoc.X); float diffY = Math.Abs(srcLoc.Y - targetLoc.Y); float err = 0.005f; return(diffX <= moveUnit + err && diffY <= moveUnit + err && !(Math.Abs(diffX - moveUnit) <= err && Math.Abs(diffY - moveUnit) <= err)); }
// Once the game needs to restart to its normal values in order to play again void resetGame() { Tile1.SetActive(false); Tile2.SetActive(false); Tile3.SetActive(false); pickTileText.SetActive(false); moneyAddFlag = true; }
public void Execute(Tile3 parent, Tile3 endTile) { Parent = parent; G = CalcGValue(parent, this); float diffX = Math.Abs(endTile.X - X); float diffY = Math.Abs(endTile.Y - Y); H = (diffX + diffY) / mSpd; }
public bool moneyAddFlag = true; // Flag to disable Play 100 from doing anything // Start is called before the first frame update void Start() { // Restart the amount of credits to zero at the beginning of the game creditAmount = 0; //Restart the playButton back to show up playButton.SetActive(true); // Don't show pick a tile text yet pickTileText.SetActive(false); // Let all the tiles be unactive until we hit play Tile1.SetActive(false); Tile2.SetActive(false); Tile3.SetActive(false); }
public static float CalcGValue(Tile3 parent, Tile3 current) { float diffX = Math.Abs(parent.X - current.X); float diffY = Math.Abs(parent.Y - current.Y); float value = moveUnit / mSpd; switch (current.Block) { case -1: value = 9999999; break; case 0: value = moveUnit / mSpd; break; case 1: //value = (hallHP / hallSize) / (atk * aSpd); value = 1; break; case 2: //value = (fenceHP / fenceSize) / (atk * aSpd); value = 2; break; case 3: //value = (farmHP / farmSize) / (atk * aSpd); value = 2; break; case 4: //value = (sanctumHP / sanctumSize) / (atk * aSpd); value = 2; break; case 5: //value = (forgeHP / forgeSize) / (atk * aSpd); value = 2; break; } return(parent.G + value); }
// Start is called before the first frame update void Start() { objPlayer = GameObject.Find("Player"); player = objPlayer.GetComponent <Player>(); dirVec = new Vector3[4]; dirVec[0] = new Vector3(0, 1); dirVec[1] = new Vector3(1, 0); dirVec[2] = new Vector3(0, -1); dirVec[3] = new Vector3(-1, 0); sprEnemyFront = new Sprite[5]; sprEnemyFront[0] = sprEnemyFront0; sprEnemyFront[1] = sprEnemyFront1; sprEnemyFront[2] = sprEnemyFront2; sprEnemyFront[3] = sprEnemyFront3; sprEnemyFront[4] = sprEnemyFront4; sprEnemyBack = new Sprite[5]; sprEnemyBack[0] = sprEnemyBack0; sprEnemyBack[1] = sprEnemyBack1; sprEnemyBack[2] = sprEnemyBack2; sprEnemyBack[3] = sprEnemyBack3; sprEnemyBack[4] = sprEnemyBack4; currentSprite = sprEnemyFront; HP = maxHP; map = new List <Tile3>(); path = new List <Tile3>(); openList = new List <Tile3>(); closeList = new List <Tile3>(); playerPos = new Vector3(0, 0, 0); GetMap(); Tile3 start = GetTile(transform.position.x, transform.position.y); Tile3 end = GetTile(0, 0); GetRoute(start, end); objWorld = GameObject.Find("World").GetComponent <World>(); }
/* * Button -> Play100 * GameObj -> addCreditsObj * Function -> This can only be played when Credits has 100 or more. When pressed, Credits will be reduced * by 100 and play beings. */ public void onClickPlay() { // This can only be played when credits have 100 or more if (creditAmount >= 100 && moneyAddFlag) { // When pressed, credits will be reduced by 100 creditAmount -= 100; // Display the current amount of credits creditText.text = "Credits: " + creditAmount.ToString(); // TODO: Start playing the game Tile1.SetActive(true); Tile2.SetActive(true); Tile3.SetActive(true); tile1Value = 0; tile2Value = 0; Tile3Value = 0; assignValues(); } }
void GetMap() { map.Clear(); for (int i = 0; i <= (2.05f - (-2.05f)) / 0.1f; i++) { for (int j = 0; j <= (2.05f - (-2.05f)) / 0.1f; j++) { int block = 0; float x = -2.05f + 0.1f * i; float y = -2.05f + 0.1f * j; RaycastHit2D raycast = Physics2D.Raycast(new Vector2(x - 0.01f, y - 0.01f), new Vector2(1, 1), 0.02f, LayerMask.GetMask("Object")); if (raycast) { switch (raycast.transform.tag) { case "Wall": block = -1; break; case "Hall": block = 1; break; case "Fence": block = 2; break; case "Farm": block = 3; break; case "Sanctum": block = 4; break; case "Forge": block = 5; break; } } var loc = new Tile3() { X = x, Y = y, Block = block }; map.Add(loc); } } }
Tile3 GetTile(float x, float y) { float xx = (int)(x / moveUnit) * moveUnit + 0.05f; float yy = (int)(y / moveUnit) * moveUnit + 0.05f; if (xx < 0) { xx -= moveUnit; } if (yy < 0) { yy -= moveUnit; } Tile3 resTile = map[0]; foreach (Tile3 tile in map) { if (tile.X - xx <= 0.01f && tile.Y - yy <= 0.01f) { resTile = tile; } } return(resTile); }
void GetRoute(Tile3 start, Tile3 end) { var startTile = start; var endTile = end; openList.Clear(); closeList.Clear(); path.Clear(); openList.Add(startTile); Tile3 tile = null; do { if (openList.Count == 0) { break; } tile = openList.OrderBy(o => o.F).First(); openList.Remove(tile); closeList.Add(tile); if (tile == endTile) { break; } foreach (var target in map) { if (target.Block == -1) { continue; } if (closeList.Contains(target)) { continue; } if (!IsNearLoc(tile, target)) { continue; } if (!openList.Contains(target)) { openList.Add(target); target.Execute(tile, endTile); } else { if (Tile3.CalcGValue(tile, target) < target.G) { target.Execute(tile, endTile); } } } }while (tile != null); if (tile != endTile) { Debug.Log("Stuck"); } do { path.Add(tile); tile = tile.Parent; }while (tile != null); path.Reverse(); while (GetTile(start.X, start.Y) == GetTile(path[0].X, path[0].Y)) { path.RemoveAt(0); } for (int i = 0; i < path.Count; i++) { Debug.DrawRay(new Vector3(path[i].X - 0.02f, path[i].Y), new Vector3(0.04f, 0), Color.white, 1); Debug.DrawRay(new Vector3(path[i].X, path[i].Y - 0.02f), new Vector3(0, 0.04f), Color.white, 1); } }
// Update is called once per frame void Update() { try { if (!isMoving) { if (!isPlayerTarget) { currentPos = transform.position; routePos = new Vector3(path[0].X, path[0].Y); RaycastHit2D raycast = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Object")); bool isInRangeTem = false; if (raycast) { if (path.IndexOf(GetTile(raycast.point.x, raycast.point.y)) >= 0) { isInRangeTem = true; cooldown -= Time.deltaTime; while (cooldown < 0) { raycast.collider.transform.parent.GetComponent <BuildingObject>().DamageBuilding(atk); cooldown += maxCooldown; } } } if (isInRangeTem == false) { isInRange = false; cooldown = maxCooldown / 2; isMoving = true; } } else { GetMap(); Tile3 start = GetTile(transform.position.x, transform.position.y); Tile3 end = GetTile(objPlayer.transform.position.x, objPlayer.transform.position.y); GetRoute(start, end); Debug.DrawRay(new Vector3(start.X - 0.02f, start.Y), new Vector3(0.04f, 0), Color.red, 1); Debug.DrawRay(new Vector3(start.X, start.Y - 0.02f), new Vector3(0, 0.04f), Color.red, 1); Debug.DrawRay(new Vector3(end.X - 0.02f, end.Y), new Vector3(0.04f, 0), Color.red, 1); Debug.DrawRay(new Vector3(end.X, end.Y - 0.02f), new Vector3(0, 0.04f), Color.red, 1); currentPos = transform.position; routePos = new Vector3(path[0].X, path[0].Y); RaycastHit2D raycast1 = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Player")); RaycastHit2D raycast2 = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Object")); bool isInRangeTem = false; if (raycast1 && !raycast2) { isInRangeTem = true; cooldown -= Time.deltaTime; while (cooldown < 0) { player.DamagePlayer(25); cooldown += maxCooldown; } } if (isInRangeTem == false) { isInRange = false; cooldown = maxCooldown / 2; isMoving = true; } } } if (isMoving) { transform.Translate(speed * Time.deltaTime * 10 * (routePos - currentPos).normalized * moveUnit, Space.World); if ((routePos - transform.position).magnitude <= 0.01f) { isMoving = false; transform.position = routePos; path.RemoveAt(0); } } } catch { } // Health bar gameObject.GetComponentsInChildren <SpriteRenderer>()[2].transform.localScale = new Vector3(1.2f * HP / maxHP, 0.2f, 0); gameObject.GetComponentsInChildren <SpriteRenderer>()[2].transform.localPosition = new Vector3(-0.6f * (1 - HP / maxHP), 1.3f, 0); }
void GetRoute(Tile3 start, Tile3 end) { var startTile = start; var endTile = end; openList.Clear(); closeList.Clear(); path.Clear(); openList.Add(startTile); Tile3 tile = null; List <Tile3> tileList; int index; do { if (openList.Count == 0) { break; } tile = openList.OrderBy(o => o.F).First(); openList.Remove(tile); closeList.Add(tile); tileList = new List <Tile3>(); index = map.IndexOf(tile); if (index < map.Count - 1) { tileList.Add(map[index + 1]); } if (index > 0) { tileList.Add(map[index - 1]); } if (index < map.Count - 42) { tileList.Add(map[index + 42]); } if (index > 41) { tileList.Add(map[index - 42]); } if (tile == endTile) { break; } if (tileList.Count == 0) { continue; } foreach (var target in tileList) { if (target.Block == -1) { continue; } if (closeList.Contains(target)) { continue; } if (!IsNearLoc(tile, target)) { continue; } if (!openList.Contains(target)) { openList.Add(target); target.Execute(tile, endTile); } else { if (Tile3.CalcGValue(tile, target) < target.G) { target.Execute(tile, endTile); } } } }while (tile != null); if (tile != endTile) { UnityEngine.Debug.Log("Stuck"); } do { path.Add(tile); tile = tile.Parent; }while (tile != null); path.Reverse(); while (GetTile(start.X, start.Y) == GetTile(path[0].X, path[0].Y)) { path.RemoveAt(0); } }
// Update is called once per frame void Update() { if (!objWorld.isGameOver) { try { if (!isMoving) { if (!isPlayerTarget) { currentPos = transform.position; routePos = new Vector3(path[0].X, path[0].Y); if (routePos.y - currentPos.y > 0.001f) { sightDir = 0; } else if (routePos.x - currentPos.x > 0.001f) { sightDir = 1; } else if (currentPos.y - routePos.y > 0.001f) { sightDir = 2; } else if (currentPos.x - routePos.x > 0.001f) { sightDir = 3; } RaycastHit2D raycast = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Object")); bool isInRangeTem = false; if (raycast) { isInRangeTem = true; cooldown -= Time.deltaTime; while (cooldown < 0) { raycast.collider.transform.parent.GetComponent <BuildingObject>().DamageBuilding(atk); cooldown += maxCooldown; } } if (isInRangeTem == false) { isInRange = false; cooldown = maxCooldown / 2; isMoving = true; } } else { GetMap(); Tile3 start = GetTile(transform.position.x, transform.position.y); Tile3 end = GetTile(objPlayer.transform.position.x, objPlayer.transform.position.y); GetRoute(start, end); currentPos = transform.position; routePos = new Vector3(path[0].X, path[0].Y); if (routePos.y - currentPos.y > 0.001f) { sightDir = 0; } else if (routePos.x - currentPos.x > 0.001f) { sightDir = 1; } else if (currentPos.y - routePos.y > 0.001f) { sightDir = 2; } else if (currentPos.x - routePos.x > 0.001f) { sightDir = 3; } RaycastHit2D raycast = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Player")); bool isInRangeTem = false; if (raycast) { isInRangeTem = true; cooldown -= Time.deltaTime; while (cooldown < 0) { player.DamagePlayer(25); cooldown += maxCooldown; } } if (isInRangeTem == false) { isInRange = false; cooldown = maxCooldown / 2; isMoving = true; } } } if (isMoving) { transform.Translate(speed * Time.deltaTime * 10 * (routePos - currentPos).normalized * moveUnit, Space.World); if ((routePos - transform.position).magnitude <= 0.01f) { isMoving = false; transform.position = routePos; path.RemoveAt(0); } /* * else if ((routePos - transform.position).magnitude >= 0.11f) * { * isMoving = false; * Tile3 start = GetTile(transform.position.x, transform.position.y); * Tile3 end = GetTile(0, 0); * GetRoute(start, end); * } */ } } catch { } if (sightDir >= 1 && sightDir <= 2) { currentSprite = sprEnemyFront; } else { currentSprite = sprEnemyBack; } imageTime += Time.deltaTime; while (imageTime > 1 / imageSpeed) { imageIndex++; imageTime -= 1 / imageSpeed; } imageIndex %= 9; int _imageIndex = imageIndex; if (_imageIndex > 4) { _imageIndex = -_imageIndex + 8; } gameObject.GetComponentsInChildren <SpriteRenderer>()[0].sprite = currentSprite[_imageIndex]; if (sightDir >= 2) { gameObject.GetComponentsInChildren <SpriteRenderer>()[0].flipX = true; } else { gameObject.GetComponentsInChildren <SpriteRenderer>()[0].flipX = false; } // Health bar transform.Find("GhoulSprite").transform.Find("GhoulHealthBar").transform.localScale = new Vector3(1.2f * HP / maxHP, 0.2f, 0); transform.Find("GhoulSprite").transform.Find("GhoulHealthBar").transform.localPosition = new Vector3(-0.6f * (1 - HP / maxHP), 1.2f, 0); } }