Initial Commit
This commit is contained in:
219
entities/weapons/weapon_jb_base/client.lua
Normal file
219
entities/weapons/weapon_jb_base/client.lua
Normal file
@@ -0,0 +1,219 @@
|
||||
-- ####################################################################################
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## CASUAL BANANAS CONFIDENTIAL ##
|
||||
-- ## ##
|
||||
-- ## __________________________ ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## Copyright 2014 (c) Casual Bananas ##
|
||||
-- ## All Rights Reserved. ##
|
||||
-- ## ##
|
||||
-- ## NOTICE: All information contained herein is, and remains ##
|
||||
-- ## the property of Casual Bananas. The intellectual and technical ##
|
||||
-- ## concepts contained herein are proprietary to Casual Bananas and may be ##
|
||||
-- ## covered by U.S. and Foreign Patents, patents in process, and are ##
|
||||
-- ## protected by trade secret or copyright law. ##
|
||||
-- ## Dissemination of this information or reproduction of this material ##
|
||||
-- ## is strictly forbidden unless prior written permission is obtained ##
|
||||
-- ## from Casual Bananas ##
|
||||
-- ## ##
|
||||
-- ## _________________________ ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## Casual Bananas is registered with the "Kamer van Koophandel" (Dutch ##
|
||||
-- ## chamber of commerce) in The Netherlands. ##
|
||||
-- ## ##
|
||||
-- ## Company (KVK) number : 59449837 ##
|
||||
-- ## Email : info@casualbananas.com ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ####################################################################################
|
||||
|
||||
local MODE_NORMAL = 1;
|
||||
local MODE_AIM = 2;
|
||||
local MODE_SPRINT = 3;
|
||||
|
||||
SWEP.DrawAmmo = true;
|
||||
SWEP.DrawCrosshair = false;
|
||||
SWEP.ViewModelFOV = 52;
|
||||
SWEP.ViewModelFlip = false;
|
||||
SWEP.CSMuzzleFlashes = true;
|
||||
SWEP.DrawWeaponInfoBox = true;
|
||||
|
||||
SWEP.Slot = 1;
|
||||
SWEP.SlotPos = 1;
|
||||
|
||||
SWEP.lastFire = 0;
|
||||
|
||||
local matCrosshair = Material("materials/jailbreak_excl/crosshair.png");
|
||||
|
||||
local lastFire = 0;
|
||||
function SWEP:FireCallback()
|
||||
if IsFirstTimePredicted() then
|
||||
local vm = self.Owner:GetViewModel();
|
||||
local muz = vm:GetAttachment("1");
|
||||
|
||||
if not self.Em then
|
||||
self.Em = ParticleEmitter(muz.Pos);
|
||||
end
|
||||
|
||||
local par = self.Em:Add("particle/smokesprites_000" .. math.random(1, 9), muz.Pos);
|
||||
par:SetStartSize(math.random(0.5, 1));
|
||||
par:SetStartAlpha(100);
|
||||
par:SetEndAlpha(0);
|
||||
par:SetEndSize(math.random(4, 4.5));
|
||||
par:SetDieTime(1 + math.Rand(-0.3, 0.3));
|
||||
par:SetRoll(math.Rand(0.2, .8));
|
||||
par:SetRollDelta(0.8 + math.Rand(-0.3, 0.3));
|
||||
par:SetColor(140,140,140,200);
|
||||
par:SetGravity(Vector(0, 0, .5));
|
||||
local mup = (muz.Ang:Up()*-1);
|
||||
par:SetVelocity(Vector(0, 0,7)-Vector(mup.x,mup.y,0));
|
||||
|
||||
local par = self.Em:Add("sprites/heatwave", muz.Pos);
|
||||
par:SetStartSize(4);
|
||||
par:SetEndSize(0);
|
||||
par:SetDieTime(0.6);
|
||||
par:SetGravity(Vector(0, 0, 1));
|
||||
par:SetVelocity(Vector(0, 0, 1));
|
||||
end
|
||||
lastFire = CurTime();
|
||||
end
|
||||
|
||||
function SWEP:AdjustMouseSensitivity()
|
||||
return self:GetNWMode() == MODE_AIM and .5 or 1;
|
||||
end
|
||||
|
||||
local gap = 5
|
||||
local gap2 = 0
|
||||
local color_sight = Color(255,255,255,255);
|
||||
local x2 = (ScrW() - 1024) / 2
|
||||
local y2 = (ScrH() - 1024) / 2
|
||||
local x3 = ScrW() - x2
|
||||
local y3 = ScrH() - y2
|
||||
local dt;
|
||||
function SWEP:DrawHUD()
|
||||
dt = FrameTime();
|
||||
|
||||
x, y = ScrW() / 2, ScrH() / 2;
|
||||
|
||||
local scale = (10 * self.Primary.Cone)* (2 - math.Clamp( (CurTime() - self:GetNWLastShoot()) * 5, 0.0, 1.0 ))
|
||||
|
||||
if (self:GetNWMode() == MODE_AIM and not self.FakeIronSights) or self:GetNWMode() == MODE_SPRINT then
|
||||
color_sight.a = math.Approach(color_sight.a, 0, dt / 0.0017)
|
||||
else
|
||||
color_sight.a = math.Approach(color_sight.a, 230, dt / 0.001)
|
||||
end
|
||||
|
||||
gap = math.Approach(gap, 50 * ((10 / (self.Owner:GetFOV() / 90)) * self:GetNWLastShoot()), 1.5 + gap * 0.1)
|
||||
|
||||
surface.SetDrawColor(color_sight);
|
||||
surface.SetMaterial(matCrosshair);
|
||||
surface.DrawTexturedRectRotated(x - gap - 14/2,y,32,32,270+180);
|
||||
surface.DrawTexturedRectRotated(x + gap + 14/2,y,32,32,90+180);
|
||||
surface.DrawTexturedRectRotated(x, y + gap + 14/2,32,32,0+180);
|
||||
surface.DrawTexturedRectRotated(x, y - gap - 14/2,32,32,180+180);
|
||||
end
|
||||
|
||||
local time,fireTime,targetPos,targetAng,speed,speedReduced;
|
||||
local idealPos = Vector(0,0,0);
|
||||
function SWEP:GetViewModelPosition( pos, ang )
|
||||
if not IsValid(self.Owner) then return end
|
||||
|
||||
local mode = self:GetNWMode();
|
||||
if mode < 1 or mode > 3 then
|
||||
mode = MODE_NORMAL;
|
||||
end
|
||||
|
||||
time = math.Clamp(FrameTime() * 7,0,1);
|
||||
|
||||
idealPos.x = self.Positions[mode].pos.x;
|
||||
idealPos.y = self.Positions[mode].pos.y;
|
||||
|
||||
if mode == MODE_AIM and self.FakeIronSights then
|
||||
idealPos.z = self.Positions[mode].pos.z-1.4;
|
||||
else
|
||||
idealPos.z = self.Positions[mode].pos.z
|
||||
end
|
||||
|
||||
self.smPos = LerpVector(time,self.smPos or self.Positions[mode].pos,idealPos);
|
||||
self.smAng = LerpVector(time,self.smAng or self.Positions[mode].ang,self.Positions[mode].ang);
|
||||
|
||||
if !self.lastMode or mode ~= self.lastMode then
|
||||
self.lastMode = mode;
|
||||
|
||||
if mode == MODE_AIM then
|
||||
self.SwayScale = 0
|
||||
self.BobScale = 0
|
||||
else
|
||||
self.SwayScale = 0.8
|
||||
self.BobScale = 0.8
|
||||
end
|
||||
end
|
||||
|
||||
targetPos = self.smPos + vector_origin;
|
||||
targetAng = self.smAng;
|
||||
|
||||
if mode == MODE_AIM then
|
||||
local mul = 0;
|
||||
fireTime = math.Clamp(FrameTime()*7,.05,.18);
|
||||
lastFire = lastFire or 0;
|
||||
if lastFire > CurTime() - fireTime then
|
||||
mul = math.Clamp( (CurTime() - lastFire) / fireTime, 0, .5 )
|
||||
mul = 1-mul;
|
||||
end
|
||||
|
||||
targetPos.y = targetPos.y + (-self.Primary.IronShootForce * mul);
|
||||
elseif mode == MODE_SPRINT then
|
||||
speed = self.Owner:GetVelocity():Length();
|
||||
local clamp = math.Clamp((4 + speed / 100) / (self.Owner:Crouching() and 1.5 or 1), 0, 7)
|
||||
|
||||
local co = math.cos(CurTime() * clamp);
|
||||
local si = math.sin(CurTime() * clamp);
|
||||
local ta = math.atan(co, si)
|
||||
local ta2 = math.atan(co * si, co * si)
|
||||
|
||||
speedReduced = speed / 250
|
||||
|
||||
targetPos.x = targetPos.x + ta * 0.1375 * speedReduced;
|
||||
targetPos.z = targetPos.z + ta2 * 0.0625 * speedReduced;
|
||||
targetAng.y = targetAng.y + ta * 0.125 * speedReduced;
|
||||
targetAng.x = targetAng.x + ta2 * 0.25 * speedReduced;
|
||||
targetAng.z = targetAng.z + ta2 * 0.375 * speedReduced;
|
||||
end
|
||||
|
||||
ang:RotateAroundAxis( ang:Right(), targetAng.x);
|
||||
ang:RotateAroundAxis( ang:Up(), targetAng.y);
|
||||
ang:RotateAroundAxis( ang:Forward(), targetAng.z);
|
||||
pos = pos + targetPos.x * ang:Right();
|
||||
pos = pos + targetPos.y * ang:Forward();
|
||||
pos = pos + targetPos.z * ang:Up();
|
||||
|
||||
return pos, ang
|
||||
end
|
||||
|
||||
|
||||
local lp,wep;
|
||||
hook.Add("HUDPaint","drawHitMarkers",function()
|
||||
lp=LocalPlayer();
|
||||
if IsValid(lp) then
|
||||
wep = lp:GetActiveWeapon();
|
||||
if IsValid(wep) and wep.Markers then
|
||||
for k,v in pairs( wep.Markers)do
|
||||
if v.alpha < 5 then
|
||||
table.remove( wep.Markers,k);
|
||||
continue;
|
||||
end
|
||||
local pos = v.pos:ToScreen();
|
||||
|
||||
surface.SetDrawColor(Color(255,255,255,v.alpha))
|
||||
surface.DrawLine(pos.x-2,pos.y-2,pos.x-5,pos.y-5);
|
||||
surface.DrawLine(pos.x+2,pos.y+2,pos.x+5,pos.y+5);
|
||||
surface.DrawLine(pos.x-2,pos.y+2,pos.x-5,pos.y+5);
|
||||
surface.DrawLine(pos.x+2,pos.y-2,pos.x+5,pos.y-5);
|
||||
v.alpha = v.alpha-FrameTime()*240;
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user