Poll

Is having the (pretend it is currently implemented) mouse-joystick tied to a selectable toggle switch a good idea?

Yes
No
No, I really don't want mouse-joystick eventually implemented AT ALL; even as a selectable option; I ARR HATERRR!!!!11 ... rawr!
Snuffleupagus

Author Topic: IF and WHEN mouse-as-joystick is implemented, is this a good idea?  (Read 4747 times)

0 Members and 1 Guest are viewing this topic.

Offline jr2

  • The Mail Man
  • 212
  • It's prounounced jayartoo 0x6A7232
    • Steam
IF and WHEN mouse-as-joystick is implemented, is this a good idea?
* jr2 has an idea... (for when this eventually gets implemented after the interface code is re-written and what-not)

How about tying the Mouse-as-joystick option to a toggle-key, selectable in the controls menu inside of FS?  So, I set the toggle-key to Left Shift ... or, say, the 5th button on my mouse (once that is supported, or Button 3 or w/e).  Have the game treat the mouse as a joystick, then when the toggle button is pressed, the "joystick" part of the mouse input gets zeroed (so that you don't get a nasty surprise when it's toggled back on again) and the mouse becomes the sniper's best friend again until it needs to go back to being the dogfighter's (well second) best friend?  And maybe have an option as to which mode the game defaults to on startup?

What are the opinions about that idea?

EDIT: Err... I don't want to hijack the thread, should I make my own poll?

 

Offline Sushi

  • Art Critic
  • 211
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
Why wait? Pretty sure you can add that functionality to the existing mouse script: just add a key or  button toggle to turn it on or off.

  

Offline jr2

  • The Mail Man
  • 212
  • It's prounounced jayartoo 0x6A7232
    • Steam
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
Cause I'm not a coder

* jr2 looks at Nuke

 

Offline Nuke

  • Ka-Boom!
  • 212
  • Mutants Worship Me
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
it is possible to use any key on the keyboard in scripting. you just have to write some script to do it. you can see examples in both the fsrts and the cockpit demo scripts (both should be available on svn). the only real downside is that any key used would need to be hard coded by script or by some file that the script reads/writes to for settings, meaning no in game configuration (of course this can also be scripted).
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

 

Offline z64555

  • 210
  • Self-proclaimed controls expert
    • Steam
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
I'm thinking that "Toggle while Pressed" is the best way to go with this feature... such as the Middle or Right mouse buttons on a 3-button wheel mouse. However, I don't think it would hurt to include the standard "Toggle" too.
Secure the Source, Contain the Code, Protect the Project
chief1983

------------
funtapaz: Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Juche.
z64555: s/J/Do
BotenAlfred: <funtapaz> Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Douche.

 

Offline Nuke

  • Ka-Boom!
  • 212
  • Mutants Worship Me
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
id probibly just bind it to the spacebar and use mouse2 for missiles. its probbily better to be a toggle so hitting it would switch mouse modes. its not really practical to have to hold the button down while youre using a particular mode.
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

 

Offline Sushi

  • Art Critic
  • 211
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
id probibly just bind it to the spacebar and use mouse2 for missiles. its probbily better to be a toggle so hitting it would switch mouse modes. its not really practical to have to hold the button down while youre using a particular mode.

Yeah, that's what I'd do too. I'd also get rid of the "mouse3 to center" that the script currently has: I never use it, and I think you could get away with just having it center when you toggle (so if you really need it centered, just hit space twice).

 

Offline Nuke

  • Ka-Boom!
  • 212
  • Mutants Worship Me
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
id probibly just bind it to the spacebar and use mouse2 for missiles. its probbily better to be a toggle so hitting it would switch mouse modes. its not really practical to have to hold the button down while youre using a particular mode.

Yeah, that's what I'd do too. I'd also get rid of the "mouse3 to center" that the script currently has: I never use it, and I think you could get away with just having it center when you toggle (so if you really need it centered, just hit space twice).

