void AXHackTrigger::Tick(float DeltaSeconds)
{
	Super::Tick(DeltaSeconds);

	for (int32 i = 0; i < Users.Num(); i++)
	{
		if (!Users[i].bUsing) continue;
		AXCharacter* XCharacter = Cast<AXCharacter>(Users[i].UserController->GetPawn());
		UXCharacterMovement* XCharacterMovement = Cast<UXCharacterMovement>(XCharacter->GetCharacterMovement());
		int32 UserTeam = XCharacter->GetTeamNum();
		if (UserTeam != TeamNum)
		{
			float NeededSkill = XCharacter->HackCost * XCharacter->HackRate * DeltaSeconds;
			if (XCharacterMovement->HasNeededSkill(NeededSkill))
			{
				float Hackage = XCharacter->HackRate * DeltaSeconds;
				TeamProgress[UserTeam] += Hackage;
				Users[i].ProgressValue += Hackage;
				XCharacterMovement->UseSkill(NeededSkill);
			}
		}
	}

	if (Users.Num()>0)
	{
		for (int32 i = 0; i < ARRAY_COUNT(TeamProgress); i++)
		{
			if (TeamProgress[i]>TotalHackSeconds)
			{
				HandleHacked(i);
			}
		}
	}

	DecayHackProcess(DeltaSeconds);
	RemoveIdleUsers();

	if (UserCount(0, true) + UserCount(1, true) == 0)
	{
		CurrentAmbientSound = NULL;
		AmbientSoundUpdated();
	}

	if (!ProgressExists())
	{
		SetActorTickEnabled(false);
	}

}
Beispiel #2
0
void printuser(const user* u)
{
    if (u != NULL)
    {
        heading_fill("Name              | Jobs");
        const user* start=u;
        const int count = UserCount(u);
        for (int i=0;i<count;i++)
        {
            u=start;
            while (u != NULL)
            {
                if (UserNo(start,u)==i)
                {
                    int initial = printf ("%s%-18s| ",UserColourStr(i,1),u->realname) - strlen(UserColourStr(i,1));
                    for (;initial<(twidth);initial++) {printf(" ");} //fill in some white space
                    printf("\n");
                    printSomeJobs(u->jobs,R,u->runcount);
                    printSomeJobs(u->jobs,Q,u->queuecount);
                    printSomeJobs(u->jobs,S,0);
                    printf("%s",resetstr);
                }
                u=u->next;
            }
        }
    }
}
void AXHackTrigger::DecayHackProcess(float DeltaTime)
{
	for (int32 i = 0; i < ARRAY_COUNT(TeamProgress); i++)
	{
		if (TeamProgress[i]>0 && UserCount(i, true) == 0)
		{
			if (UserCount(i) > 0)
			{
				for (int32 u = 0; u < Users.Num(); u++)
				{
					AXPlayerController* XController = Users[u].UserController;
					if (XController->GetTeamNum() == TeamNum)
					{
						Users[u].ProgressValue = FMath::Max<float>(0.f, Users[u].ProgressValue - DecayRate * DeltaTime / UserCount(u));
					}
				}
			}
			TeamProgress[i] = FMath::Max<float>(0.f, TeamProgress[i] - DecayRate * DeltaTime);
		}
	}
}