public virtual int Simulate()
{
int simulation = -1;
Vector3 dir = -transform.forward;
Vector3 pos = transform.position + (transform.forward * 0.125f);
if (Physics.Raycast(pos, dir, out var hit, 0.175f))
{
parentAdjuster = new GameObject().transform;
parentAdjuster.position = hit.point;
parentAdjuster.SetParent(hit.transform);
transform.SetParent(parentAdjuster);
float dis = Vector3.Distance(hit.point, pos) + 0.05f + size;
if (Physics.SphereCast(pos, size, dir, out var hitDmg, dis, damageLayer))
{
DamageZone damaged = hitDmg.transform.GetComponent <DamageZone>();
if (damaged != null)
{
if (!damaged.DamageableAlreadyDead())
{
simulation = Mathf.Max(simulation, 0);
if (damaged.Damage(Damage, 1f))
{
simulation = 1;
}
}
}
}
}
return(simulation);
}