mirror of https://github.com/stella-emu/stella.git
add missing files
This commit is contained in:
parent
dbb4328ad5
commit
5330dcdba6
|
@ -0,0 +1,72 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// SSSS tt lll lll
|
||||||
|
// SS SS tt ll ll
|
||||||
|
// SS tttttt eeee ll ll aaaa
|
||||||
|
// SSSS tt ee ee ll ll aa
|
||||||
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||||
|
// SS SS tt ee ll ll aa aa
|
||||||
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
|
//
|
||||||
|
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
|
||||||
|
// and the Stella Team
|
||||||
|
//
|
||||||
|
// See the file "License.txt" for information on usage and redistribution of
|
||||||
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#include "Lightgun.hxx"
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Lightgun::Lightgun(Jack jack, const Event& event, const System& system)
|
||||||
|
: Controller(jack, event, system, Controller::Type::Lightgun)
|
||||||
|
{
|
||||||
|
if (myJack == Jack::Left)
|
||||||
|
{
|
||||||
|
myFireEvent = Event::JoystickZeroFire;
|
||||||
|
//myFireEvent = Event::LightgunZeroFire;
|
||||||
|
myPosValue = Event::LightgunZeroPos;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myFireEvent = Event::JoystickOneFire;
|
||||||
|
//myFireEvent = Event::LightgunOneFire;
|
||||||
|
myPosValue = Event::LightgunOnePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Digital pins 1, 2 and 6 are not connected (TOOD: check)
|
||||||
|
//setPin(DigitalPin::One, true);
|
||||||
|
//setPin(DigitalPin::Two, true);
|
||||||
|
//setPin(DigitalPin::Six, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Lightgun::update()
|
||||||
|
{
|
||||||
|
// | | Left port | Right port |
|
||||||
|
// | Fire button | SWCHA bit 4 | SWCHA bit 0 | DP:1
|
||||||
|
// | Detect light | INPT4 bit 7 | INPT5 bit 7 | DP:6
|
||||||
|
|
||||||
|
myCharge = BSPF::clamp(myEvent.get(Event::MouseAxisXValue) * MOUSE_SENSITIVITY, TRIGMIN, TRIGMAX);
|
||||||
|
|
||||||
|
if (myCharge != myLastCharge)
|
||||||
|
{
|
||||||
|
setPin(DigitalPin::Six, Int32(MAX_RESISTANCE * (myCharge / double(TRIGMAX))));
|
||||||
|
myLastCharge = myCharge;
|
||||||
|
}
|
||||||
|
|
||||||
|
setPin(DigitalPin::One, myEvent.get(Event::MouseButtonLeftValue) ? false : true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Lightgun::setMouseSensitivity(int sensitivity)
|
||||||
|
{
|
||||||
|
MOUSE_SENSITIVITY = BSPF::clamp(sensitivity, 1, MAX_MOUSE_SENSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
int Lightgun::MOUSE_SENSITIVITY = -1;
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
//const Controller::DigitalPin Lightgun::ourButtonPin = DigitalPin::One; // TODO
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// SSSS tt lll lll
|
||||||
|
// SS SS tt ll ll
|
||||||
|
// SS tttttt eeee ll ll aaaa
|
||||||
|
// SSSS tt ee ee ll ll aa
|
||||||
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||||
|
// SS SS tt ee ll ll aa aa
|
||||||
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
|
//
|
||||||
|
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
|
||||||
|
// and the Stella Team
|
||||||
|
//
|
||||||
|
// See the file "License.txt" for information on usage and redistribution of
|
||||||
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#ifndef LIGHTGUN_HXX
|
||||||
|
#define LIGHTGUN_HXX
|
||||||
|
|
||||||
|
#include "bspf.hxx"
|
||||||
|
#include "Control.hxx"
|
||||||
|
#include "Event.hxx"
|
||||||
|
|
||||||
|
/**
|
||||||
|
This class handles the lighgun controller
|
||||||
|
|
||||||
|
@author Thomas Jentzsch
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Lightgun : public Controller
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
Create a new pair of paddle controllers plugged into the specified jack
|
||||||
|
|
||||||
|
@param jack The jack the controller is plugged into
|
||||||
|
@param event The event object to use for events
|
||||||
|
@param system The system using this controller
|
||||||
|
*/
|
||||||
|
Lightgun(Jack jack, const Event& event, const System& system);
|
||||||
|
virtual ~Lightgun() = default;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static constexpr int MAX_MOUSE_SENSE = 20;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Update the entire digital and analog pin state according to the
|
||||||
|
events currently set.
|
||||||
|
*/
|
||||||
|
void update() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the name of this controller.
|
||||||
|
*/
|
||||||
|
string name() const override { return "Lightgun"; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
Answers whether the controller is intrinsically an analog controller.
|
||||||
|
*/
|
||||||
|
bool isAnalog() const override { return true; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets the sensitivity for analog emulation of lightgun movement
|
||||||
|
using a mouse.
|
||||||
|
|
||||||
|
@param sensitivity Value from 1 to MAX_MOUSE_SENSE, with larger
|
||||||
|
values causing more movement
|
||||||
|
*/
|
||||||
|
static void setMouseSensitivity(int sensitivity);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Pre-compute the events we care about based on given port
|
||||||
|
// This will eliminate test for left or right port in update()
|
||||||
|
Event::Type myPosValue, myFireEvent;
|
||||||
|
|
||||||
|
int myCharge, myLastCharge;
|
||||||
|
|
||||||
|
static constexpr int TRIGMIN = 1;
|
||||||
|
static constexpr int TRIGMAX = 4096;
|
||||||
|
|
||||||
|
static int MOUSE_SENSITIVITY;
|
||||||
|
|
||||||
|
// Lookup table for associating paddle buttons with controller pins
|
||||||
|
static const Controller::DigitalPin ourButtonPin;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Following constructors and assignment operators not supported
|
||||||
|
Lightgun() = delete;
|
||||||
|
Lightgun(const Lightgun&) = delete;
|
||||||
|
Lightgun(Lightgun&&) = delete;
|
||||||
|
Lightgun& operator=(const Lightgun&) = delete;
|
||||||
|
Lightgun& operator=(Lightgun&&) = delete;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue