package loon.action.sprite.effect; import loon.LTexture; import loon.action.sprite.SpriteBatch; import loon.action.sprite.SpriteBatch.SpriteEffects; import loon.canvas.LColor; import loon.geom.Vector2f; import loon.utils.MathUtils; /* * 单纯绘制一个电元素 */ public class LightningLine { private final static float imageThickness = 8; private Vector2f capOrigin = new Vector2f(); private Vector2f middleOrigin = new Vector2f(); private Vector2f middleScale = new Vector2f(); public Vector2f lineA; public Vector2f lineB; public float thickness; public LightningLine(Vector2f a, Vector2f b) { this(a, b, 1f); } public LightningLine(Vector2f a, Vector2f b, float t) { this.lineA = a; this.lineB = b; this.thickness = t; } public void draw(SpriteBatch batch, float offsetX,float offsetY, LColor tint) { Vector2f tangent = lineB.sub(lineA); float theta = MathUtils.atan2(tangent.y, tangent.x); float thicknessScale = thickness / imageThickness; LTexture HalfCircle = LightningEffect.get().getHalfCircle(); LTexture LightningSegment = LightningEffect.get().getLightningSegment(); capOrigin.set(HalfCircle.getWidth(), HalfCircle.getHeight() / 2f); middleOrigin.set(0, LightningSegment.getHeight() / 2f); middleScale.set(tangent.length(), thicknessScale); batch.draw(LightningSegment, lineA.add(offsetX, offsetY), tint, theta * MathUtils.RAD_TO_DEG, middleOrigin, middleScale, SpriteEffects.None); batch.draw(HalfCircle, lineA.add(offsetX, offsetY), tint, theta * MathUtils.RAD_TO_DEG, capOrigin, thicknessScale, SpriteEffects.None); batch.draw(HalfCircle, lineB.add(offsetX, offsetY), tint, (theta + MathUtils.PI) * MathUtils.RAD_TO_DEG, capOrigin, thicknessScale, SpriteEffects.None); } }