i think the only time you need to center is when changing from your standard mode to your mouse joy mode. and technically the mouse should be fairly close to the center when that happens anyway, since mouse is always centered after delta is measured. mouse should always be re-centered when switching modes.
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

 

Offline Sushi

  • Art Critic
  • 211
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
i think the only time you need to center is when changing from your standard mode to your mouse joy mode. and technically the mouse should be fairly close to the center when that happens anyway, since mouse is always centered after delta is measured. mouse should always be re-centered when switching modes.

Exactly.


 

Offline torc

  • 210
  • Diaspora SFX engineer
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
why don't start to play a space sim with joy and throttle and enjoy the incredible immersion that give this input?...  :confused:
indossare una divisa può avere un prezzo alto...ma a volte...è troppo alto!!! Bill Adama

 

Offline z64555

  • 210
  • Self-proclaimed controls expert
    • Steam
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
why don't start to play a space sim with joy and throttle and enjoy the incredible immersion that give this input?...  :confused:

Amazingly, I understood that...

Ah, I think I've mentioned it in the parent post, but I'll mention it here again.

Joystick:
Analog control - Accelerational

Long-held "de-facto" standard by most flight sims, the joystick's biggest strength is that it allows for very fluid movements. Tilting x degrees will turn y degrees per second in-game. Its primary weakness is that it is not precise, it takes a good bit of wiggling around to just get the craft pointed at a small object far away.

Joysticks hold an ability over mice and trackballs in their positional modes- they can adjust two directions mid-turn.

Joysticks also hold an aesthetic advantage over mice and trackballs. To date, which real-world aircraft have ever used a mouse or trackball as its control system?


Advantages: Aesthetically appeasing. 2 axis velocity adjustments. Supremely smooth turning

Disadvantages: Poor precision

"Aesthetically appeasing" means that it feels more like the real-deal... or at least as far as I know.

However, torc, the whole pupose of this particular thread is to improve the functionality of the mouse. Some people prefer using mice over joysticks, and even fewer people have the chance to use a joystick for PC gaming nowdays.
Secure the Source, Contain the Code, Protect the Project
chief1983

------------
funtapaz: Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Juche.
z64555: s/J/Do
BotenAlfred: <funtapaz> Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Douche.

 

Offline chief1983

  • Still lacks a custom title
  • Moderator
  • 212
  • ⬇️⬆️⬅️⬅️🅰➡️⬇️
    • Skype
    • Steam
    • Twitter
    • Fate of the Galaxy
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
Also, if I were doing a demo of a game on a laptop at a conference or LAN party, I might not want to pack up my joystick just to show off the gameplay effectively.  Even if I'd rather use the joystick, sometimes space just isn't available to bring it along, and sometimes you're worried for its safety if you tried :)
Fate of the Galaxy - Now Hiring!  Apply within | Diaspora | SCP Home | Collada Importer for PCS2
Karajorma's 'How to report bugs' | Mantis
#freespace | #scp-swc | #diaspora | #SCP | #hard-light on EsperNet

"You may not sell or otherwise commercially exploit the source or things you created based on the source." -- Excerpt from FSO license, for reference

Nuclear1:  Jesus Christ zack you're a little too hamyurger for HLP right now...
iamzack:  i dont have hamynerge i just want ptatoc hips D:
redsniper:  Platonic hips?!
iamzack:  lays

 

Offline Sushi

  • Art Critic
  • 211
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
I bought a joystick a few months ago. I sold it after a couple of weeks. Too much desk space and no precision for small movements made it an exercise in extreme aggravation. A higher-quality stick would have probably negated the precision problem, but I'm not willing to drop the Benjamins it would cost to get a properly precise one.

 

Offline Nuke

  • Ka-Boom!
  • 212
  • Mutants Worship Me
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
I bought a joystick a few months ago. I sold it after a couple of weeks. Too much desk space and no precision for small movements made it an exercise in extreme aggravation. A higher-quality stick would have probably negated the precision problem, but I'm not willing to drop the Benjamins it would cost to get a properly precise one.

