package mindustry.entities.units;

import arc.util.*;
import mindustry.audio.*;
import mindustry.gen.*;
import mindustry.type.*;

public class WeaponMount{
    /** weapon associated with this mount */
    public final Weapon weapon;
    /** reload in frames; 0 means ready to fire */
    public float reload;
    /** rotation relative to the unit this mount is on */
    public float rotation;
    /** weapon recoil */
    public float recoil;
    /** weapon barrel recoil */
    public @Nullable float[] recoils;
    /** destination rotation; do not modify! */
    public float targetRotation;
    /** current heat, 0 to 1*/
    public float heat;
    /** lerps to 1 when shooting, 0 when not */
    public float warmup;
    /** is the weapon actively charging */
    public boolean charging;
    /** counts up to 1 when charging, 0 when not */
    public float charge;
    /** lerps to reload time */
    public float smoothReload;
    /** aiming position in world coordinates */
    public float aimX, aimY;
    /** whether to shoot right now */
    public boolean shoot = false;
    /** whether to allow any shooting effects */
    public boolean allowShootEffects = true;
    /** whether to rotate to face the target right now */
    public boolean rotate = false;
    /** extra state for alternating weapons */
    public boolean side;
    /** total bullets fired from this mount */
    public int totalShots;
    /** counter for which barrel bullets have been fired from; used for alternating patterns */
    public int barrelCounter;
    /** Last aim length of weapon. Only used for point lasers. */
    public float lastLength;
    /** current bullet for continuous weapons */
    public @Nullable Bullet bullet;
    /** sound loop for continuous weapons */
    public @Nullable SoundLoop sound;
    /** current target; used for autonomous weapons and AI */
    public @Nullable Teamc target;
    /** retarget counter */
    public float retarget = 0f;

    public WeaponMount(Weapon weapon){
        this.weapon = weapon;
        this.rotation = weapon.baseRotation;
    }
}
