Jump to content

IAmKane

Member
  • Content Count

    6
  • Joined

  • Last visited

About IAmKane

  • Rank
    Newbie

Profile Information

  • backer_title
    Contributor
  1. UPDATE: Apparently you can't use the radar to resolve the position of a contact unless it has a transponder, which is disappointing. Hopefully this changes later because otherwise this is rather useless.
  2. Hello all. I've noticed there doesn't seem to be any kind of script out there for a Radar Plot yet so I decided to take a crack at it. Unsurprisingly I immediately ran into issues. I have a bunch of questions, but I'll start off with what I hope is a simple one: In this section of code I'm using getEntries() to get all the available IDs then looping through the IDs to get data for each contact. (I don't actually plan on using all this data, I just want to test and see what I can get to work and pare it down from there.) I'm getting the contact ID's to pull in in the debug but I'm getting errors reading any kind of data about those IDs. Contacts = Radar.getEntries() --list of construct IDs if #Contacts >= 1 then for i,v in ipairs(Contacts) do local cID = Contacts[i] -- construct ID for 'i' local cName = Radar.getConstructName(cID) --name of detected construct [id][name] local pID = Radar.getConstructOwner(cID) --player ID # of construct owner [id][player] local cOwner = database.getPlayer(pID) --resolve player name from player ID local cSize = vec3(Radar.getConstructSize(cID)) --size of the construct bounding box [id][x,y,z] local cType = Radar.getConstructType(cID) --type of construct [id][static/dynamic] local cPos = vec3(Radar.getConstructPos(cID)) --local coordinates of the construct [id][x,y,z] local cVel = vec3(Radar.getConstructVelocity(cID)) --local speed relative to absolute space [id][x,y,z] local cSpeed = cVel:len() --rendered speed based on cVel info above local cAcc = vec3(Radar.getConstructAcceleration(cID)) --local accel relative to absolute space [id][x,y,z] local cWorldPos = vec3(Radar.getConstructWorldPos(cID)) --world coordinates of the construct [id][x,y,z] local cWorldVel = vec3(Radar.getConstructWorldVelocity(cID)) --world speed relative to absolute space [id][x,y,z] local cWorldAcc = vec3(Radar.getConstructWorldAcceleration(cID)) --world accel relative to absolute space [id][x,y,z] It's yelling at me for calling getConstructOwner() saying it's a nil variable. Testing all of the other variables relating to position and speed for the contacts yields the same error. Am I making a mistake in how I am calling them? I checked the API and it looks right to me but then I've been wrong before. As a reference here is the whole code in its current state:
  3. It's the same as in the OP, just with constructVelocity:len() replacing constructVelocity. It goes into the flush() of my ship inside of the if-then for determining whether it is in atmosphere or not when it is complied as a 'flying' type construct. Basically like this: local autoRollVelThreshold = 50.0 --export: velocity below which the creaft will auto-roll the wings level to aid in landing =====NEW===== -- In atmosphere? if worldVertical:len() > 0.01 and unit.getAtmosphereDensity() > 0.0 then local autoRollRollThreshold = 1.0 -- autoRoll on AND currentRollDeg is big enough AND player is not rolling if autoRoll == true and currentRollDegAbs > autoRollRollThreshold and finalRollInput == 0 then local targetRollDeg = utils.clamp(0,currentRollDegAbs-30, currentRollDegAbs+30); -- we go back to 0 within a certain limit if (rollPID == nil) then rollPID = pid.new(autoRollFactor * 0.01, 0, autoRollFactor * 0.1) -- magic number tweaked to have a default factor in the 1-10 range end rollPID:inject(targetRollDeg - currentRollDeg) local autoRollInput = rollPID:get() targetAngularVelocity = targetAngularVelocity + autoRollInput * constructForward end -- =====START NEW=====autolevel -- rolls wings level if velocity is below a certain limit if constructVelocity:len() < autoRollVelThreshold then local targetRollDeg = utils.clamp(0,currentRollDegAbs-30, currentRollDegAbs+30); -- we go back to 0 within a certain limit if (rollPID == nil) then rollPID = pid.new(autoRollFactor * 0.01, 0, autoRollFactor * 0.1) -- magic number tweaked to have a default factor in the 1-10 range end rollPID:inject(targetRollDeg - currentRollDeg) local autoRollInput = rollPID:get() targetAngularVelocity = targetAngularVelocity + autoRollInput * constructForward end -- =====STOP NEW=====autolevel local turnAssistRollThreshold = 20.0 -- turnAssist AND currentRollDeg is big enough AND player is not pitching or yawing if turnAssist == true and currentRollDegAbs > turnAssistRollThreshold and finalPitchInput == 0 and finalYawInput == 0 then local rollToPitchFactor = turnAssistFactor * 0.1 -- magic number tweaked to have a default factor in the 1-10 range local rollToYawFactor = turnAssistFactor * 0.025 -- magic number tweaked to have a default factor in the 1-10 range -- rescale (turnAssistRollThreshold -> 180) to (0 -> 180) local rescaleRollDegAbs = ((currentRollDegAbs - turnAssistRollThreshold) / (180 - turnAssistRollThreshold)) * 180 local rollVerticalRatio = 0 if rescaleRollDegAbs < 90 then rollVerticalRatio = rescaleRollDegAbs / 90 elseif rescaleRollDegAbs < 180 then rollVerticalRatio = (180 - rescaleRollDegAbs) / 90 end rollVerticalRatio = rollVerticalRatio * rollVerticalRatio local turnAssistYawInput = - currentRollDegSign * rollToYawFactor * (1.0 - rollVerticalRatio) local turnAssistPitchInput = rollToPitchFactor * rollVerticalRatio targetAngularVelocity = targetAngularVelocity + turnAssistPitchInput * constructRight + turnAssistYawInput * constructUp end end Sorry it's so messy, the auto-formatting really didn't like this snippet.
  4. That did the trick, thanks! Why does it work that way, though? I thought 'len' was for getting the length of a string.
  5. Like the title says, this is probably a simple question but I'm having an issue getting any kind of custom tweaking done in my ship. Hopefully one of you knowledgeable folks can let me know where I've gone wrong. Currently my ship is setup as a flying construct with the mouse-point control method. I figured I'd start with some 'simple' adjustments so that the ship behaved differently when below a certain speed to simplify the landing process. Apparently I was too ambitious, because when I try to fly the ship it locks up the controls and I get a lovely red "LUA Error" message. I did my best to stick to pretty simple code based on what was already in the script so I'm pretty sure my syntax is correct, but I'm new to LUA so I could be way off base. Here's the code I've tried starting with: local autoRollVelThreshold = 50.0 --my created variable local constructVelocity = vec3(core.getWorldVelocity()) --pre-existing variable -- rolls wings level if velocity is below a certain limit defined by the variable autoRollVelThreshold if constructVelocity < autoRollVelThreshold then local targetRollDeg = utils.clamp(0,currentRollDegAbs-30, currentRollDegAbs+30); -- we go back to 0 within a certain limit if (rollPID == nil) then rollPID = pid.new(autoRollFactor * 0.01, 0, autoRollFactor * 0.1) -- magic number tweaked to have a default factor in the 1-10 range end rollPID:inject(targetRollDeg - currentRollDeg) local autoRollInput = rollPID:get() targetAngularVelocity = targetAngularVelocity + autoRollInput * constructForward end It's based on the pre-existing code for the auto-roll parameter, except instead of using the true/false autoRoll variable I'm using the local variable constructVelocity defined elsewhere in flush() alongside my local variable autoRollVelThreshold which sets the speed at which the action takes place. I thought this would be a simple start to something more complex but it appears I've got some basic issues I still need to get sorted. Any help would be greatly appreciated, thanks.
×
×
  • Create New...