this is one of my many arguments for better mouse code. modern joysticks are just too expensive to expect everyone to have one. spend any less than $60 and youre buying crap, spend anything more, youre likely getting ripped off. so many gamers dont have any reason what so ever to buy a joystick, there arent many new games on the market that use them. so if someone is looking to play freespace and all they have is a mouse, should get the best experience with that mouse so they tell all their friends how awesome freepace is. this also means full multi servers, more users on the forum, and a largeg pool of people to draw modding and coding talent from.
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

 

Offline z64555

  • 210
  • Self-proclaimed controls expert
    • Steam
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
I bought a joystick a few months ago. I sold it after a couple of weeks. Too much desk space and no precision for small movements made it an exercise in extreme aggravation. A higher-quality stick would have probably negated the precision problem, but I'm not willing to drop the Benjamins it would cost to get a properly precise one.

this is one of my many arguments for better mouse code. modern joysticks are just too expensive to expect everyone to have one. spend any less than $60 and youre buying crap, spend anything more, youre likely getting ripped off. so many gamers dont have any reason what so ever to buy a joystick, there arent many new games on the market that use them. so if someone is looking to play freespace and all they have is a mouse, should get the best experience with that mouse so they tell all their friends how awesome freepace is. this also means full multi servers, more users on the forum, and a largeg pool of people to draw modding and coding talent from.

That's the primary reason I got a DualShock style gamepad. It has roughly the same precision as a cheap joystick, but is far more flexible as to what types of games you can play.

Anywho, still supporting the mouse code upgrade. :yes:
Secure the Source, Contain the Code, Protect the Project
chief1983

------------
funtapaz: Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Juche.
z64555: s/J/Do
BotenAlfred: <funtapaz> Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Douche.

 

Offline Sushi

  • Art Critic
  • 211
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
Here is a quick&dirty variation on the mouse script that allows you to toggle between "normal" mouse and "joystick" mouse by clicking the middle mouse button. Basically what the OP asked for, although somewhat lacking polish. You can just drop the script below in as a replacement for the code here:
http://www.hard-light.net/wiki/index.php/Script_-_Scripted_Mouse

Enjoy!

Code: [Select]
#Conditional Hooks

$Application: FS2_Open
$On Mission Start:

