module Dodge.Default.Weapon where import Dodge.Data import Dodge.Reloading.Action import Dodge.Item.Weapon.Bullet import Dodge.Item.Weapon.AmmoParams import Dodge.Default.Item import Dodge.Default.AimParams --import Dodge.Item.Draw import Picture import qualified Data.Map.Strict as M import Control.Lens defaultLeftLoadable :: ItemConsumption defaultLeftLoadable = AutoRecharging 10 10 100 100 defaultLoadable :: ItemConsumption defaultLoadable = LoadableAmmo { _laAmmoType = GenericAmmo , _laMax = 15 , _laLoaded = 0 , _laPrimed = True , _laCycle = [loadEject 10, loadInsert 10, loadPrime 10] , _laProgress = Nothing } defaultBulletLoadable :: ItemConsumption defaultBulletLoadable = defaultLoadable & laAmmoType .~ basicBullet defaultChargeable :: ItemConsumption defaultChargeable = ChargeableAmmo 100 100 --ruseRate :: Int -- -> (Item -> Creature -> World -> World) -- -> [(Item -> Creature -> World -> World) -> Item -> Creature -> World -> World] -- -> ItemUse --ruseRate i f usemods = RightUse -- { _rUse = f -- , _useDelay = FixedRate -- { _rateMax = i -- , _rateTime = 0 -- } -- , _useMods = usemods -- , _useHammer = HammerUp -- , _useAim = defaultAimParams -- , _heldScroll = \_ _ -> id -- } --ruseInstant -- :: (Item -> Creature -> World -> World) -- -> [(Item -> Creature -> World -> World) -> Item -> Creature -> World -> World] -- -> ItemUse --ruseInstant f usemods = RightUse -- { _rUse = f -- , _useDelay = NoDelay -- , _useMods = usemods -- , _useHammer = HammerUp -- , _useAim = defaultAimParams -- , _heldScroll = \_ _ -> id -- } defaultrUse :: ItemUse defaultrUse = RightUse { _rUse = \_ _ -> id , _useDelay = FixedRate {_rateMax = 8, _rateTime = 0} , _useMods = [] , _useHammer = HammerUp , _useAim = defaultAimParams , _heldAttachment = NoHeldAttachment , _heldScroll = \_ _ -> id } defaultlUse :: ItemUse defaultlUse = LeftUse { _lUse = \_ _ -> id , _useDelay = FixedRate {_rateMax = 8, _rateTime = 0} , _useHammer = HammerUp , _eqEq = defaultEquip } defaultEquip :: Equipment defaultEquip = Equipment { _eqSite = GoesOnSpecial , _eqUse = \_ _ -> id , _eqOnEquip = \_ _ -> id , _eqOnRemove = \_ _ -> id , _eqParams = NoEquipParams , _eqViewDist = Nothing } luseInstantNoH :: (Item -> Creature -> World -> World) -> ItemUse luseInstantNoH f = defaultlUse & lUse .~ f & useDelay .~ NoDelay -- TODO change this defaultLeftItem :: Item defaultLeftItem = defaultWeapon & itConsumption .~ defaultLeftLoadable defaultWeapon :: Item defaultWeapon = defaultItem & itConsumption .~ defaultLoadable & itUse .~ defaultrUse & itInvColor .~ white & itType . iyModules .~ M.fromList [(ModBullet, EMPTYMODULE) ,(ModTarget, EMPTYMODULE) ,(ModBulletTrajectory, EMPTYMODULE) ,(ModTeleport, EMPTYMODULE) ] defaultBulletWeapon :: Item defaultBulletWeapon = defaultWeapon & itConsumption .~ defaultBulletLoadable & itUse . rUse .~ useAmmoParams Nothing defaultItemValue :: ItemValue defaultItemValue = ItemValue 10 MundaneItem defaultCraftable :: Item defaultCraftable = defaultItem { _itInvColor = green } defBulletShooter :: ItemParams defBulletShooter = BulletShooter { _muzVel = 1 , _rifling = 0.8 , _bore = 2 , _gunBarrels = SingleBarrel 0 , _recoil = 0 , _torqueAfter = 0 , _randomOffset = 0 } defaultAutoGun :: Item defaultAutoGun = defaultBulletWeapon & itUse . useAim . aimStance .~ TwoHandTwist