44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
namespace Pathfinding.Examples.RTS {
|
|
[HelpURL("https://arongranberg.com/astar/documentation/stable/rtsweaponsimpleranged.html")]
|
|
public class RTSWeaponSimpleRanged : RTSWeapon {
|
|
public GameObject sourceEffect;
|
|
public GameObject targetEffect;
|
|
|
|
public Transform sourceEffectRoot;
|
|
|
|
public float rotationSpeed;
|
|
public Transform rotationRootY;
|
|
|
|
public float damage;
|
|
public AudioClip[] sfx;
|
|
public float volume = 1f;
|
|
|
|
public override bool Aim (RTSUnit target) {
|
|
bool rotationDone = true;
|
|
|
|
if (rotationRootY != null) {
|
|
var dir = target.transform.position - rotationRootY.position;
|
|
dir.y = 0;
|
|
|
|
var targetRot = Quaternion.LookRotation(dir);
|
|
rotationRootY.rotation = Quaternion.RotateTowards(rotationRootY.rotation, targetRot, rotationSpeed * Time.deltaTime);
|
|
|
|
rotationDone = Quaternion.Angle(targetRot, rotationRootY.rotation) < rotationSpeed * 0.1f;
|
|
}
|
|
return base.Aim(target) && rotationDone;
|
|
}
|
|
|
|
public override void Attack (RTSUnit target) {
|
|
base.Attack(target);
|
|
if (sfx.Length > 0) AudioSource.PlayClipAtPoint(sfx[Random.Range(0, sfx.Length)], transform.position, volume);
|
|
if (sourceEffect != null) GameObject.Instantiate(sourceEffect, sourceEffectRoot != null ? sourceEffectRoot.position : transform.position, sourceEffectRoot != null ? sourceEffectRoot.rotation : Quaternion.LookRotation(target.transform.position - transform.position, Vector3.up));
|
|
if (targetEffect != null) GameObject.Instantiate(targetEffect, target.transform.position, Quaternion.LookRotation(transform.position - target.transform.position, Vector3.up));
|
|
|
|
target.ApplyDamage(damage);
|
|
}
|
|
}
|
|
}
|