Knocking out TODO items.

This commit is contained in:
Kiri 2023-03-22 22:58:41 -07:00
parent cebcd7ae97
commit 694cdf5f70
5 changed files with 140 additions and 16 deletions

21
TODO.md Normal file
View File

@ -0,0 +1,21 @@
# TODO
n Deployed sprites for every angle (wall)
n - Showing charge level
n Deployed sprites for every angle (ceiling)
n - Showing charge level
x flat sprite? Advantages: One direction, can probably be used on ceiling and wall.
x - Showing charge level
- Pickup sprites for every angle
- Spool of wire, a tool, and some electical tape
- 1st-person sprites
- Wire cutters and electrical tape
x Sparks
x Debris when destroyed
- Switching to mag manager goes to batteries screen
- Show remaining batteries as ammo

BIN
sprites/jmpra0.aseprite Normal file

Binary file not shown.

BIN
sprites/jmpra0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

16
textures.txt Normal file
View File

@ -0,0 +1,16 @@
sprite JMPRA0, 49, 43 {
offset 24, 21
patch JMPRA0,0,0 { }
}
sprite JMPRB0, 49, 43 {
offset 24, 21
patch JMPRA0,0,0 { translation "112:120=160:167" }
}
sprite JMPRC0, 49, 43 {
offset 24, 21
patch JMPRA0,0,0 { translation "112:120=32:47" }
}
sprite JMPRD0, 49, 43 {
offset 24, 21
patch JMPRA0,0,0 { translation "112:120=96:111" }
}

View File

@ -52,6 +52,7 @@ class JumperCablesMapLoader : EventHandler
void RegisterCables(JumperCablesDeployed cableActor)
{
Console.printf("REGISTERING %d\n", deployedCables.Find(cableActor));
if(deployedCables.Find(cableActor) == deployedCables.size()) {
deployedCables.Push(cableActor);
@ -62,7 +63,7 @@ class JumperCablesMapLoader : EventHandler
void UnregisterCables(JumperCablesDeployed cableActor)
{
Console.printf("UNREGISTERING\n");
Console.printf("UNREGISTERING %d\n", deployedCables.Find(cableActor));
int index = deployedCables.find(cableActor);
if(index != deployedCables.size()) {
deployedCables.delete(index);
@ -80,23 +81,58 @@ class JumperCablesDeployed : HDUPK
default
{
radius 2;
height 4;
+SpriteAngle;
Scale 0.4;
}
states
{
spawn:
DERP A -1 nodelay {
invoker.bNoGravity = true;
// Register us with the global event handler so we can
// respond to the linedef getting used.
JumperCablesMapLoader loader = JumperCablesMapLoader.Get();
loader.RegisterCables(self);
}
JMPR CABD -1;
stop;
give:
DERP A 0;
goto spawn;
}
override void PostBeginPlay()
{
Console.printf("IS THIS EVEN GETTING CALLED!?\n");
bNoGravity = true;
// Register us with the global event handler so we can
// respond to the linedef getting used.
JumperCablesMapLoader loader = JumperCablesMapLoader.Get();
loader.RegisterCables(self);
UpdateSprite();
}
void SetWallSprite(Vector2 lineDir)
{
bFlatSprite = false;
bWallSprite = true;
A_SetAngle(atan2(lineDir) + 90);
}
void SetFlatSprite(float angle)
{
bFlatSprite = true;
bWallSprite = false;
A_SetAngle(angle);
}
void UpdateSprite()
{
// Charge levels correspond to battery sprite charge levels.
if(charges > 13) {
frame = 0;
} else if(charges > 6) {
frame = 1;
} else if(charges > 0) {
frame = 2;
} else {
frame = 3;
}
}
void DecrementBattery()
@ -106,6 +142,8 @@ class JumperCablesDeployed : HDUPK
if(charges <= 0) {
DespawnToBattery();
}
UpdateSprite();
}
void DespawnToBattery()
@ -116,7 +154,23 @@ class JumperCablesDeployed : HDUPK
// Spawn a battery, with the same level of charge.
HDMagAmmo.SpawnMag(self, "HDBattery", self.charges);
// TODO: Spawn debris.
// Spawn some smoke.
int smokeCount = random(1, 4);
float smokeVel = 20.0;
for(int k = 0; k < smokeCount; k++) {
A_SpawnItemEx(
"HDSmokeChunk",
0.0, 0.0, 0.0,
frandom(-smokeVel, smokeVel),
frandom(-smokeVel, smokeVel),
frandom(-smokeVel, smokeVel));
}
// Spawn a bunch of sparks.
int sparkAmount = random(3,6);
for(int k = 0; k < sparkAmount; k++) {
SpawnSpark();
}
JumperCablesMapLoader loader = JumperCablesMapLoader.Get();
loader.UnregisterCables(self);
@ -130,8 +184,34 @@ class JumperCablesDeployed : HDUPK
return false;
}
// TODO: Tick function where we add sparks and stuff?
// TODO: Tick function where we set the sprite to indicate the charge level.
void SpawnSpark()
{
A_StartSound("misc/arccrackle", CHAN_AUTO);
A_SpawnParticle(
"white",
SPF_RELATIVE | SPF_FULLBRIGHT,
random(1, 10), // lifetime
frandom(1, 7), // size
0, // angle
// offset...
frandom(-1.0, 1.0),
frandom(-1.0, 1.0),
frandom(-1.0, 1.0),
// vel...
frandom(-1.0, 1.0),
frandom(-1.0, 1.0),
frandom(-1.0, 1.0));
}
override void Tick()
{
if(frandom(0.0, 1.0) < 0.02) {
SpawnSpark();
}
}
// TODO: Tick function (or whatever) where we set the sprite to indicate the charge level.
// TODO: Despawn if the sector gets broken *again*?
}
@ -403,12 +483,19 @@ class JumperCablesUsable : HDWeapon
JumperCablesDeployed deployed = JumperCablesDeployed(
Spawn(
"JumperCablesDeployed",
linetraceData.hitLocation - linetraceData.hitDir * 8));
linetraceData.hitLocation - linetraceData.hitDir * 4));
deployed.lineDefIndex = brokenLine.index();
deployed.bNoGravity = true;
deployed.charges = batteryCharges;
if(linetraceData.hitType == TRACE_HitFloor || linetraceData.hitType == TRACE_HitCeiling) {
deployed.SetFlatSprite(invoker.owner.angle);
} else {
Vector2 lineDir = linetraceData.hitLine.v2.p - linetraceData.hitLine.v1.p;
deployed.SetWallSprite(lineDir);
}
brokenLine.special = originalSpecial;
}
}