[

--NEW PARSER
----------------------
-- parser functions --
----------------------

--- get newline and make sure its lowercase
function get_next_line(nfile)
   -- read the line
   nline = nfile:read("*l")
   -- change to lowercase
   if nline ~= nil then
      nline = nline:lower()
   end
   return nline
end

--- find keyword and return the place where it ends
function find_keyword(line_to_parse, keyword)
   -- find any instances of the keyword
   keyword = keyword:lower()
   local key_s, key_e = line_to_parse:find(keyword)

   -- if we cant find a thing
   if key_s == nil then
      return nil
   end

   -- check if the line has been commented away
   local comment_s, comment_e = line_to_parse:find("--")

   if comment_s == nil then
      return key_e
   elseif comment_s < key_s then
      return nil
   end

   return key_e
end

--- specific parsing funcs to make things easier to read ---
--- string or rather substring parser
function parse_string(start_key, line_to_parse)
   local substring = line_to_parse:sub(start_key)
   -- remove empty spaces
   local substring_start = substring:find("%a")
   substring = substring:sub(substring_start)
   return substring
end

--- function to parse numbers
function parse_number(start_key, line_to_parse)
   local result = line_to_parse:sub(start_key)
   local r_value = result:match('[0-9%.]+')
   r_value = tonumber(r_value)
   return r_value
end

--- function to parse arrays of numbers
function parse_number_array(start_key, line_to_parse)
   -- stuff the array
   local r = { }
   local p
   for p in line_to_parse:gmatch('[0-9%.]+') do
      p = tonumber(p)
      p = math.floor(p)
      table.insert(r, p)
   end
   return r
end

--- function to parse things
function parse_entry(keyword, mousefile, type, use_same_line)
   local new_entry = nil
   local return_val
   local return_array = {}
   local c_line
   if use_same_line == false then
      c_line = get_next_line(mousefile)
      if c_line == nil then
         -- end of file
         return -2, false, return_array
      end
      while c_line:len() == 0 do
         c_line = get_next_line(mousefile)
         if c_line == nil then
            -- end of file
            return -2, false, return_array
         end
      end
      current_start_line = c_line
   else
      c_line = use_same_line
   end

   local c_key = nil
   while c_key == nil do
      -- we didn't find the thing...
      c_key = find_keyword(c_line, keyword)
      if c_key == nil then
         local comment_s = nil
         comment_s = c_line:find("//")
         if comment_s ~= nil then
            c_line = get_next_line(mousefile)
            if c_line == nil then
               -- end of file
               return -2, false, return_array
            end
            while c_line:len() == 0 do
               c_line = get_next_line(mousefile)
               if c_line == nil then
                  return -2, false, return_array
               end
            end
         else
            -- try next entry
            return -1, c_line, return_array
         end
      end
   end
   if type == "n" then
      -- soo... parse a number
      return_array[1] = parse_number(c_key, c_line)
      return_val = #return_array
      return return_val, false, return_array
   elseif type == "array_n" then
      -- soo... parse an array of numbers
      return_array = parse_number_array(c_key, c_line)
      return_val = #return_array
      return return_val, false, return_array
   end
   return -1, c_line, return_array
end

function cap_value(min_val, max_val, value)
   if min_val > value then
      value = min_val
   elseif max_val < value then
      value = max_val
   end
   return value
end

-- actual parsing function
function parse_mousefile(mousefile)
   use_same_line = false
   local current_start_line = use_same_line
   local not_new_entry = false
   local entry_start = 1
   local still_parsing = true

   while still_parsing == true do

      if use_same_line == false then
         use_same_line = get_next_line(mousefile)
      end

      if use_same_line == nil then
         -- end of file
         still_parsing = false
         break
      end

      if use_same_line:len() == 0 then
         use_same_line = false
      else
         current_start_line = use_same_line
         if entry_start ~= nil then
            while entry_start ~= nil do
               if not_new_entry == false then
                  ba.print("\nScripted Mouse Loading\n")
               end

               local temp_val = nil
               local temp_arr = nil
               entry_start = nil

               temp_val, use_same_line, temp_arr = parse_entry("Sensitivity:", mousefile, "n", use_same_line)
               if temp_val == -2 then
                  break
               elseif temp_val ~= -1 then
                  temp_arr[1] = cap_value(100, 600, temp_arr[1])
                  ba.print("\tSensitivity: " .. temp_arr[1] .. "\n")
                  mousesensitivity = temp_arr[1]
               end

               temp_val, use_same_line, temp_arr = parse_entry("Sensitivity Curve:", mousefile, "n", use_same_line)
               if temp_val == -2 then
                  break
               elseif temp_val ~= -1 then
                  temp_arr[1] = cap_value(0, 6, temp_arr[1])
                  ba.print("\tSensitivity Curve: " .. temp_arr[1] .. "\n")
                  mousesensitivitymode = temp_arr[1]
               end

               temp_val, use_same_line, temp_arr = parse_entry("Control Mode:", mousefile, "n", use_same_line)
               if temp_val == -2 then
                  break
               elseif temp_val ~= -1 then
                  ba.print("\tControl Mode: " .. temp_arr[1] .. "\n")
                  mousecontrolmode = temp_arr[1]
               end

               temp_val, use_same_line, temp_arr = parse_entry("Deadzone:", mousefile, "n", use_same_line)
               if temp_val == -2 then
                  break
               elseif temp_val ~= -1 then
                  temp_arr[1] = cap_value(0, 300, temp_arr[1])
                  ba.print("\tDeadzone: " .. temp_arr[1] .. "\n")
                  mousedeadzone = temp_arr[1]
               end

               temp_val, use_same_line, temp_arr = parse_entry("Mouse Invert:", mousefile, "n", use_same_line)
               if temp_val == -2 then
                  break
               elseif temp_val ~= -1 then
                  if temp_arr[1] ~= 0 then
                     temp_arr[1] = 1
                  end
                  ba.print("\tMouse Invert: " .. temp_arr[1] .. "\n")
                  mouseinvert = temp_arr[1]
               end

               temp_val, use_same_line, temp_arr = parse_entry("Boundary Limit:", mousefile, "n", use_same_line)
               if temp_val == -2 then
                  break
               elseif temp_val ~= -1 then
                  ba.print("\tBoundary Limit: " .. temp_arr[1] .. "\n")
                  mouseboundaries = temp_arr[1]
               end

               temp_val, use_same_line, temp_arr = parse_entry("Indicator Color:", mousefile, "array_n", use_same_line)
               if temp_val == -2 then
                  break
               elseif temp_val ~= -1 then
                  ba.print("\tIndicator Color: " .. temp_val .. "\n")
                  mousecolors = temp_arr
               end

               if use_same_line ~= false then
                  ba.warning("Bogus string in mouse config file: " .. use_same_line)
               end
            end
         else
            use_same_line = false
         end
      end
   end
end
--NEW PARSER

function verify_mouse_data()
   -- make sure we have a number in deadzone var and not nil
   if mousedeadzone == nil then
      mousedeadzone = 0
   end

   -- define some variables
   mouse_reset_counter = nil
   missiontime_old = 0
   missiontime = nil

   -- if mouse invert was set to true, then invert the mouse (set it to '-1')
   -- otherwise define the multiplier as '1'
   if mouseinvert == 1 then
      mouseinvert = -1
   else
      mouseinvert = 1
   end

   -- check if boundaries are valid
   if mouseboundaries == nil then
      mouseboundaries = 1
   end

   -- check that defined control area is not larger than the actual area which can be controlled
   local max_limits
   max_limits = mousesensitivity * 2 + mousedeadzone * 2 + 10
   scr_width = gr.getScreenWidth()
   scr_height = gr.getScreenHeight()
   if max_limits > scr_width or max_limits > scr_height then
      ba.warning("Mouse control area defined to be larger than the window size, please resize")
   end

   --setup mouse bitmap
   mouse_bm = gr.loadTexture("mouse_ret_2.dds", true)
   if mouse_bm:isValid() then
      no_bitmap = false
      mouse_bm_w = mouse_bm:getWidth() / 2
      mouse_bm_h = mouse_bm:getHeight() / 2
   else
      no_bitmap = true
   end
end

-----------------------------------------------------------------------
-- check if the file containing mouse references exists
-----------------------------------------------------------------------
filename_mouse = "mouse_script.cfg"
boolmousefileOK = cf.fileExists(filename_mouse, "data/config/", true)
boolscriptmouse = false
togglescriptmouse = false

-- if file exists
if boolmousefileOK then
   -- reset all the variables to nil
   mousesensitivity = nil
   mousesensitivitymode = nil
   mousecontrolmode = nil
   mousedeadzone = nil
   mouseinvert = nil
   mouseboundaries = nil
   mousecolor = nil
   mousecolors = {}

   -- open the file in read only mode
   mousefile = cf.openFile(filename_mouse, "r")
   -- do the parsing thing
   parse_mousefile(mousefile)
   -- all data read.. time to close the file
   mousefile:close()

   -- if these three were found from the cfg file...
   if mousesensitivity and mousesensitivitymode and mousecontrolmode then

      -- set script to actually run, allow lua to override c coded controls
      boolscriptmouse = true
      ba.setControlMode(LUA_FULL_CONTROLS)
      verify_mouse_data()

   else
      ba.warning("Scripted mouse's init failed")
   end
else
   ba.warning("File '" .. filename_mouse .."' not found")
end

------------------------
------ functions -------
------------------------
function mouse_control_A(value, centervalue, axis)
   -- get the actual difference from centerpoint
   delta = value - centervalue

   -- default multiplier to +1
   multiplier = 1

   -- if we are handling negative values set multiplier to -1
   -- and make sure we deal only with positive values
   if delta < 0 then
      multiplier = -1
      delta = math.abs(delta)
   end

   -- deduct deadzone from the delta
   delta = delta - mousedeadzone
   if delta < 0 then
      delta = 0
   end

   -- scale delta from 0 to 1 according to defined sensitivity
   delta = delta / mousesensitivity
   if delta > 1 then
      delta = 1
   end

   -- if we do not have extreme values
   -- apply the defined sensitivity curve
   if (delta > 0) and (delta < 1) then
      delta = math.pow(delta, mousesensitivitymode)
   end

   -- apply the multiplier
   delta = delta * multiplier

   return delta
end
------------------------
function do_boundaries_check(limit)
   f_mouse_x = nil
   f_mouse_y = nil

   -- do we go over width limits
   if mouse_x <= limit then
      f_mouse_x = limit
   elseif mouse_x >= (scr_width - limit) then
      f_mouse_x = scr_width - limit
   end

   -- do we go over height limits
   if mouse_y <= limit then
      f_mouse_y = limit
   elseif mouse_y >= (scr_height - limit) then
      f_mouse_y = scr_height - limit
   end

   -- reset the cursor to the nearest boundary
   if f_mouse_x ~= nil or f_mouse_y ~= nil then
      if f_mouse_x and f_mouse_y then
         io.forceMousePosition(f_mouse_x, f_mouse_y)
      elseif f_mouse_x then
         io.forceMousePosition(f_mouse_x, mouse_y)
      else
         io.forceMousePosition(mouse_x, f_mouse_y)
      end
   end
end

function draw_cursor()
   if no_bitmap == true then
      -- no bitmap defined, so use normal lines
      gr.drawGradientLine(drawpos_x, drawpos_y, drawpos_x + 20, drawpos_y - 20)
      gr.drawGradientLine(drawpos_x, drawpos_y, drawpos_x - 20, drawpos_y + 20)
      gr.drawGradientLine(drawpos_x, drawpos_y, drawpos_x + 20, drawpos_y + 20)
      gr.drawGradientLine(drawpos_x, drawpos_y, drawpos_x - 20, drawpos_y - 20)
   else
      -- draw the bitmap centered on the spot
      gr.drawMonochromeImage(mouse_bm, drawpos_x - mouse_bm_w, drawpos_y - mouse_bm_h, drawpos_x + mouse_bm_w, drawpos_y + mouse_bm_h)
   end
end

function check_mouse_reset()
   if mouse_reset_counter == nil then
      mouse_center_x = io.getMouseX()
      mouse_center_y = io.getMouseY()
      mouse_reset_counter = 0
   end
end

function force_mouse_control_status()
   if io.MouseControlStatus == true then
      mouse_reset_on_end = true
      io.MouseControlStatus = false
   end
end

function set_mouse_colors()
   if mousecolors[1] == nil then
      gr.setColor(0,64,220,196)
   else
      gr.setColor(mousecolors[1],mousecolors[2],mousecolors[3],mousecolors[4])
   end
end
------------------------
--- end of functions ---
------------------------

]

