public override Vector2?FindTarget() { // move towards the mouse if player is holding and clicking if (returningToPlayer || Vector2.Distance(projectile.Center, player.Center) > IdleDistanceMulitplier * ModifiedMaxDistance()) { returningToPlayer = true; return(null); // force back into non-attacking mode if too far from player } if (player.HeldItem.type == itemType && (usingSpecial || (player.channel && player.altFunctionUse != 2))) { MousePlayer mPlayer = player.GetModPlayer <MousePlayer>(); mPlayer.SetMousePosition(); Vector2?_mouseWorld = mPlayer.GetMousePosition(); if (_mouseWorld is Vector2 mouseWorld) { syncedMouseWorld = mouseWorld; Vector2 targetFromPlayer = mouseWorld - player.Center; if (targetFromPlayer.Length() < ModifiedMaxDistance()) { return(mouseWorld - projectile.Center); } targetFromPlayer.Normalize(); targetFromPlayer *= ModifiedMaxDistance(); return(player.Center + targetFromPlayer - projectile.Center); } } return(null); }
protected virtual int?GetSpriteDirection() { if (vectorToTarget is Vector2 target) { MousePlayer mPlayer = player.GetModPlayer <MousePlayer>(); Vector2? _mouseWorld = mPlayer.GetMousePosition(); if (_mouseWorld is Vector2 mouseWorld) { return(Math.Sign((mouseWorld - player.Center).X)); } else { return(null); } } else if (attackFrame > 0) { // don't change directions while weapon is still out } else if (projectile.velocity.X < -1) { return(-1); } else if (projectile.velocity.X > 1) { return(1); } return(null); }