Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Java (http://www.chiefdelphi.com/forums/forumdisplay.php?f=184)
-   -   Reassigning button.whenPressed during teleop (http://www.chiefdelphi.com/forums/showthread.php?t=115083)

shindigo 17-03-2013 12:23

Reassigning button.whenPressed during teleop
 
Hi,
I think this is a straight-up technical question. How can we reassign the command that is assigned to button.whenPressed during teleop?

We tried something like :
Code:

CommandBase.oi.myPublicButton.whenPressed(new myOtherCommand())
within a command, but this does not seem to work. The button still executes the original command we had assigned to it.

Tia - mp

Ginto8 17-03-2013 20:30

Re: Reassigning button.whenPressed during teleop
 
I don't think it's possible. Button.whenPressed() calls Trigger.whenActive(), which adds a ButtonScheduler to the Scheduler's internal list of buttons. I don't think there's a way to remove it. I believe there is an alternative, though.

Custom buttons are pretty easy to make, they just need a get() method. So, if you want an easy way to disable a certain button binding, have a variable:
Code:

Button doubleBoundButton; // this is the button you want to trigger differently at different times
boolean initialBindingEnabled = true;
Button initialBinding = new Button() {
          public boolean get() {
              return initialBindingEnabled && doubleBoundButton.get();
          }
      },
      secondaryBinding = new Button() {
          public boolean get() {
              return !initialBindingEnabled && doubleBoundButton.get();
          }
      };

You can then bind different things to each:
Code:

initialBinding.whenPressed(new DoSomething());
secondaryBinding.whenPressed(new DoSomethingElse());

Then, to toggle which is enabled:
Code:

initialBindingEnabled = !initialBindingEnabled;

shindigo 17-03-2013 23:08

Re: Reassigning button.whenPressed during teleop
 
Wow -that is some pretty snappy code! I have never seen the override of a get in a new before, but I'm a relative novice at java. Can any public method be overridden for an instance of a class in Java? I will give it a try tomorrow night.

Btw, do you have a link to the source of the wpilib? There are times when I would like to understand more about what is going on behind the scenes.

Thanks -

Mike Parker - programming mentor, team 102

Arhowk 18-03-2013 18:45

Re: Reassigning button.whenPressed during teleop
 
Quote:

Originally Posted by shindigo (Post 1249380)
Wow -that is some pretty snappy code! I have never seen the override of a get in a new before, but I'm a relative novice at java. Can any public method be overridden for an instance of a class in Java? I will give it a try tomorrow night.

Btw, do you have a link to the source of the wpilib? There are times when I would like to understand more about what is going on behind the scenes.

Thanks -

Mike Parker - programming mentor, team 102

https://github.com/1684chimeras/2013...cedButton.java

lil something i made, allows you to assign different commands to different modes than set the mode of the button (e.g. set A to lock for drive, B for climb in climbing than set the mode of all the buttons to 2 when u want to climb)

Button source code is in C:\Users\yourname\sunspotfrcsdk\lib\wpilibj.src.zi p

to your override question.... Yeah you can override any public method. You can also use super.(method) to refer to the method that you were overriding

Ginto8 18-03-2013 19:07

Re: Reassigning button.whenPressed during teleop
 
Quote:

Originally Posted by shindigo (Post 1249380)
Can any public method be overridden for an instance of a class in Java?

In Java, you can override any non-final method, and anonymous classes (new ClassName() { /* stuff */ }) let you make individual variables with specific versions of methods, instead of having to make a new class every time you want to make a tiny change.

Quote:

Originally Posted by shindigo (Post 1249380)
Btw, do you have a link to the source of the wpilib?

In the sunspotfrcsdk folder (which should be in your user directory), in its lib directory, there are wpilibj.src.zip and wpilibj.project.zip. The src one just has the source files, and the project one is a full netbeans project. The more complicated aspects of command-based programming are in edu.wpi.first.wpilibj.command and edu.wpi.first.wpilibj.buttons.

shindigo 22-03-2013 07:16

Re: Reassigning button.whenPressed during teleop
 
Great! Thanks for the pointer!

JefferMC 22-03-2013 12:59

Re: Reassigning button.whenPressed during teleop
 
Quote:

Originally Posted by shindigo (Post 1251184)
Great! Thanks for the pointer!

There are no pointers in Java. :D

Arhowk 22-03-2013 21:09

Re: Reassigning button.whenPressed during teleop
 
Quote:

Originally Posted by JefferMC (Post 1251264)
There are no pointers in Java. :D

Yes there is. Not the type ur thinking of :D

Ginto8 22-03-2013 22:54

Re: Reassigning button.whenPressed during teleop
 
Quote:

Originally Posted by JefferMC (Post 1251264)
There are no pointers in Java. :D

Everything except primitives is a pointer in Java. You might prefer to call them references, but references are themselves just less flexible (and less dangerous) pointers. ;)


All times are GMT -5. The time now is 22:35.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi