} // constructor with 0 arguments // for creating an entry via clicked target public TargetData(Transform transform, MF_AbstractStatus script, bool clickedPriority, bool targetPersists, float?sqrMagnitude) { this.transform = transform; this.script = script; this.clickedPriority = clickedPriority; this.targetPersists = targetPersists; this.lastDetected = Time.time; this.lastAnalyzed = Time.time; this.sqrMagnitude = sqrMagnitude; }
public void DoDamage(Transform trans) { // do stuff to the target object when it gets hit MF_AbstractStatus _script = null; _script = FindStatusScript(trans); // look for script in parents if (_script && !Mathf.Approximately(_script.damageID, damageID + Time.time)) // don't apply damage if alread damaged by this source, this frame - so explosions don't damage more than once // apply damage to target { _script.damageID = damageID + Time.time; // mark as damaged by this source, this frame _script.health -= damage; //_script.shieldDamage(damage); // Debug.Log( trans+" > "+_script+" : "+damage ); } }
private MF_AbstractStatus FindStatusScript(Transform thisTransform) { // move up tree looking for status script while (thisTransform != null) { MF_AbstractStatus _script = thisTransform.GetComponent <MF_AbstractStatus>(); if (_script) { return(_script); } else { thisTransform = thisTransform.parent; } } return(null); }
void Spawn(int num) { if (spawnsPoints.Length > 0) // at least 1 spawn point defined // find total chance number { float _spawnRollMax = 0; for (int t = 0; t < spawnTypes.Length; t++) { _spawnRollMax += spawnTypes[t].chance; } for (int s = 0; s < num; s++) // for every spawn requested { float _spawnRoll = Random.Range(0f, _spawnRollMax); SpawnType _spawnEntry = null; // find which unit spawn roll picked float _count = 0; for (int t = 0; t < spawnTypes.Length; t++) { if (_spawnRoll > _count && _spawnRoll < _count + spawnTypes[t].chance) { _spawnEntry = spawnTypes[t]; break; } _count += spawnTypes[t].chance; } Vector3 _locRand = Random.insideUnitSphere * spawnRandomRadius; // if spawn point provided, use it. Else pick random from default list Vector3 _spawnCenter; if (_spawnEntry.spawn) { _spawnCenter = _spawnEntry.spawn.position; } else { _spawnCenter = spawnsPoints[Random.Range(0, spawnsPoints.Length)].position; } Vector3 _spawnLoc = _spawnCenter + _locRand; if (sameHeight == true) { _spawnLoc = new Vector3(_spawnLoc.x, _spawnCenter.y, _spawnLoc.z); } // if waypoint group provided, use it. Else pick random from default list Transform _wptGroup; if (_spawnEntry.wpt) { _wptGroup = _spawnEntry.wpt; } else { _wptGroup = waypointGroups[Random.Range(0, waypointGroups.Length)]; } GameObject _unit = (GameObject)Instantiate(_spawnEntry.unit, _spawnLoc, Quaternion.identity); float _angle = MFmath.AngleSigned(Vector3.forward, _spawnLoc - _spawnCenter, Vector3.up); _unit.transform.rotation = Quaternion.Euler(new Vector3(0f, _angle, 0f)); if (_spawnEntry.overrideFaction == true && _spawnEntry.faction != MFnum.FactionType.None) { _unit.tag = _spawnEntry.faction.ToString(); MF_AbstractStatus _unitStatusScript = _unit.GetComponent <MF_AbstractStatus>(); if (_unitStatusScript && _unitStatusScript.layerColliderLocation) { _unitStatusScript.layerColliderLocation.gameObject.layer = LayerMask.NameToLayer(_spawnEntry.faction.ToString()); } } //shipsCounter.addShip(_unit); MF_AbstractNavigation _unitNavScript = _unit.GetComponent <MF_AbstractNavigation>(); if (_unitNavScript) { _unitNavScript.waypointGroup = _wptGroup; _unitNavScript.randomWpt = _spawnEntry.randomWpt; } } } }
public virtual void ClickAdd(int key, Transform transform, MF_AbstractStatus script, bool clickedPriority, bool targetPersists, float?sqrMagnitude) { }
public override void ClickAdd(int key, Transform transform, MF_AbstractStatus script, bool clickedPriority, bool targetPersists, float?sqrMagnitude) { targetList.Add(key, new TargetData(transform, script, clickedPriority, targetPersists, sqrMagnitude)); }