void AttackEnemy(float delta) { float distance = ServerMath.Distance(this, target); if (distance <= attackRange) { Quaternion rot = ServerMath.LookAt(this, target); ((MonsterSyncData)sync).SetRotate(rot.Y, rot.W); ((MonsterSyncData)sync).SetAnime(2); if (endMotion <= 0) { startMotion += delta; if (startMotion >= realAttackTime) { Attack(target, GetAutoAttackPower()); ObjectManager.AddBullet(this.GetObjID(), target.GetObjID()); startMotion = 0; endMotion = cooldownTime; } } } else { ((MonsterSyncData)sync).SetRotate(init_yRot, init_wRot); ((MonsterSyncData)sync).SetAnime(0); target = null; startMotion = 0; } }
void AttackMove(float delta) { if (currentPath < relayPoints.Count) { Vector3 src = new Vector3(GetXPos(), 0, GetZPos()); Vector3 dest = new Vector3(relayPoints[currentPath].X, 0, relayPoints[currentPath].Y); if (Vector3.Distance(src, dest) < 0.2f) { currentPath++; } else { ServerSideObject target = ObjectManager.GetNearMinionsCoresTowersHeroes(this, attackRange); if (target != null) { Quaternion rot = ServerMath.LookAt(this, target); ((MinionSyncData)sync).SetRotate(rot.Y, rot.W); ((MinionSyncData)sync).SetAnime(2); if (endMotion <= 0) { startMotion += delta; if (startMotion >= realAttackTime) { Attack(target, GetAutoAttackPower()); ObjectManager.AddBullet(this.GetObjID(), target.GetObjID()); startMotion = 0; endMotion = cooldownTime; } } } else { Quaternion rot = ServerMath.LookAt(src, dest); ((MinionSyncData)sync).SetRotate(rot.Y, rot.W); ((MinionSyncData)sync).SetAnime(1); Vector3 direct = (dest - src); direct.Normalize(); Vector3 newPos = src + direct * moveSpeed * delta; ((MinionSyncData)sync).SetPosition(newPos.X, newPos.Z); } } } }