Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name BlueTankHUD
- @inputs Active EGP:wirelink Seat:entity Gun:entity Base:entity
- @persist [EGPObjectState]:array [Driver]:entity [Tick PrevTime]:number [EGPRes EGPDesignRes EGPCenter ToViewUnit]:vector2 EGPLastAlloc:number
- @persist [AmmoTypeEGP AmmoMagEGP GunAimTrackerEGP BallisticAimTrackerEGP ReadyIndicatorEGP WarningIndicatorEGP TankIndicatorEGP TurretIndicatorEGP CPUTimeIndicatorEGP]:number
- @persist [NorthEGP EastEGP SouthEGP WestEGP]:number
- # Appearance Properties
- @persist [PrimaryColor SecondaryColor]:vector [ReticleScale CompassCenter CompassScale]:vector2
- @outputs
- if (first() | ~Active) {
- function void printInfo(Message:string) {
- printColor(vec(0, 0, 255), "BlueTankHUD: ", vec(210), Message)
- }
- function number egpAlloc() {
- if (EGPObjectState:min()) {
- printInfo("EGP allocation failure")
- return 0
- }
- EGPLastAlloc = EGPObjectState:minIndex()
- EGPObjectState[EGPLastAlloc, number] = 1
- return EGPLastAlloc
- }
- function number egpLastAlloc() {
- return EGPLastAlloc
- }
- function void wirelink:egpDealloc(I:number) {
- if (!EGPObjectState[I, number]) {
- printInfo("EGP deallocation failure")
- return
- }
- This:egpRemove(I)
- EGPObjectState[I, number] = 0
- }
- for (I = 1, egpMaxObjects()) {
- EGPObjectState[I, number] = 0
- }
- Driver = Seat:driver()
- EGPDesignRes = vec2(1920, 1080)
- EGPRes = egpScrSize(Driver)
- EGPCenter = EGPRes/2
- ToViewUnit = EGPRes/EGPDesignRes
- EGP:egpClear()
- EGP:egpDrawTopLeft(0)
- # Appearance Properties #
- PrimaryColor = vec(255)
- SecondaryColor = vec(255, 70, 40)
- ReticleScale = vec2(70, 70) * ToViewUnit
- CompassCenter = vec2(400, 800) * ToViewUnit
- CompassScale = vec2(120) * ToViewUnit
- # EGP Object Initialization #
- egpAlloc()
- EGP:egpBox(egpAlloc(), EGPCenter + vec2(-0.32, 0.3) * ReticleScale, vec2(1, 0.04) * ReticleScale)
- EGP:egpColor(egpLastAlloc(), vec4(PrimaryColor, 200))
- EGP:egpAngle(egpLastAlloc(), 50)
- EGP:egpBox(egpAlloc(), EGPCenter + vec2(0.32, 0.3) * ReticleScale, vec2(1, 0.04) * ReticleScale)
- EGP:egpColor(egpLastAlloc(), vec4(PrimaryColor, 200))
- EGP:egpAngle(egpLastAlloc(), -50)
- holoCreate(1)
- holoAlpha(1, 0)
- BallisticAimTrackerEGP = egpAlloc()
- EGP:egp3DTracker(BallisticAimTrackerEGP, vec())
- EGP:egpParent(BallisticAimTrackerEGP, holoEntity(1))
- EGP:egpBox(egpAlloc(), EGPCenter + vec2(0, 0.02) * ReticleScale, vec2(0.15, 0.01) * ReticleScale)
- EGP:egpColor(egpLastAlloc(), vec4(SecondaryColor, 200))
- EGP:egpAngle(egpLastAlloc(), 45)
- EGP:egpParent(egpLastAlloc(), BallisticAimTrackerEGP)
- EGP:egpBox(egpAlloc(), EGPCenter + vec2(0, 0.02) * ReticleScale, vec2(0.15, 0.01) * ReticleScale)
- EGP:egpColor(egpLastAlloc(), vec4(SecondaryColor, 200))
- EGP:egpAngle(egpLastAlloc(), -45)
- EGP:egpParent(egpLastAlloc(), BallisticAimTrackerEGP)
- holoCreate(2)
- holoAlpha(2, 0)
- GunAimTrackerEGP = egpAlloc()
- EGP:egp3DTracker(GunAimTrackerEGP, vec())
- EGP:egpParent(GunAimTrackerEGP, holoEntity(2))
- EGP:egpLineStrip(egpAlloc(), vec2(), vec2(0.15, -0.17) * ReticleScale, vec2(), vec2(-0.15, -0.17) * ReticleScale, vec2(), vec2(0, 0.17) * ReticleScale)
- EGP:egpColor(egpLastAlloc(), vec4(vec(0, 255, 0), 200))
- EGP:egpParent(egpLastAlloc(), GunAimTrackerEGP)
- EGP:egpBox(egpAlloc(), EGPCenter + vec2(-1.7, 0) * ReticleScale, vec2(2, 0.06) * ReticleScale)
- EGP:egpColor(egpLastAlloc(), vec4(PrimaryColor, 200))
- EGP:egpBox(egpAlloc(), EGPCenter + vec2(1.7, 0) * ReticleScale, vec2(2, 0.06) * ReticleScale)
- EGP:egpColor(egpLastAlloc(), vec4(PrimaryColor, 200))
- AmmoTypeEGP = egpAlloc()
- EGP:egpText(AmmoTypeEGP, "---", EGPCenter + vec2(-0.68, 0.2) * ReticleScale)
- EGP:egpFont(AmmoTypeEGP, "Arial", 24)
- EGP:egpColor(AmmoTypeEGP, vec4(PrimaryColor, 200))
- EGP:egpAlign(AmmoTypeEGP, 2, 1)
- AmmoMagEGP = egpAlloc()
- EGP:egpText(AmmoMagEGP, "-/-", EGPCenter + vec2(-0.68, -0.15) * ReticleScale)
- EGP:egpFont(AmmoMagEGP, "Arial", 16)
- EGP:egpColor(AmmoMagEGP, vec4(PrimaryColor, 200))
- EGP:egpAlign(AmmoMagEGP, 2, 1)
- ReadyIndicatorEGP = egpAlloc()
- EGP:egpText(ReadyIndicatorEGP, "RDY", EGPCenter + vec2(0.7, -0.15) * ReticleScale)
- EGP:egpFont(ReadyIndicatorEGP, "Arial", 16)
- EGP:egpColor(ReadyIndicatorEGP, vec4(PrimaryColor, 200))
- EGP:egpAlign(ReadyIndicatorEGP, 0, 1)
- WarningIndicatorEGP = egpAlloc()
- EGP:egpText(WarningIndicatorEGP, "Warn", EGPCenter + vec2(0.7, 0.2) * ReticleScale)
- EGP:egpFont(WarningIndicatorEGP, "Arial", 24)
- EGP:egpColor(WarningIndicatorEGP, vec4(vec(255, 0, 0), 200))
- EGP:egpAlign(WarningIndicatorEGP, 0, 1)
- CPUTimeIndicatorEGP = egpAlloc()
- EGP:egpText(CPUTimeIndicatorEGP, "CPU : 0", EGPCenter + vec2(2.7, -0.15) * ReticleScale)
- EGP:egpFont(CPUTimeIndicatorEGP, "Arial", 12)
- EGP:egpColor(CPUTimeIndicatorEGP, vec4(vec(255), 120))
- EGP:egpAlign(CPUTimeIndicatorEGP, 2, 1)
- # Compass
- # Tank indicator
- TankIndicatorEGP = egpAlloc()
- EGP:egpLineStrip(TankIndicatorEGP, CompassCenter + vec2(0, -0.45) * CompassScale,
- CompassCenter + vec2(0.4, -0.3) * CompassScale,
- CompassCenter + vec2(0.4, 0.45) * CompassScale,
- CompassCenter + vec2(-0.4, 0.45) * CompassScale,
- CompassCenter + vec2(-0.4, -0.3) * CompassScale,
- CompassCenter + vec2(0, -0.45) * CompassScale)
- # Turret indicator
- TurretIndicatorEGP = egpAlloc()
- EGP:egpTriangleOutline(TurretIndicatorEGP, CompassCenter + vec2(0, -0.7) * CompassScale,
- CompassCenter + vec2(0.2, 0) * CompassScale,
- CompassCenter + vec2(-0.2, 0) * CompassScale)
- # North
- NorthEGP = egpAlloc()
- EGP:egpText(NorthEGP, "N", CompassCenter + vec2(0, -1) * CompassScale)
- EGP:egpFont(NorthEGP, "Arial", 32)
- EGP:egpColor(NorthEGP, vec4(vec(255), 200))
- EGP:egpAlign(NorthEGP, 1, 1)
- # East
- EastEGP = egpAlloc()
- EGP:egpText(EastEGP, "E", CompassCenter + vec2(1, 0) * CompassScale)
- EGP:egpFont(EastEGP, "Arial", 32)
- EGP:egpColor(EastEGP, vec4(vec(255), 200))
- EGP:egpAlign(EastEGP, 1, 1)
- # South
- SouthEGP = egpAlloc()
- EGP:egpText(SouthEGP, "S", CompassCenter + vec2(0, 1) * CompassScale)
- EGP:egpFont(SouthEGP, "Arial", 32)
- EGP:egpColor(SouthEGP, vec4(vec(255), 200))
- EGP:egpAlign(SouthEGP, 1, 1)
- # West
- WestEGP = egpAlloc()
- EGP:egpText(WestEGP, "W", CompassCenter + vec2(-1, 0) * CompassScale)
- EGP:egpFont(WestEGP, "Arial", 32)
- EGP:egpColor(WestEGP, vec4(vec(255), 200))
- EGP:egpAlign(WestEGP, 1, 1)
- #EGP:egpBox(egpAlloc(), EGPCenter + vec2(-400, -400) * ToViewUnit, vec2(50, 50) * ToViewUnit)
- #EGP:egpColor(egpLastAlloc(), vec4(PrimaryColor, 180))
- ##############################
- rangerFilter(Gun)
- rangerPersist(1)
- }
- if (Active) {
- local CurrentTime = systime()
- local DeltaTime = CurrentTime - PrevTime
- local GunAimRanger = rangerOffset(65536, Gun:attachmentPos("muzzle"), Gun:forward())
- holoPos(2, GunAimRanger:pos())
- if (!(Tick%4)) {
- EGP:egpSetText(AmmoTypeEGP, Gun:acfAmmoType())
- EGP:egpSetText(AmmoMagEGP, Gun:acfRounds()+"/"+ Gun:acfAmmoCount():toString())
- EGP:egpSetText(AmmoTypeEGP, "APHE")
- EGP:egpSetText(AmmoMagEGP, "5/23")
- EGP:egpSetText(ReadyIndicatorEGP, "RDY")
- EGP:egpSetText(WarningIndicatorEGP, "WARN")
- EGP:egpSetText(CPUTimeIndicatorEGP, "CPU : "+round(cpuUsage()*10e5))
- }
- # compass
- local CompassAngle = owner():eyeAngles():yaw()+270
- EGP:egpPos(NorthEGP, CompassCenter + vec2(0, -1):rotate(CompassAngle) * CompassScale)
- EGP:egpPos(EastEGP, CompassCenter + vec2(1, 0):rotate(CompassAngle) * CompassScale)
- EGP:egpPos(SouthEGP, CompassCenter + vec2(0, 1):rotate(CompassAngle) * CompassScale)
- EGP:egpPos(WestEGP, CompassCenter + vec2(-1, 0):rotate(CompassAngle) * CompassScale)
- local LocalTankDir = Seat:toLocalAxis(Driver:eye())
- local TankAngle = atan(-LocalTankDir:x(), LocalTankDir:y())
- EGP:egpLineStrip(TankIndicatorEGP, CompassCenter + vec2(0, -0.45):rotate(TankAngle) * CompassScale,
- CompassCenter + vec2(0.4, -0.3):rotate(TankAngle) * CompassScale,
- CompassCenter + vec2(0.4, 0.45):rotate(TankAngle) * CompassScale,
- CompassCenter + vec2(-0.4, 0.45):rotate(TankAngle) * CompassScale,
- CompassCenter + vec2(-0.4, -0.3):rotate(TankAngle) * CompassScale,
- CompassCenter + vec2(0, -0.45):rotate(TankAngle) * CompassScale)
- local LocalTurretDir = Gun:toLocalAxis(Driver:eye())
- local TurretAngle = atan(-LocalTurretDir:x(), LocalTurretDir:y())+90
- EGP:egpTriangleOutline(TurretIndicatorEGP, CompassCenter + vec2(0, -0.7):rotate(TurretAngle) * CompassScale,
- CompassCenter + vec2(0.2, 0):rotate(TurretAngle) * CompassScale,
- CompassCenter + vec2(-0.2, 0):rotate(TurretAngle) * CompassScale)
- PrevTime = CurrentTime
- Tick++
- }
- interval(1000 / 12)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement