/// <summary> /// need fromPos,toUnit /// </summary> /// <param name="duration"></param> void FireFollow(float duration) { //m_fromPos = fromPos; //m_toUnit = toUnit; Unit toUnit = m_toUnit.Unit; if (toUnit == null) { return; } m_node.position = m_fromPos; m_node.stopAllActions(); m_node.DoAnimate(ModelNode.kActionMove, null, ModelNode.CONST_LOOP_FOREVER, null); cca.Function onMoveToFinished = delegate { if (m_fromToType == FromToType.kPointToUnit || m_fromToType == FromToType.kUnitToUnit) { if (m_toUnit.Unit != null && m_toUnit.Unit.OnProjectileArrive(this) == false) { // 当目标单位存活且目标单位拒绝(反射)抛射物成功,抛射物不死亡(可能被反弹) return; } } Die(); }; m_node.DoMoveToUnit(toUnit.Node, true, m_maxHeightDelta, duration, onMoveToFinished); }
protected void Die() { m_node.stopAllActions(); cca.Function onEffect = null; if (HasEffectFlag(kEffectOnDying)) { onEffect = OnEffect; } m_node.DoAnimate(ModelNode.kActionDie, onEffect, 1, OnDyingDone); }
/// <summary> /// need fromUnit,toUnit /// </summary> void FireLink() { Unit u = m_fromUnit; UnitNode d = u.Node; Unit t = m_toUnit; UnitNode td = t.Node; Debug.Assert(u != null && t != null && d != null && td != null); m_fromPos = d.position; m_toPos = td.position; m_node.stopAllActions(); cca.Function onEffect = null; if (HasEffectFlag(kEffectOnDying)) { onEffect = OnEffect; } m_node.DoLinkUnitToUnit(d, td, ModelNode.kActionDie, onEffect, 1, OnDyingDone); }
/// <summary> /// need fromPos,toPos /// </summary> /// <param name="duration"></param> void FireStraight(float duration) { m_contactedUnits.Clear(); m_node.position = m_fromPos; m_node.stopAllActions(); m_node.DoAnimate(ModelNode.kActionMove, null, ModelNode.CONST_LOOP_FOREVER, null); cca.Function onMoveToFinished = delegate { if (m_fromToType == FromToType.kPointToUnit || m_fromToType == FromToType.kUnitToUnit) { if (m_toUnit.Unit != null && m_toUnit.Unit.OnProjectileArrive(this) == false) { return; } } Die(); }; m_node.DoMoveTo(m_toPos, duration, onMoveToFinished); }