43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
|
|
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
public class TreeExplosion : MonoBehaviour {
|
|
|
|
public float BlastRange = 30.0f;
|
|
public float BlastForce = 30000.0f;
|
|
public GameObject DeadReplace;
|
|
public GameObject Explosion;
|
|
|
|
void Explode() {
|
|
Instantiate(Explosion, transform.position, Quaternion.identity);
|
|
TerrainData terrain = Terrain.activeTerrain.terrainData;
|
|
|
|
ArrayList instances = new ArrayList();
|
|
|
|
foreach (TreeInstance tree in terrain.treeInstances) {
|
|
float distance = Vector3.Distance(Vector3.Scale(tree.position, terrain.size) + Terrain.activeTerrain.transform.position, transform.position);
|
|
if (distance<BlastRange) {
|
|
// the tree is in range - destroy it
|
|
GameObject dead = Instantiate(DeadReplace, Vector3.Scale(tree.position, terrain.size) + Terrain.activeTerrain.transform.position, Quaternion.identity) as GameObject;
|
|
dead.GetComponent<Rigidbody>().maxAngularVelocity = 1;
|
|
dead.GetComponent<Rigidbody>().AddExplosionForce(BlastForce, transform.position, 20+BlastRange*5, -20.0f);
|
|
} else {
|
|
// tree is out of range - keep it
|
|
instances.Add(tree);
|
|
|
|
}
|
|
}
|
|
terrain.treeInstances = (TreeInstance[])instances.ToArray(typeof(TreeInstance));
|
|
|
|
}
|
|
|
|
void Update() {
|
|
if (Input.GetButtonDown("Fire1")) {
|
|
Explode();
|
|
}
|
|
}
|
|
|
|
}
|
|
|