Use targets with delay
This commit is contained in:
parent
876f91d38d
commit
7efa2e992a
@ -19,7 +19,7 @@ bool game::DrivableVehicle::QueryUseTarget(PlayerCharacter& character, uint32_t
|
|||||||
res.error_text = nullptr;
|
res.error_text = nullptr;
|
||||||
|
|
||||||
bool seat_occupied = seats_[target_id].occupant != nullptr;
|
bool seat_occupied = seats_[target_id].occupant != nullptr;
|
||||||
res.delay = seat_occupied ? 2.0f : 0.0f;
|
res.delay = seat_occupied ? 2.0f : 0.25f;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,13 +7,14 @@ game::PlayerCharacter::PlayerCharacter(World& world, Player& player, const Chara
|
|||||||
VehicleChanged();
|
VehicleChanged();
|
||||||
|
|
||||||
SetNametag(player.GetName());
|
SetNametag(player.GetName());
|
||||||
|
|
||||||
|
SendUseTargetInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
void game::PlayerCharacter::Update()
|
void game::PlayerCharacter::Update()
|
||||||
{
|
{
|
||||||
Super::Update();
|
|
||||||
|
|
||||||
UpdateUseTarget();
|
UpdateUseTarget();
|
||||||
|
Super::Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void game::PlayerCharacter::VehicleChanged()
|
void game::PlayerCharacter::VehicleChanged()
|
||||||
@ -38,23 +39,7 @@ void game::PlayerCharacter::ProcessInput(PlayerInputType type, bool enabled)
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case IN_USE:
|
case IN_USE:
|
||||||
if (enabled)
|
UseChanged(enabled);
|
||||||
{
|
|
||||||
if (!vehicle_)
|
|
||||||
{
|
|
||||||
UseTargetQueryResult res;
|
|
||||||
auto use_target = world_.GetBestUseTarget(*this, res);
|
|
||||||
if (use_target)
|
|
||||||
{
|
|
||||||
use_target->usable->Use(*this, use_target->id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetVehicle(nullptr, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -123,4 +108,72 @@ void game::PlayerCharacter::UpdateInputs()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void game::PlayerCharacter::UpdateUseTarget() {}
|
void game::PlayerCharacter::UpdateUseTarget()
|
||||||
|
{
|
||||||
|
UseTargetQueryResult res{};
|
||||||
|
auto new_use_target = world_.GetBestUseTarget(*this, res);
|
||||||
|
|
||||||
|
if (new_use_target != use_target_ || res.enabled != use_enabled_ || res.error_text != use_error_ || res.delay != use_delay_)
|
||||||
|
{
|
||||||
|
use_target_ = new_use_target;
|
||||||
|
use_enabled_ = res.enabled;
|
||||||
|
use_delay_ = res.delay;
|
||||||
|
use_error_ = res.error_text;
|
||||||
|
use_progress_ = 0.0f;
|
||||||
|
using_ = false;
|
||||||
|
|
||||||
|
SendUseTargetInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use_target_ && using_)
|
||||||
|
{
|
||||||
|
use_progress_ += 0.04f;
|
||||||
|
if (use_progress_ >= use_delay_)
|
||||||
|
{
|
||||||
|
using_ = false;
|
||||||
|
use_progress_ = 0.0f;
|
||||||
|
use_target_->usable->Use(*this, use_target_->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void game::PlayerCharacter::UseChanged(bool enabled)
|
||||||
|
{
|
||||||
|
if (!use_target_)
|
||||||
|
{
|
||||||
|
if (vehicle_ && enabled)
|
||||||
|
SetVehicle(nullptr, 0);// no use target and in vehicle -> exit
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
use_progress_ = 0.0f;
|
||||||
|
bool change = using_ != enabled;
|
||||||
|
using_ = enabled;
|
||||||
|
|
||||||
|
if (change)
|
||||||
|
SendUseTargetInfo();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void game::PlayerCharacter::SendUseTargetInfo()
|
||||||
|
{
|
||||||
|
if (!player_)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!use_target_)
|
||||||
|
{
|
||||||
|
player_->SendChat("už nejde nic použít");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string msg = "[E] " + use_target_->desc;
|
||||||
|
|
||||||
|
if (using_)
|
||||||
|
{
|
||||||
|
msg += " (zbývá " + std::to_string(use_delay_ - use_progress_) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
player_->SendChat(msg);
|
||||||
|
}
|
||||||
|
|||||||
@ -27,9 +27,19 @@ public:
|
|||||||
private:
|
private:
|
||||||
void UpdateInputs();
|
void UpdateInputs();
|
||||||
void UpdateUseTarget();
|
void UpdateUseTarget();
|
||||||
|
void UseChanged(bool enabled);
|
||||||
|
void SendUseTargetInfo();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Player* player_;
|
Player* player_;
|
||||||
|
|
||||||
|
// use target
|
||||||
|
const UseTarget* use_target_ = nullptr;
|
||||||
|
bool use_enabled_ = false;
|
||||||
|
float use_delay_ = 0.0f;
|
||||||
|
const char* use_error_ = nullptr;
|
||||||
|
bool using_ = false; // not drugs lol
|
||||||
|
float use_progress_ = 0.0f;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user