$Application: FS2_Open
$State: GS_STATE_GAME_PLAY
$On Frame:

[

if boolscriptmouse == true then
   -- check for center button reset...
   check_mouse_reset()

   -- get frametime (used to increment the timer)
   frametime = ba.getFrametime()

   -- make sure missiontime and old missiontime exist
   if missiontime ~= nil then
      missiontime_old = missiontime
   end
   missiontime = mn.getMissionTime()

   -- if the setting changes make sure to reset it to false
   force_mouse_control_status()

   -- check if missiontime is actually running or not
   if missiontime ~= missiontime_old then

      -- after pause ends (ie. missiontime starts running again)
      -- reset the mouse to the center
      if end_of_pause == true then
         io.forceMousePosition(mouse_center_x, mouse_center_y)
         end_of_pause = nil
      end

      -- if center mouse button hasn't been been pressed in long enough and is being pressed now
      -- reset the mouse
      if mouse_reset_counter > 0.33  and io.isMouseButtonDown(MOUSE_MIDDLE_BUTTON) then
    togglescriptmouse = not togglescriptmouse
         if togglescriptmouse == true then
    mouse_center_x = io.getMouseX()
    mouse_center_y = io.getMouseY()
          io.forceMousePosition(mouse_center_x, mouse_center_y)
         end
         mouse_reset_counter = 0
  else
         mouse_reset_counter = mouse_reset_counter + frametime
      end

      -- get control values
      mouse_x = io.getMouseX()
      mouse_y = io.getMouseY()
      controls = ba.getControlInfo()

  if togglescriptmouse == true then
          ba.setControlMode(LUA_FULL_CONTROLS)
  io.MouseControlStatus = false
  if mousecontrolmode == 1 then

-- make sure we aint gonna go off the boundaries...
do_boundaries_check(mouseboundaries)
-- end of boundaries check

-- define the color of the cursor
-- could use color inheritance!!!
set_mouse_colors()

-- get the actual control values
current_h = mouse_control_A(mouse_x, mouse_center_x, "x")
current_p = mouseinvert * mouse_control_A(mouse_y, mouse_center_y, "y")

-- increment, not replace the existing values
controls.Heading = current_h + controls.Heading
controls.Pitch = current_p + controls.Pitch

-- get draw position
center_x = scr_width / 2
center_y = scr_height / 2
drawpos_x = center_x + (current_h * 300)
drawpos_y = center_y + (current_p * 300)

-- draw cursor
draw_cursor()
  end
       else
          ba.setControlMode(NORMAL_CONTROLS)
  io.MouseControlStatus = true
   end
   else
      end_of_pause = true
   end
end

]

