public override void OnEnter() { base.OnEnter(); RenderMessage rm = new RenderMessage(); rm.ownerId = owner.id; rm.direction = owner.direction.vector3; rm.type = RenderMessage.Type.SummonedUnitDeath; owner.PostRenderMessage(rm); }
public override void Update(int deltaTime) { base.Update(deltaTime); LogicUnit target = owner.target; if (target != null && target.Alive()) { long distance = FixVector3.SqrDistance(target.position, owner.position); if (distance < owner.attackRadius) { if (inFightInterval) { fightIntervalTimer += deltaTime; if (fightIntervalTimer >= fightInterval) { fightState = FightState.StartSwingPoint; fightIntervalTimer = 0; inFightInterval = false; } } else { fightState = GetCurrentState(fightDurationTimer); fightDurationTimer += deltaTime; if (fightState == FightState.StartSwingPoint) { owner.direction = target.position - owner.position; RenderMessage rm = new RenderMessage(); rm.ownerId = owner.id; rm.direction = owner.direction.vector3; rm.type = RenderMessage.Type.SummonedUnitAttack; owner.PostRenderMessage(rm); } else if (fightState == FightState.HitPoint) { owner.damage = Formula.GetAttackFloatingValue(owner.physicalAttack, owner.GetRandomNumber(), owner.GetRandomNumber(owner.physicalAttackVar)); List <LogicUnit> targets = owner.FindOpponent(); for (int i = 0; i < targets.Count; i++) { LogicUnit t = targets[i]; // Check target state and still in the attack range if (t != null && t.Alive()) { t.Hurt(owner.damage, AttackPropertyType.PhysicalAttack, false, owner.ownerSoldier); } } } else if (fightState == FightState.FightEnd) { inFightInterval = true; fightDurationTimer = 0; } } } else { owner.Idle(); } } else { owner.Idle(); } }