initial commit
This commit is contained in:
commit
e8c3f9862a
193 files changed
+29795
No files matched your search
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Unit\Game;
|
||||
|
||||
use App\Game\Entities\Zombie;
|
||||
use App\Game\EntityList;
|
||||
use App\Game\InputState;
|
||||
use App\Game\Player;
|
||||
use App\Game\Room;
|
||||
use App\Game\Vector2;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class ZombieTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function zombieChasesTarget(): void
|
||||
{
|
||||
$room = new Room('test');
|
||||
$list = $room->entities;
|
||||
$player = new Player('p1', 'Tester', new InputState(), $list, $room, ['x' => 100.0, 'y' => 0.0]);
|
||||
$room->addPlayer($player);
|
||||
$zombie = new Zombie(0.0, 0.0, $list, $room, ['emergeTime' => 0.0]);
|
||||
$list->append($zombie);
|
||||
$zombie->target = $player;
|
||||
$zombie->update(0.1);
|
||||
$this->assertGreaterThan(0.0, $zombie->pos->x, 'zombie moves toward player x');
|
||||
$this->assertEqualsWithDelta(0.0, $zombie->pos->y, 1e-6, 'zombie stays on same y');
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function hitReducesHealthAndKnocksBack(): void
|
||||
{
|
||||
$room = new Room('test');
|
||||
$zombie = new Zombie(10.0, 0.0, $room->entities, $room);
|
||||
$impulse = new Vector2(1.0, 0.0);
|
||||
$dead = $zombie->hit($impulse, 1);
|
||||
$this->assertTrue($dead);
|
||||
$this->assertSame(0, $zombie->health);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function hitDoesNotKillAtHighHealth(): void
|
||||
{
|
||||
$room = new Room('test');
|
||||
$zombie = new Zombie(10.0, 0.0, $room->entities, $room, ['health' => 10]);
|
||||
$dead = $zombie->hit(new Vector2(1.0, 0.0), 1);
|
||||
$this->assertFalse($dead);
|
||||
$this->assertSame(9, $zombie->health);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function dieRemovesFromContainer(): void
|
||||
{
|
||||
$room = new Room('test');
|
||||
$zombie = new Zombie(5.0, 5.0, $room->entities, $room);
|
||||
$room->entities->append($zombie);
|
||||
$zombie->die();
|
||||
$this->assertCount(0, $room->entities);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function emergeBlocksMovement(): void
|
||||
{
|
||||
$room = new Room('test');
|
||||
$zombie = new Zombie(0.0, 0.0, $room->entities, $room, ['emergeTime' => 1.0]);
|
||||
$room->entities->append($zombie);
|
||||
$zombie->target = new Player('p1', 'T', new InputState(), $room->entities, $room, ['x' => 100.0, 'y' => 100.0]);
|
||||
$zombie->update(0.1);
|
||||
$this->assertSame(0.0, $zombie->pos->x, 'zombie blocked during emerge');
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user