$Application: FS2_Open
$On Mission End:

[

boolscriptmouse = false
ba.setControlMode(NORMAL_CONTROLS)
if mouse_reset_on_end == true then
   io.MouseControlStatus = true
end

]

#End

 

Offline z64555

  • 210
  • Self-proclaimed controls expert
    • Steam
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
uh, I think I did something wrong b/c the script didn't work for me...
Secure the Source, Contain the Code, Protect the Project
chief1983

------------
funtapaz: Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Juche.
z64555: s/J/Do
BotenAlfred: <funtapaz> Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Douche.

 

Offline Sushi

  • Art Critic
  • 211
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
uh, I think I did something wrong b/c the script didn't work for me...

Install the normal mouse script first, using the link in my previous post. Make sure it's working the way you want, then replace the script file with the new one. Use middle mouse button to toggle modes.

 

Offline z64555

  • 210
  • Self-proclaimed controls expert
    • Steam
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
Ah, there it goes. Guess it was conflicting with another script somewhere...



Ok, here's my review, if it makes any difference

Works beautifully, no errors so far other than a conflict with one of the FringeSpace scripts (I might look into that later)

default draw cursor is very clean and not obstructive.

configuration options are very good in the sense that you can set it exactly how you want it, bad in the sense that it's not noob friendly as of yet.

A possible upgrade or alternative mode: when the player wants to go back to standard mouse mode, the draw cursor will "freeze" on a particular angle and the ship will continue to turn until it lines up with it.

Until the ship reaches this angle, the player can still move the cursor around a tiny bit, but once the ship x-hair gets within a particular radius of the reticule it will lock in and return to standard mouse mode.
« Last Edit: February 05, 2011, 02:24:16 pm by z64555 »
Secure the Source, Contain the Code, Protect the Project
chief1983

------------
funtapaz: Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Juche.
z64555: s/J/Do
BotenAlfred: <funtapaz> Hunchon University biologists prove mankind is evolving to new, higher form of life, known as Homopithecus Douche.

 

Offline Nuke

  • Ka-Boom!
  • 212
  • Mutants Worship Me
Re: IF and WHEN mouse-as-joystick is implemented, is this a good idea?
someone awhile back thought of a method (or rather stole it from airquake) for using freelook to control a ship, where the ship would always want to face the direction youre looking. i dont think i ever got around to seeing if it would work.
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN