mirror of https://github.com/stella-emu/stella.git
Sprite toggeling for missiles.
This commit is contained in:
parent
042dc72e66
commit
920787aa9f
|
@ -28,7 +28,9 @@ namespace TIA6502tsCore {
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Missile::Missile(uInt32 collisionMask)
|
Missile::Missile(uInt32 collisionMask)
|
||||||
: myCollisionMask(collisionMask)
|
: myCollisionMaskDisabled(collisionMask),
|
||||||
|
myCollisionMaskEnabled(0x8000),
|
||||||
|
mySupressed(false)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
@ -47,14 +49,14 @@ void Missile::reset()
|
||||||
myIsRendering = false;
|
myIsRendering = false;
|
||||||
myRenderCounter = 0;
|
myRenderCounter = 0;
|
||||||
myColor = 0;
|
myColor = 0;
|
||||||
collision = myCollisionMask;
|
collision = myCollisionMaskDisabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Missile::enam(uInt8 value)
|
void Missile::enam(uInt8 value)
|
||||||
{
|
{
|
||||||
myEnam = (value & 0x02) > 0;
|
myEnam = (value & 0x02) > 0;
|
||||||
myEnabled = myEnam && (myResmp == 0);
|
updateEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -78,12 +80,21 @@ void Missile::resmp(uInt8 value, const Player& player)
|
||||||
|
|
||||||
myResmp = resmp;
|
myResmp = resmp;
|
||||||
|
|
||||||
if (myResmp) {
|
if (!myResmp) myCounter = player.getRespClock();
|
||||||
myEnabled = false;
|
|
||||||
} else {
|
updateEnabled();
|
||||||
myEnabled = myEnam;
|
}
|
||||||
myCounter = player.getRespClock();
|
|
||||||
}
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Missile::toggleCollisions(bool enabled)
|
||||||
|
{
|
||||||
|
myCollisionMaskEnabled = enabled ? 0x8000 : (0x8000 | myCollisionMaskDisabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Missile::toggleEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
mySupressed = !enabled;
|
||||||
|
updateEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -120,7 +131,9 @@ bool Missile::movementTick(uInt32 clock, bool apply)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Missile::render()
|
void Missile::render()
|
||||||
{
|
{
|
||||||
collision = (myIsRendering && myRenderCounter >= 0 && myEnabled) ? 0 : myCollisionMask;
|
collision = (myIsRendering && myRenderCounter >= 0 && myEnabled) ?
|
||||||
|
myCollisionMaskEnabled :
|
||||||
|
myCollisionMaskDisabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -142,6 +155,12 @@ void Missile::setColor(uInt8 color)
|
||||||
myColor = color;
|
myColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Missile::updateEnabled()
|
||||||
|
{
|
||||||
|
myEnabled = !mySupressed && myEnam && !myResmp;
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
// TODO: implement this once the class is finalized
|
||||||
bool Missile::save(Serializer& out) const
|
bool Missile::save(Serializer& out) const
|
||||||
|
|
|
@ -55,8 +55,12 @@ class Missile : public Serializable
|
||||||
|
|
||||||
void setColor(uInt8 color);
|
void setColor(uInt8 color);
|
||||||
|
|
||||||
|
void toggleCollisions(bool enabled);
|
||||||
|
|
||||||
|
void toggleEnabled(bool enabled);
|
||||||
|
|
||||||
uInt8 getPixel(uInt8 colorIn) const {
|
uInt8 getPixel(uInt8 colorIn) const {
|
||||||
return collision ? colorIn : myColor;
|
return (collision & 0x8000) ? myColor : colorIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -72,9 +76,15 @@ class Missile : public Serializable
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
uInt32 myCollisionMask;
|
void updateEnabled();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
uInt32 myCollisionMaskDisabled;
|
||||||
|
uInt32 myCollisionMaskEnabled;
|
||||||
|
|
||||||
bool myEnabled;
|
bool myEnabled;
|
||||||
|
bool mySupressed;
|
||||||
bool myEnam;
|
bool myEnam;
|
||||||
uInt8 myResmp;
|
uInt8 myResmp;
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,8 @@ TIA::TIA(Console& console, Sound& sound, Settings& settings)
|
||||||
mySound(sound),
|
mySound(sound),
|
||||||
mySettings(settings),
|
mySettings(settings),
|
||||||
myDelayQueue(10, 20),
|
myDelayQueue(10, 20),
|
||||||
|
mySpriteEnabledBits(0xFF),
|
||||||
|
myCollisionsEnabledBits(0xFF),
|
||||||
myPlayfield(CollisionMask::playfield),
|
myPlayfield(CollisionMask::playfield),
|
||||||
myMissile0(CollisionMask::missile0),
|
myMissile0(CollisionMask::missile0),
|
||||||
myMissile1(CollisionMask::missile1),
|
myMissile1(CollisionMask::missile1),
|
||||||
|
@ -650,28 +652,74 @@ bool TIA::scanlinePos(uInt16& x, uInt16& y) const
|
||||||
// TODO: stub
|
// TODO: stub
|
||||||
bool TIA::toggleBit(TIABit b, uInt8 mode)
|
bool TIA::toggleBit(TIABit b, uInt8 mode)
|
||||||
{
|
{
|
||||||
return false;
|
uInt8 mask;
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case 0:
|
||||||
|
mask = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
mask = b;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
mask = (~mySpriteEnabledBits & b);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
mySpriteEnabledBits = (mySpriteEnabledBits & ~b) | mask;
|
||||||
|
|
||||||
|
myMissile0.toggleEnabled(mySpriteEnabledBits & TIABit::M0Bit);
|
||||||
|
myMissile1.toggleEnabled(mySpriteEnabledBits & TIABit::M1Bit);
|
||||||
|
|
||||||
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: stub
|
// TODO: stub
|
||||||
bool TIA::toggleBits()
|
bool TIA::toggleBits()
|
||||||
{
|
{
|
||||||
return false;
|
toggleBit(TIABit(0xFF), mySpriteEnabledBits > 0 ? 0 : 1);
|
||||||
|
|
||||||
|
return mySpriteEnabledBits;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: stub
|
// TODO: stub
|
||||||
bool TIA::toggleCollision(TIABit b, uInt8 mode)
|
bool TIA::toggleCollision(TIABit b, uInt8 mode)
|
||||||
{
|
{
|
||||||
return false;
|
uInt8 mask;
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case 0:
|
||||||
|
mask = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
mask = b;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
mask = (~myCollisionsEnabledBits & b);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
myCollisionsEnabledBits = (myCollisionsEnabledBits & ~b) | mask;
|
||||||
|
|
||||||
|
myMissile0.toggleCollisions(myCollisionsEnabledBits & TIABit::M0Bit);
|
||||||
|
myMissile1.toggleCollisions(myCollisionsEnabledBits & TIABit::M1Bit);
|
||||||
|
|
||||||
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: stub
|
// TODO: stub
|
||||||
bool TIA::toggleCollisions()
|
bool TIA::toggleCollisions()
|
||||||
{
|
{
|
||||||
return false;
|
toggleCollision(TIABit(0xFF), myCollisionsEnabledBits > 0 ? 0 : 1);
|
||||||
|
|
||||||
|
return myCollisionsEnabledBits;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -210,6 +210,9 @@ class TIA : public AbstractTIA
|
||||||
uInt8 mySubClock;
|
uInt8 mySubClock;
|
||||||
uInt32 myLastCycle;
|
uInt32 myLastCycle;
|
||||||
|
|
||||||
|
uInt8 mySpriteEnabledBits;
|
||||||
|
uInt8 myCollisionsEnabledBits;
|
||||||
|
|
||||||
uInt8 myColorBk;
|
uInt8 myColorBk;
|
||||||
|
|
||||||
double myTimestamp;
|
double myTimestamp;
|
||||||
|
|
Loading…
Reference in New Issue