public override void Use(InteractTile tile) { if (selectedTiles.Count <= 0) { return; } Vector3 windForward = -Vector3.Cross(InteractComponent.singleton.GetDirection(), Vector3.up); Destroy(Instantiate(World.singleton.WaveModel, tile.transform.position + new Vector3(0, 5, 0), Quaternion.LookRotation(windForward, Vector3.up)).gameObject, 1); Destroy(Instantiate(World.singleton.WaveModel, tile.transform.position + new Vector3(0, 3, 0) + windForward * Radius, Quaternion.LookRotation(windForward, Vector3.up)).gameObject, 1); Destroy(Instantiate(World.singleton.WaveModel, tile.transform.position + new Vector3(0, 3, 0) - windForward * Radius, Quaternion.LookRotation(windForward, Vector3.up)).gameObject, 1); if (!Currency.singleton.Pay(Price)) { return; } if (selectedTiles == null) { Debug.LogError("NO TILES WERE FOUND!"); } foreach (InteractTile selectedTile in selectedTiles) { selectedTile.SetFireState(false); } }
public override void Use(InteractTile tile) { if (!Currency.singleton.Pay(Price)) { return; } if (selectedTiles == null) { Debug.LogError("NO TILES WERE FOUND!"); } int TilesToLight = 0; Vector3 windForward = -Vector3.Cross(InteractComponent.singleton.GetDirection(), Vector3.up); Destroy(Instantiate(World.singleton.WindModel, tile.transform.position + new Vector3(0, 2, 0) + InteractComponent.singleton.GetDirection() * 10, Quaternion.LookRotation(windForward, Vector3.up)).gameObject, 1); foreach (InteractTile selectedTile in selectedTiles) { if (Vector3.Distance(tile.transform.position, selectedTile.transform.position) < ExtinguishRange) { if (selectedTile.IsBurning) { selectedTile.SetFireState(false); TilesToLight++; } } else if (TilesToLight >= 2 && (selectedTile.type == TileType.Grass || selectedTile.type == TileType.Tree)) { if (Random.Range(0.0f, 1.0f) < 0.25f) { selectedTile.SetFireState(true); } TilesToLight -= 2; } } }
public override void HoverStart(InteractTile tile) { if (tile != LastTile) { selectedTiles = GetTiles(tile); InteractComponent.singleton.HighlightTiles(selectedTiles); } }
private List <InteractTile> GetTiles(InteractTile center) { List <InteractTile> ret = new List <InteractTile>(); Collider[] HitColliders = Physics.OverlapSphere(center.transform.position, Radius, 1 << 8); foreach (Collider HitCollider in HitColliders) { InteractTile TileComponent = HitCollider.GetComponent <InteractTile>(); if (TileComponent) { ret.Add(TileComponent); } } return(ret); }
private List <InteractTile> GetTiles(InteractTile center) { List <InteractTile> ret = new List <InteractTile>(); Collider[] HitColliders = Physics.OverlapCapsule(center.transform.position, center.transform.position + InteractComponent.singleton.GetDirection() * World.singleton.Size.magnitude, Radius, 1 << 8); foreach (Collider HitCollider in HitColliders) { InteractTile TileComponent = HitCollider.GetComponent <InteractTile>(); if (TileComponent) { ret.Add(TileComponent); } } return(ret); }
void Start() { World.singleton.FireCount++; int count = 0; Collider[] collidersHit = Physics.OverlapSphere(transform.position, 5, 1 << 8); foreach (Collider collider in collidersHit) { InteractTile tile = collider.GetComponent <InteractTile>(); if (tile && tile.IsBurning) { count++; } } SoundHandler.SpawnFire(this, count); }
void Update() { if (Random.Range(0.0f, 1.0f) < RandomFireStartChance) { for (int i = 0; i < Random.Range(0, RandomFireStartMaxCount); i++) { Collider[] HitColliders = Physics.OverlapSphere(GetRandomTile().transform.position, Random.Range(0.0f, RandomFireStartRadius), 1 << 8); foreach (Collider HitCollider in HitColliders) { InteractTile TileComponent = HitCollider.GetComponent <InteractTile>(); if (TileComponent) { TileComponent.SetFireState(true); } } } } }
public override void Use(InteractTile tile) { if (!Currency.singleton.Pay(Price)) { return; } InteractComponent.singleton.RainFade(); Destroy(Instantiate(World.singleton.RainModel, tile.transform.position + new Vector3(0, 1f, 0), Quaternion.Euler(0, 45, 0)).gameObject, 1); SoundHandler.singleton.CardSource.PlayOneShot(UseSound[Random.Range(0, UseSound.Length)]); if (selectedTiles == null) { Debug.LogError("NO TILES WERE FOUND!"); } foreach (InteractTile selectedTile in selectedTiles) { selectedTile.SetFireState(false); } }
public override void Use(InteractTile tile) { if (!Currency.singleton.Pay(Price)) { return; } SoundHandler.singleton.CardSource.PlayOneShot(UseSound[Random.Range(0, UseSound.Length)]); if (selectedTiles == null) { Debug.LogError("NO TILES WERE FOUND!"); } foreach (InteractTile selectedTile in selectedTiles) { if (selectedTile.IsBurning) { selectedTile.SetFireState(false); } } }
private List <InteractTile> GetTiles(InteractTile center) { List <InteractTile> ret = new List <InteractTile>(); bool HasWater = false; Collider[] HitColliders = Physics.OverlapCapsule(center.transform.position, center.transform.position + InteractComponent.singleton.GetDirection() * Range, Radius, 1 << 8); foreach (Collider HitCollider in HitColliders) { InteractTile TileComponent = HitCollider.GetComponent <InteractTile>(); if (TileComponent) { if (TileComponent.type == TileType.Water) { HasWater = true; } ret.Add(TileComponent); } } return(HasWater ? ret : new List <InteractTile>()); }
public override void Use(InteractTile tile) { if (!Currency.singleton.Pay(Price)) { return; } InteractComponent.singleton.RainFade(); if (selectedTiles == null) { Debug.LogError("NO TILES WERE FOUND!"); } foreach (InteractTile selectedTile in selectedTiles) { selectedTile.SetFireState(false); } if (Random.Range(0.0f, 1.0f) < LightningstrikeChance) { InteractComponent.singleton.ThunderFade(); SoundHandler.singleton.CardSource.PlayOneShot(LightningClip[Random.Range(0, LightningClip.Length)]); InteractTile lightningTile = selectedTiles[Random.Range(0, selectedTiles.Count)]; Destroy(Instantiate(World.singleton.LightningModel, lightningTile.transform.position + new Vector3(0, 1f, 0), Quaternion.Euler(0, 45, 0)).gameObject, 1); Collider[] HitColliders = Physics.OverlapSphere(lightningTile.transform.position, Random.Range(0.0f, LightningStrikeRadius), 1 << 8); foreach (Collider HitCollider in HitColliders) { InteractTile hitTile = HitCollider.GetComponent <InteractTile>(); if (hitTile) { hitTile.SetFireState(true); } } } else { GameObject rain = Instantiate(World.singleton.RainModel, tile.transform.position + new Vector3(0, 1f, 0), Quaternion.Euler(0, 45, 0)).gameObject; rain.transform.localScale *= 1.2f; Destroy(rain, 1); SoundHandler.singleton.CardSource.PlayOneShot(UseSound[Random.Range(0, UseSound.Length)]); } }
// Update is called once per frame void Update() { Ray interactRay = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(interactRay.origin, interactRay.direction * 1000, Color.red); if (Physics.Raycast(interactRay, out RaycastHit hit, Mathf.Infinity)) { if (hit.transform.tag.Equals("Tile")) { InteractTile interactObject = hit.transform.GetComponent <InteractTile>(); if (interactObject && currentCard) { currentCard.HoverStart(interactObject); if (Input.GetButtonUp("Fire1")) { currentCard.Use(interactObject); currentCard = null; HighlightTiles(new List <InteractTile>()); } } } } if (Input.GetButtonDown("Fire2")) { direction = (direction + 1) % 4; } if (Input.GetButtonUp("Fire1")) { currentCard = null; HighlightTiles(new List <InteractTile>()); } if (currentCard == null && CustomCursor) { Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); } }
public override void HoverEnd(InteractTile tile) { selectedTiles.Clear(); }
public virtual void Use(InteractTile tile) { }
void Start() { this.TreesPlaced = new List <InteractTile>(); //Places tiles tiles = new InteractTile[(int)Size.x, (int)Size.y]; for (int x = 0; x < (int)Size.x; x++) { for (int y = 0; y < (int)Size.y; y++) { tiles[x, y] = Instantiate(TilePrefab, new Vector3(x, 0, y), Quaternion.Euler(0, Random.Range(0, 3) * 90, 0), WorldParent).GetComponent <InteractTile>(); tiles[x, y].x = x; tiles[x, y].y = y; } } //River water tiles Vector2 currPos = Vector2.zero; Vector2 direction = Vector2.zero; Vector2 tangent = Vector2.zero; switch (Random.Range(0, 4)) { case 0: currPos = new Vector2(Mathf.Cos(Random.Range(0, Mathf.PI / 2)) * (Size.x - 1), 0); direction = new Vector2(0, 1); tangent = new Vector2(1, 0); break; case 1: currPos = new Vector2(Mathf.Cos(Random.Range(0, Mathf.PI / 2)) * (Size.x - 1), Size.y - 1); direction = new Vector2(0, -1); tangent = new Vector2(1, 0); break; case 2: currPos = new Vector2(0, Mathf.Cos(Random.Range(0, Mathf.PI / 2)) * (Size.y - 1)); direction = new Vector2(1, 0); tangent = new Vector2(0, 1); break; case 3: currPos = new Vector2(Size.x, Mathf.Cos(Random.Range(0, Mathf.PI / 2)) * (Size.y - 1)); direction = new Vector2(1, 0); tangent = new Vector2(0, 1); break; } do { Collider[] HitColliders = Physics.OverlapSphere(new Vector3(currPos.x, 0, currPos.y), RiverStepDistance, 1 << 8); foreach (Collider HitCollider in HitColliders) { InteractTile TileComponent = HitCollider.GetComponent <InteractTile>(); if (TileComponent) { if (TileComponent.SetType(TileType.Water)) { if (Random.Range(0, 2) == 0) { TreesToPlace--; } else { GrassToPlace--; } } } } currPos += direction * RiverStepDistance; direction += tangent * Random.Range(-1.0f, 1.0f) * RiverTurnStrength; direction.Normalize(); }while(currPos.x > 0 && currPos.y > 0 && currPos.x < Size.x && currPos.y < Size.y); //Border water tiles for (int x = (int)(-Size.x * 0.5f) - 1; x < Size.x * 1.5 + 3; x++) { float test = (x < Size.x / 2?(int)(Size.y) + x:(Size.y - x + Size.x / 2)); for (int y = (int)(x < Size.x / 2 ? -x : -Size.y + x) - 1; y < (x < Size.x / 2?(int)(Size.y) + x:(Size.y - x + Size.x)) + 3; y++) { if (x >= -2 && y >= -2 && x < Size.x + 2 && y < Size.y + 2) { if (x >= 0 && y >= 0 && x < Size.x && y < Size.y) { continue; } Instantiate(TilePrefab, new Vector3(x, 0, y), Quaternion.Euler(0, Random.Range(0, 3) * 90, 0), WorldParent).GetComponent <InteractTile>().SetType(TileType.Water); continue; } Instantiate(WaterTilePrefab, new Vector3(x, -0.9f, y), Quaternion.Euler(0, Random.Range(0, 3) * 90, 0), WorldParent); } } //Spreads random trees from 4 random locations for (int i = 0; i < 4;) { InteractTile tile = GetRandomTile(); if (tile.type == TileType.Dirt) { tile.SetType(TileType.Tree); TreesPlaced.Add(tile); i++; } } for (int i = 0; i < TreesToPlace * 100 && TreesPlaced.Count < TreesToPlace - 4; i++) { InteractTile tile = GetTile(TreesPlaced[Random.Range(0, TreesPlaced.Count)].GetDirection(Random.Range(0, 4))); if (tile && tile.type == TileType.Dirt) { tile.SetType(TileType.Tree); TreesPlaced.Add(tile); } } TreesAmount = TreesPlaced.Count; //Spreads random grass List <InteractTile> grassPlaced = new List <InteractTile>(); for (int i = 0; i < 4;) { InteractTile tile = GetRandomTile(); if (tile.type == TileType.Dirt) { tile.SetType(TileType.Grass); grassPlaced.Add(tile); i++; } } for (int i = 0; i < GrassToPlace * 100 && grassPlaced.Count < GrassToPlace; i++) { InteractTile tile = GetTile(grassPlaced[Random.Range(0, grassPlaced.Count)].GetDirection(Random.Range(0, 4))); if (tile && tile.type == TileType.Dirt) { tile.SetType(TileType.Grass); grassPlaced.Add(tile); } } //Places random houses int HousesToPlace = Random.Range(0, 10); int HousesPlaced = 0; while (HousesPlaced < HousesToPlace) { InteractTile tile = GetRandomTile(); if (tile && tile.type == TileType.Dirt) { tile.Child = Instantiate(HouseModel, tile.transform.position + new Vector3(0, 0.5f, 0), Quaternion.Euler(0, Random.Range(0, 4) * 90, 0)); tile.type = TileType.House; HousesPlaced++; } } }
public virtual void HoverEnd(InteractTile tile) { }
public virtual void HoverStart(InteractTile tile) { }