Jump to content

reepblue

Developers
  • Posts

    2,600
  • Joined

  • Last visited

Everything posted by reepblue

  1. A beam script that'll stretch a sprite from one point to another. Useful for lasers and cables. You can enable or disable auto updating if it isn't necessary. --[[ This script will create a simple sprite that looks like a beam or a cable. The beam is does not do any raycasting along and gets updated via the physics step. You can apply a script to the beam to change it's appearance such as flickering or pulsing. ]]-- Script.fxscriptfile=""--path "Beam Script" "Script (*.lua):lua|Scripts/Objects/Effects" Script.beamcolor=Vec4(1,1,1,1) --color "Beam Color" Script.beambrightness=1.0--float "Beam Brightness" Script.materialfile=""--path "Material" "Material (*.mat):mat|Materials" Script.beamwidth = .25 --float "Beam Width" Script.startpoint = nil --entity "Start Position" Script.endpoint = nil --entity "End Position" Script.beamhidden = false --bool "Hidden" Script.autoupdate = true --bool "Auto-Update" function Script:Start() -- Ignore pickers from picking us! self.entity:SetPickMode(0) -- Beam Sprite self.sprite = Sprite:Create() local material = Material:Load(self.materialfile) if material then self.sprite:SetMaterial(material) material:Release() else System:Debug("Beam material is missing.") end self.sprite:SetViewMode(6)--Rotate around z axis if self.fxscriptfile ~= nil then self.sprite:SetScript(self.fxscriptfile) end self.sprite:SetColor(self.beamcolor) self.sprite:SetIntensity(self.beambrightness) if not self.beamhidden then self.sprite:Show() else self.sprite:Hide() end -- If the first feild is nil, assume the user want's it to be the entity that holds this script. if self.startpoint == nil then self.startpoint = self.entity end -- A end point is needed. If nil, report error. if self.endpoint == nil then System:Debug("End point is nil.") end -- Only draw the beam once of auto-update is false. if not self.autoupdate then self:UpdateBeam() end end function Script:UpdateBeam() -- Return if the beam is hidden. if self.sprite:Hidden() then return end local p0 = self:GetStartPoint() local p1 = self:GetEndPoint() self.allignvector = p0 - p1 self.sprite:SetPosition((p0+p1)/2) self.sprite:AlignToVector(self.allignvector:Normalize(),2) -- Find distance between the two points. local distanceX = math.pow(p0.x - p1.x, 2) local distanceY = math.pow(p0.y - p1.y, 2) local distanceZ = math.pow(p0.z - p1.z, 2) local total_distance = math.sqrt(distanceX + distanceY + distanceZ) -- Modify the size of the beam based on the 2 points. self.sprite:SetSize(self.beamwidth, math.abs(total_distance)) end function Script:UpdatePhysics() if self.autoupdate then self:UpdateBeam() end end function Script:GetStartPoint() return self.startpoint:GetPosition(true) end function Script:GetEndPoint() return self.endpoint:GetPosition(true) end function Script:TurnOn()--in if self:IsOn() then return end self.sprite:Show() end function Script:TurnOff()--in if not self:IsOn() then return end self.sprite:Hide() end function Script:Toggle()--in if self:IsOn() then self:TurnOff() else self:TurnOn() end end function Script:IsOn() return not self.sprite:Hidden() end function Script:Release() self.sprite:Release() end If you're looking for a laser beam in which the end position is the end of a pick test, you can check out this post for details on how to do it. This script just has the basic functionality. You can reuse the script for more complex effects by ether cloning the script, or setting the script to an entity and then modifying it's values like. -- Make Pivot local p = Pivot:Create() -- Set Script to Pivot p:SetScript("scripts/objects/effects/beam.lua") -- Modify some values p.script.beamcolor=Vec4(1,0,0,1) p.script.autoupdate = false .... ....
  2. Cool, if you manage to get to finishing it, I'd be more than happy to have a look.
  3. Really like the flash drive idea as a prize, those are always handy! Also thanks for the extra 2 weeks. things can be busy with the holidays and all. I'll see what I can come up with and make it workshop friendly unlike last time.
  4. Like the flicker script, this will modify an entities intensity to create a pulsing effect. If any improvements can be made, let me know! Script.frequency=10.0--float "Frequency" Script.Recursive=true--bool function Script:Start() self:SaveIntensity(self.entity,self.Recursive) end --Store the original intensity values function Script:SaveIntensity(entity,recursive) entity:SetKeyValue("Pulse_Intensity",entity:GetIntensity()) if recursive then local n for n=0,entity:CountChildren()-1 do self:SaveIntensity(entity:GetChild(n),true) end end end --Apply a modified intensity value function Script:ApplyIntensity(entity,intensity,recursive) local i = entity:GetKeyValue("Pulse_Intensity") if i~="" then entity:SetIntensity(tonumber(i) * intensity) if recursive then local n for n=0,entity:CountChildren()-1 do self:ApplyIntensity(entity:GetChild(n),intensity,true) end end end end function Script:Draw() if self.color==nil then self.color = self.entity:GetColor() end local alpha = Math:Sin(Time:Millisecs()/self.frequency)*0.25+0.75 self:ApplyIntensity(self.entity,alpha,self.Recursive) end
  5. Odd, Josh mentioned he did that already, Maybe it didn't get pushed?
  6. Sadly most people on the Leadwerks forum use lua so C++ talk is kind of scarce. You'll need to purchase the Professional Edition DLC if you haven't already. First, join the beta branch. Leadwerks is going forward with Visual Studio 2017, and you can get the IDE here. Please note that Visual Studio is for Windows, and Code::Blocks is only for Linux. When you create a project or update an existing project, the project files for both IDE's will get cloned to your project. The code is set up to launch the engine, and call Main.lua/App.lua script. Again, Leadwerks at the moment is more focused on Lua, and I personally recommend only using C++ for program management (Time, level loading, etc) over game objects. (doors, swtiches)
  7. That's how I did it in the Vectronic Demo, it was kind of a pain tho.
  8. Yes, but if a trigger brush will get seen by the probe cameras and the reflection will have your trigger brush in the cubemap!
  9. Just recycling the vegetation billboard system would be ideal. Although lods are great, making them kind of sucks.
  10. Oh right, cause HUD textures are not suppose to have mipmaps. However, if a HUD texture does have mipmaps (for example, the advanced first person shooter crosshair), it'll remain pixelated. I'll give it another go in the future. Thanks,
  11. I hope one day SetLoadingMode is supported. Would be nice to have hud textures work properly.
  12. I find the default Start function fine for most cases. I only use my PostStart call for sounds. This will prevent any sounds playing while the level is loading. From my experience, Start seems to be called right after the entity and it's component has been made. I recall in a early build of the Vectronic Demo, the spawn sound played while the rest of the map was still loading. (Most noticeable in debug mode) Of course, that was back in 3.5/3.6, and I have been taking my own precautions since! Also, for the record, entity->CallFunction() can be called without a check to see if the entity has a script component attached to it.
  13. I made something a while back, but when you use it with probes, the reflection of the trigger brushes get baked within it's reflection. Josh said (a while back, mind you) he was gonna look into a "show in-game" option in which unlike "Hidden", would only have the entities Draw function skipped.
  14. At the end of my level loading process, tell all entities in my scene to start the function "PostStart". for (const auto& entity : world->entities) { entity->CallFunction("PostStart"); }
  15. reepblue

    SSLR WIP

    Really cool. Maybe if polished enough, it can be a standard scene option? This way the user doesn't need to worry about having this shader on top of the stack like the old one. A tick-box option for this would be great.
  16. 1) Make a new map with a simple box. 2) Add in a Probe 3) Enable Water Mode under scenes tab, 4) Party like it's 1969?!?!? Rebuilding GI doesn't do anything... 4.2 Beta, but I guess it can happen with 4.1 also..
  17. I wrote something like this for Crawler's Den. I'm waiting for C++ actor support with the editor.
  18. reepblue

    4.2 Beta

    Will the GUI be fully supported with this update or will that be when the editor fully utilizes it? Still, quite a bit of features, liking the sound of the spotlight texture one.
  19. Ok, that sounds better.
  20. Try playing with self.RefireTime and/or Time:GerSpeed()
  21. Yeah, you shouldn't need to call another script, or code a whole class just to do basic animations. When I was new to Leadwerks, I didn't understand why the default SetAnimation command didn't just work. But I understand cases where you might want the older system yourself though. I'm glad I was able to contribute to the engine. I was actually gonna expose this myself, but I was still getting bugs with my code with looping animations. (Although I was the only one getting them!). Didn't see any issues with the existing code though! New engine? Or you mean when you revamp the engine for Vulkan?
  22. Anyway to draw the bounds of these in-game for debugging purposes?
  23. He wanted to update them for them to support MSAA 0 before Josh dropped the entire idea all together. I really hope he re-releases them. What shader are you looking for?
  24. Hey all, I just tried to compile my project for Linux. After discovering that I also needed to also include Xext, I get an error that references Josh's build path. Anyone else getting this? Edit: Turns out I didn't update the libsteam_api.so file. Still odd that it returns Josh's filepath tho..
×
×
  • Create New...