OpenClonk
C4Player Class Reference

#include <C4Player.h>

Inheritance diagram for C4Player:
[legend]
Collaboration diagram for C4Player:
[legend]

Public Types

enum  ControlType {
  PCID_None, PCID_Message, PCID_Special, PCID_Command,
  PCID_DirectCom
}
 
enum  StatusTypes { PS_None =0, PS_Normal =1, PS_TeamSelection = 2, PS_TeamSelectionPending = 3 }
 

Public Member Functions

 C4Player ()
 
 ~C4Player ()
 
const char * GetName () const
 
C4PlayerType GetType () const
 
void Eliminate ()
 
void ClearPointers (C4Object *tptr, bool fDeath)
 
void Execute ()
 
void ExecuteControl ()
 
void SetViewMode (int32_t iMode, C4Object *pTarget=nullptr, bool immediate_position=false)
 
void ResetCursorView (bool immediate_position=false)
 
void Evaluate ()
 
void Surrender ()
 
void ScrollView (float iX, float iY, float ViewWdt, float ViewHgt)
 
void SetCursor (C4Object *pObj, bool fSelectArrow)
 
void RemoveCrewObjects ()
 
int32_t FindNewOwner () const
 
void NotifyOwnedObjects ()
 
void DefaultRuntimeData ()
 
void DrawHostility (C4Facet &cgo, int32_t iIndex)
 
void AdjustCursorCommand ()
 
bool DoScore (int32_t iChange)
 
bool Init (int32_t iNumber, int32_t iAtClient, const char *szAtClientName, const char *szFilename, bool fScenarioInit, class C4PlayerInfo *pInfo, C4ValueNumbers *)
 
bool ScenarioAndTeamInit (int32_t idTeam)
 
bool ScenarioInit ()
 
bool FinalInit (bool fInitialScore)
 
bool Save ()
 
bool Save (C4Group &hGroup, bool fSavegame, bool fStoreTiny)
 
bool MakeCrewMember (C4Object *pObj, bool fForceInfo=true, bool fDoCalls=true)
 
bool Load (const char *szFilename, bool fSavegame)
 
bool Message (const char *szMsg)
 
bool ObjectInCrew (C4Object *tobj)
 
bool DoWealth (int32_t change)
 
bool SetWealth (int32_t val)
 
bool SetKnowledge (C4ID id, bool fRemove)
 
bool SetHostility (int32_t iOpponent, int32_t iHostility, bool fSilent=false)
 
bool IsHostileTowards (const C4Player *opponent) const
 
void CompileFunc (StdCompiler *pComp, C4ValueNumbers *)
 
void DenumeratePointers ()
 
bool LoadRuntimeData (C4Group &hGroup, C4ValueNumbers *)
 
bool ActivateMenuMain ()
 
bool ActivateMenuTeamSelection (bool fFromMain)
 
void DoTeamSelection (int32_t idTeam)
 
C4ObjectGetHiExpActiveCrew ()
 
C4ObjectGetHiRankActiveCrew ()
 
void SetFoW (bool fEnable)
 
int32_t ActiveCrewCount ()
 
int32_t GetSelectedCrewCount ()
 
bool LocalSync ()
 
bool SetObjectCrewStatus (C4Object *pCrew, bool fNewStatus)
 
bool IsChosingTeam () const
 
bool IsInvisible () const
 
bool IsViewLocked () const
 
void SetViewLocked (bool to_val)
 
void SetSoundModifier (C4PropList *new_modifier)
 
void SetTeamHostility ()
 
void CloseMenu ()
 
void EvaluateLeague (bool fDisconnected, bool fWon)
 
void CreateGraphs ()
 
void ClearGraphs ()
 
void CountControl (ControlType eType, int32_t iID, int32_t iCntAdd=1)
 
class C4PlayerInfoGetInfo ()
 
void ToggleMouseControl ()
 
void CallMessageBoard (C4Object *pForObj, const StdStrBuf &sQueryString, bool fUppercase)
 
bool RemoveMessageBoardQuery (C4Object *pForObj)
 
bool MarkMessageBoardQueryAnswered (C4Object *pForObj)
 
bool HasMessageBoardQuery ()
 
void OnTeamSelectionFailed ()
 
void SetPlayerColor (uint32_t dwNewClr)
 
void SetZoomByViewRange (int32_t range_wdt, int32_t range_hgt, bool direct, bool no_increase, bool no_decrease)
 
void SetMinZoomByViewRange (int32_t range_wdt, int32_t range_hgt, bool no_increase, bool no_decrease)
 
void SetMaxZoomByViewRange (int32_t range_wdt, int32_t range_hgt, bool no_increase, bool no_decrease)
 
void SetZoom (C4Real zoom, bool direct, bool no_increase, bool no_decrease)
 
void SetMinZoom (C4Real zoom, bool no_increase, bool no_decrease)
 
void SetMaxZoom (C4Real zoom, bool no_increase, bool no_decrease)
 
void ZoomToViewports (bool direct, bool no_increase=false, bool no_decrease=false)
 
void ZoomToViewport (C4Viewport *vp, bool direct, bool no_increase=false, bool no_decrease=false)
 
void ZoomLimitsToViewports ()
 
void ZoomLimitsToViewport (C4Viewport *vp)
 
bool GainScenarioAchievement (const char *achievement_id, int32_t value, const char *scen_name_override=nullptr)
 
void Default (C4RankSystem *pRanks=nullptr)
 
void Promote (int32_t iRank, C4RankSystem &rRanks)
 
bool Load (C4Group &hGroup)
 
bool Save (C4Group &hGroup)
 
bool CheckPromotion (C4RankSystem &rRanks)
 
void CompileFunc (StdCompiler *pComp)
 

Static Public Member Functions

static bool Strip (const char *szFilename, bool fAggressive)
 
static DWORD GetPrefColorValue (int32_t iPrefColor)
 

Public Attributes

char Filename [_MAX_PATH+1]
 
StdStrBuf Name
 
int32_t Status
 
int32_t Eliminated
 
int32_t Surrendered
 
bool Evaluated
 
int32_t Number
 
int32_t ID
 
int32_t Team
 
uint32_t ColorDw
 
class C4PlayerControlAssignmentSetControlSet
 
StdCopyStrBuf ControlSetName
 
int32_t MouseControl
 
int32_t Position
 
int32_t PlrStartIndex
 
int32_t RetireDelay
 
int32_t GameJoinTime
 
int32_t AtClient
 
char AtClientName [C4MaxTitle+1]
 
bool LocalControl
 
bool LeagueEvaluated
 
bool NoEliminationCheck
 
C4MainMenu Menu
 
int32_t ViewMode
 
C4Real ViewX
 
C4Real ViewY
 
bool ViewLock
 
C4ObjectViewTarget
 
bool ShowStartup
 
int32_t FlashCom
 
bool fFogOfWar
 
int32_t ZoomLimitMinWdt
 
int32_t ZoomLimitMinHgt
 
int32_t ZoomLimitMaxWdt
 
int32_t ZoomLimitMaxHgt
 
int32_t ZoomWdt
 
int32_t ZoomHgt
 
C4Real ZoomLimitMinVal
 
C4Real ZoomLimitMaxVal
 
C4Real ZoomVal
 
int32_t Wealth
 
int32_t CurrentScore
 
int32_t InitialScore
 
int32_t ObjectsOwned
 
HostilitySet Hostility
 
C4IDList BaseMaterial
 
C4IDList BaseProduction
 
int32_t ProductionDelay
 
int32_t ProductionUnit
 
C4ObjectInfoList CrewInfoList
 
C4ObjectList Crew
 
C4IDList Knowledge
 
C4PlayerControl Control
 
C4ObjectPtr Cursor
 
C4ObjectPtr ViewCursor
 
int32_t CursorFlash
 
std::shared_ptr< class C4GamePadOpenerpGamepad
 
int32_t MessageStatus
 
char MessageBuf [256+1]
 
class C4MessageBoardQuerypMsgBoardQuery
 
C4FacetSurface BigIcon
 
C4Value SoundModifier
 
C4PlayerNext
 
class C4TableGraphpstatControls
 
class C4TableGraphpstatActions
 
int32_t ControlCount
 
int32_t ActionCount
 
ControlType LastControlType
 
int32_t LastControlID
 
char PrefName [C4MaxName+1]
 
char Comment [C4MaxComment+1]
 
int32_t Rank
 
char RankName [C4MaxName+1]
 
int32_t TotalScore
 
int32_t Rounds
 
int32_t RoundsWon
 
int32_t RoundsLost
 
int32_t TotalPlayingTime
 
C4RoundResult LastRound
 
C4ValueMapData ExtraData
 
char LeagueName [C4MaxName+1]
 
StdCopyStrBuf PrefControl
 
int32_t PrefMouse
 
int32_t PrefColor
 
uint32_t PrefColorDw
 
uint32_t PrefColor2Dw
 
int32_t PrefClonkSkin
 
int32_t OldPrefControl
 
int32_t OldPrefControlStyle
 
int32_t OldPrefAutoContextMenu
 
C4ScenarioParameters Achievements
 

Protected Member Functions

void ClearControl ()
 
void InitControl ()
 
void UpdateView ()
 
void CheckElimination ()
 
void ExecBaseProduction ()
 
void PlaceReadyBase (int32_t &tx, int32_t &ty, C4Object **pFirstBase)
 
void PlaceReadyVehic (int32_t tx1, int32_t tx2, int32_t ty, C4Object *FirstBase)
 
void PlaceReadyMaterial (int32_t tx1, int32_t tx2, int32_t ty, C4Object *FirstBase)
 
void PlaceReadyCrew (int32_t tx1, int32_t tx2, int32_t ty, C4Object *FirstBase)
 
void CheckCrewExPromotion ()
 

Friends

class C4PlayerList
 

Detailed Description

Definition at line 48 of file C4Player.h.

Member Enumeration Documentation

◆ ControlType

Enumerator
PCID_None 
PCID_Message 
PCID_Special 
PCID_Command 
PCID_DirectCom 

Definition at line 58 of file C4Player.h.

59  {
60  PCID_None, // no control
61  PCID_Message, // chat
62  PCID_Special, // goalruleinfo, etc.
63  PCID_Command, // mouse control
64  PCID_DirectCom // menu or keyboard control
65  };

◆ StatusTypes

Enumerator
PS_None 
PS_Normal 
PS_TeamSelection 
PS_TeamSelectionPending 

Definition at line 67 of file C4Player.h.

68  {
69  PS_None=0, // player disabled
70  PS_Normal=1, // normal playing
71  PS_TeamSelection = 2, // team selection
72  PS_TeamSelectionPending = 3 // waiting for team selection packet to come through
73  };

Constructor & Destructor Documentation

◆ C4Player()

C4Player::C4Player ( )

Definition at line 47 of file C4Player.cpp.

References ActionCount, BigIcon, C4P_Number_None, ControlCount, Crew, CrewInfoList, C4ObjectInfoList::Default(), C4MainMenu::Default(), C4FacetSurface::Default(), C4ObjectList::Default(), DefaultRuntimeData(), Evaluated, fFogOfWar, Filename, Fix0, GameJoinTime, ID, LastControlID, LastControlType, LeagueEvaluated, LocalControl, Menu, Next, NoEliminationCheck, Number, PCID_None, pMsgBoardQuery, pstatActions, pstatControls, C4Value::Set0(), SoundModifier, Team, ViewLock, ZoomHgt, ZoomLimitMaxHgt, ZoomLimitMaxVal, ZoomLimitMaxWdt, ZoomLimitMinHgt, ZoomLimitMinVal, ZoomLimitMinWdt, ZoomVal, and ZoomWdt.

48 {
49  Filename[0] = 0;
51  ID = 0;
52  Team = 0;
54  Menu.Default();
55  Crew.Default();
57  LocalControl = false;
58  BigIcon.Default();
59  Next = nullptr;
60  fFogOfWar = true;
61  LeagueEvaluated = false;
62  GameJoinTime = 0; // overwritten in Init
63  pstatControls = pstatActions = nullptr;
66  LastControlID = 0;
67  pMsgBoardQuery = nullptr;
68  NoEliminationCheck = false;
69  Evaluated = false;
72  ViewLock = true;
74 }
int32_t LastControlID
Definition: C4Player.h:148
int32_t Team
Definition: C4Player.h:88
C4MainMenu Menu
Definition: C4Player.h:103
bool ViewLock
Definition: C4Player.h:107
int32_t ControlCount
Definition: C4Player.h:146
int32_t Number
Definition: C4Player.h:86
C4Real ZoomVal
Definition: C4Player.h:113
class C4TableGraph * pstatActions
Definition: C4Player.h:145
char Filename[_MAX_PATH+1]
Definition: C4Player.h:80
ControlType LastControlType
Definition: C4Player.h:148
int32_t ZoomLimitMinHgt
Definition: C4Player.h:112
void Set0()
Definition: C4Value.h:336
int32_t ZoomLimitMaxWdt
Definition: C4Player.h:112
void Default()
Definition: C4FacetEx.h:43
int32_t ZoomWdt
Definition: C4Player.h:112
const int32_t C4P_Number_None
Definition: C4Player.h:35
C4FacetSurface BigIcon
Definition: C4Player.h:138
class C4TableGraph * pstatControls
Definition: C4Player.h:145
int32_t GameJoinTime
Definition: C4Player.h:96
bool Evaluated
Definition: C4Player.h:85
C4ObjectList Crew
Definition: C4Player.h:125
C4Value SoundModifier
Definition: C4Player.h:140
int32_t ZoomLimitMinWdt
Definition: C4Player.h:112
bool NoEliminationCheck
Definition: C4Player.h:101
int32_t ID
Definition: C4Player.h:87
int32_t ZoomLimitMaxHgt
Definition: C4Player.h:112
C4Real ZoomLimitMaxVal
Definition: C4Player.h:113
bool LeagueEvaluated
Definition: C4Player.h:100
C4Player * Next
Definition: C4Player.h:142
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
virtual void Default()
int32_t ZoomHgt
Definition: C4Player.h:112
bool fFogOfWar
Definition: C4Player.h:111
void DefaultRuntimeData()
Definition: C4Player.cpp:1206
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
int32_t ActionCount
Definition: C4Player.h:147
const C4Real Fix0
Definition: C4Real.h:312
bool LocalControl
Definition: C4Player.h:99
C4Real ZoomLimitMinVal
Definition: C4Player.h:113
void Default() override
Definition: C4MainMenu.cpp:43
Here is the call graph for this function:

◆ ~C4Player()

C4Player::~C4Player ( )

Definition at line 76 of file C4Player.cpp.

References C4Menu::Clear(), ClearControl(), ClearGraphs(), Menu, pMsgBoardQuery, C4MessageBoardQuery::pNext, and SetSoundModifier().

77 {
78  ClearGraphs();
79  Menu.Clear();
80  SetSoundModifier(nullptr);
81  while (pMsgBoardQuery)
82  {
84  delete pMsgBoardQuery;
85  pMsgBoardQuery = pNext;
86  }
87  ClearControl();
88 }
C4MainMenu Menu
Definition: C4Player.h:103
void ClearControl()
Definition: C4Player.cpp:1373
void ClearGraphs()
Definition: C4Player.cpp:1614
void Clear()
Definition: C4Menu.cpp:271
C4MessageBoardQuery * pNext
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
void SetSoundModifier(C4PropList *new_modifier)
Definition: C4Player.cpp:1922
Here is the call graph for this function:

Member Function Documentation

◆ ActivateMenuMain()

bool C4Player::ActivateMenuMain ( )

Definition at line 1760 of file C4Player.cpp.

References C4MainMenu::ActivateMain(), CompileFunc(), C4PlayerList::Get(), StdCompiler::isDeserializer(), C4GameOverDlg::IsShown(), Menu, Number, Players, C4PlayerList::Valid(), and StdCompiler::Value().

Referenced by C4PlayerControl::ExecuteControlPacket(), and GetName().

1761 {
1762  // Not during game over dialog
1763  if (C4GameOverDlg::IsShown()) return false;
1764  // Open menu
1765  return !!Menu.ActivateMain(Number);
1766 }
C4MainMenu Menu
Definition: C4Player.h:103
int32_t Number
Definition: C4Player.h:86
static bool IsShown()
Definition: C4GameOverDlg.h:92
bool ActivateMain(int32_t iPlayer)
Definition: C4MainMenu.cpp:566
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ActivateMenuTeamSelection()

bool C4Player::ActivateMenuTeamSelection ( bool  fFromMain)

Definition at line 1238 of file C4Player.cpp.

References C4MN_Align_Bottom, C4MN_Align_Left, C4MN_Extra_None, C4MN_TeamSelection, C4MN_TeamSwitch, C4GUI::Icon::GetIconFacet(), C4GUI::Ico_Team, C4MainMenu::InitRefSym(), LoadResStr(), Menu, Number, PS_TeamSelection, C4Menu::Refill(), C4Menu::SetAlignment(), C4Menu::SetCloseCommand(), and Status.

Referenced by Execute(), GetName(), and C4MainMenu::MenuCommand().

1239 {
1240  // Menu symbol/init
1241  bool fSwitch = !(Status==PS_TeamSelection);
1244  Menu.Refill();
1245  // Go back to options menu on close
1246  if (fFromMain) Menu.SetCloseCommand("ActivateMenu:Main");
1247  return true;
1248 }
bool Refill()
Definition: C4Menu.cpp:915
void SetCloseCommand(const char *strCommand)
Definition: C4Menu.cpp:1144
C4MainMenu Menu
Definition: C4Player.h:103
void SetAlignment(int32_t iAlignment)
Definition: C4Menu.cpp:857
int32_t Number
Definition: C4Player.h:86
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
int32_t Status
Definition: C4Player.h:82
bool InitRefSym(const C4Facet &fctSymbol, const char *szEmpty, int32_t iPlayer, int32_t iExtra=C4MN_Extra_None, int32_t iExtraData=0, int32_t iId=0, int32_t iStyle=C4MN_Style_Normal)
Definition: C4MainMenu.cpp:56
static C4Facet GetIconFacet(Icons icoIconIndex)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ActiveCrewCount()

int32_t C4Player::ActiveCrewCount ( )

Definition at line 1496 of file C4Player.cpp.

References Crew.

Referenced by GetName().

1497 {
1498  // get number of objects in crew that is not disabled
1499  int32_t iNum=0;
1500  for (C4Object *cObj : Crew)
1501  if (cObj)
1502  if (!cObj->CrewDisabled)
1503  ++iNum;
1504  // return it
1505  return iNum;
1506 }
C4ObjectList Crew
Definition: C4Player.h:125
Here is the caller graph for this function:

◆ AdjustCursorCommand()

void C4Player::AdjustCursorCommand ( )

Definition at line 1059 of file C4Player.cpp.

References C4Object::CrewDisabled, Cursor, GetHiRankActiveCrew(), ResetCursorView(), SetCursor(), and UpdateView().

Referenced by ClearPointers(), FinalInit(), and GetName().

1060 {
1061  // Reset view
1062  ResetCursorView();
1063  // Default cursor to hirank clonk
1064  if (!Cursor || Cursor->CrewDisabled)
1065  {
1066  C4Object *pHiRank = GetHiRankActiveCrew();
1067  if (!pHiRank)
1068  return;
1069  SetCursor(pHiRank,true);
1070  UpdateView();
1071  }
1072 }
C4ObjectPtr Cursor
Definition: C4Player.h:130
void UpdateView()
Definition: C4Player.cpp:1180
void SetCursor(C4Object *pObj, bool fSelectArrow)
Definition: C4Player.cpp:1348
bool CrewDisabled
Definition: C4Object.h:164
C4Object * GetHiRankActiveCrew()
Definition: C4Player.cpp:886
void ResetCursorView(bool immediate_position=false)
Definition: C4Player.cpp:780
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CallMessageBoard()

void C4Player::CallMessageBoard ( C4Object pForObj,
const StdStrBuf sQueryString,
bool  fUppercase 
)

Definition at line 1663 of file C4Player.cpp.

References pMsgBoardQuery, and RemoveMessageBoardQuery().

Referenced by IsViewLocked().

1664 {
1665  // remove any previous query for the same object
1666  RemoveMessageBoardQuery(pForObj);
1667  // sort new query to end of list
1668  C4MessageBoardQuery **ppTarget = &pMsgBoardQuery;
1669  while (*ppTarget) ppTarget = &((*ppTarget)->pNext);
1670  *ppTarget = new C4MessageBoardQuery(pForObj, sQueryString, fIsUppercase);
1671 }
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
bool RemoveMessageBoardQuery(C4Object *pForObj)
Definition: C4Player.cpp:1673
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CheckCrewExPromotion()

void C4Player::CheckCrewExPromotion ( )
protected

Definition at line 905 of file C4Player.cpp.

References GetHiExpActiveCrew(), GetHiRankActiveCrew(), C4Object::Info, C4Object::Promote(), and C4ObjectInfoCore::Rank.

Referenced by IsViewLocked().

906 {
907  C4Object *hirank;
908  if ((hirank=GetHiRankActiveCrew()))
909  if (hirank->Info)
910  if (hirank->Info->Rank<1) // No Fähnrich -> except. promo.
911  if ((hirank=GetHiExpActiveCrew()))
912  hirank->Promote(1,true,false);
913 }
bool Promote(int32_t torank, bool exception, bool fForceRankName)
Definition: C4Object.cpp:1715
C4ObjectInfo * Info
Definition: C4Object.h:145
C4Object * GetHiRankActiveCrew()
Definition: C4Player.cpp:886
C4Object * GetHiExpActiveCrew()
Definition: C4Player.cpp:867
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CheckElimination()

void C4Player::CheckElimination ( )
protected

Definition at line 1168 of file C4Player.cpp.

References Crew, Eliminate(), Eliminated, C4ObjectList::GetFirstObject(), and NoEliminationCheck.

Referenced by Execute(), and IsViewLocked().

1169 {
1170  // Standard elimination: no crew
1171  if (!Crew.GetFirstObject())
1172  // Already eliminated safety
1173  if (!Eliminated)
1174  // No automatic elimination desired?
1175  if (!NoEliminationCheck)
1176  // Do elimination!
1177  Eliminate();
1178 }
C4Object * GetFirstObject() const
Definition: C4ObjectList.h:141
void Eliminate()
Definition: C4Player.cpp:1472
C4ObjectList Crew
Definition: C4Player.h:125
int32_t Eliminated
Definition: C4Player.h:83
bool NoEliminationCheck
Definition: C4Player.h:101
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CheckPromotion()

bool C4PlayerInfoCore::CheckPromotion ( C4RankSystem rRanks)
inherited

Definition at line 124 of file C4InfoCore.cpp.

References C4RankSystem::Experience(), C4PlayerInfoCore::Promote(), C4PlayerInfoCore::Rank, and C4PlayerInfoCore::TotalScore.

125 {
126  if (TotalScore>=rRanks.Experience(Rank+1))
127  {
128  Promote(Rank+1,rRanks);
129  return true;
130  }
131  return false;
132 }
int32_t TotalScore
Definition: C4InfoCore.h:89
void Promote(int32_t iRank, C4RankSystem &rRanks)
Definition: C4InfoCore.cpp:118
int Experience(int iRank)
Here is the call graph for this function:

◆ ClearControl()

void C4Player::ClearControl ( )
protected

Definition at line 1373 of file C4Player.cpp.

References ActionCount, C4PlayerControl::Clear(), StdStrBuf::Clear(), Control, ControlCount, ControlSet, ControlSetName, LastControlID, LastControlType, LocalControl, MouseControl, NO_OWNER, PCID_None, and pGamepad.

Referenced by Init(), IsViewLocked(), and ~C4Player().

1374 {
1375  // Mark any control set as unused
1376  Control.Clear();
1377  // Reset control
1378  LocalControl = false;
1380  ControlSet=nullptr;
1381  MouseControl = false;
1382  if (pGamepad)
1383  {
1384  pGamepad->SetPlayer(NO_OWNER);
1385  pGamepad.reset();
1386  }
1387  // no controls issued yet
1388  ControlCount = ActionCount = 0;
1390  LastControlID = 0;
1391 }
int32_t MouseControl
Definition: C4Player.h:92
int32_t LastControlID
Definition: C4Player.h:148
int32_t ControlCount
Definition: C4Player.h:146
void Clear()
Definition: StdBuf.h:466
ControlType LastControlType
Definition: C4Player.h:148
C4PlayerControl Control
Definition: C4Player.h:129
std::shared_ptr< class C4GamePadOpener > pGamepad
Definition: C4Player.h:132
class C4PlayerControlAssignmentSet * ControlSet
Definition: C4Player.h:90
const int NO_OWNER
Definition: C4Constants.h:137
StdCopyStrBuf ControlSetName
Definition: C4Player.h:91
int32_t ActionCount
Definition: C4Player.h:147
bool LocalControl
Definition: C4Player.h:99
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ClearGraphs()

void C4Player::ClearGraphs ( )

Definition at line 1614 of file C4Player.cpp.

References Game, C4Game::pNetworkStatistics, pstatActions, and pstatControls.

Referenced by CreateGraphs(), IsViewLocked(), and ~C4Player().

1615 {
1616  // del all assigned graphs
1617  if (pstatControls)
1618  {
1619  if (Game.pNetworkStatistics) Game.pNetworkStatistics->statControls.RemoveGraph(pstatControls);
1620  delete pstatControls;
1621  pstatControls = nullptr;
1622  }
1623  if (pstatActions)
1624  {
1625  if (Game.pNetworkStatistics) Game.pNetworkStatistics->statActions.RemoveGraph(pstatActions);
1626  delete pstatActions;
1627  pstatActions = nullptr;
1628  }
1629 }
C4Game Game
Definition: C4Globals.cpp:52
class C4TableGraph * pstatActions
Definition: C4Player.h:145
class C4TableGraph * pstatControls
Definition: C4Player.h:145
std::unique_ptr< C4Network2Stats > pNetworkStatistics
Definition: C4Game.h:95
Here is the caller graph for this function:

◆ ClearPointers()

void C4Player::ClearPointers ( C4Object tptr,
bool  fDeath 
)

Definition at line 98 of file C4Player.cpp.

References AdjustCursorCommand(), C4Menu::ClearPointers(), Crew, Cursor, Menu, C4ObjectList::Remove(), RemoveMessageBoardQuery(), ViewCursor, and ViewTarget.

Referenced by C4Object::AssignDeath(), C4Object::AssignInfo(), and GetName().

99 {
100  // Crew
101  while (Crew.Remove(pObj)) {}
102  // View-Cursor
103  if (ViewCursor==pObj) ViewCursor = nullptr;
104  // View
105  if (ViewTarget==pObj) ViewTarget=nullptr;
106  // Cursor
107  if (Cursor == pObj)
108  {
109  // object is to be deleted; do NOT do script calls (like in Cursor->UnSelect(true))
110  Cursor = nullptr; AdjustCursorCommand(); // also selects and eventually does a script call!
111  }
112  // Menu
113  Menu.ClearPointers(pObj);
114  // messageboard-queries
116 }
C4ObjectPtr Cursor
Definition: C4Player.h:130
C4MainMenu Menu
Definition: C4Player.h:103
void ClearPointers(C4Object *pObj)
Definition: C4Menu.cpp:1158
C4ObjectList Crew
Definition: C4Player.h:125
void AdjustCursorCommand()
Definition: C4Player.cpp:1059
C4Object * ViewTarget
Definition: C4Player.h:108
C4ObjectPtr ViewCursor
Definition: C4Player.h:130
virtual bool Remove(C4Object *pObj)
bool RemoveMessageBoardQuery(C4Object *pForObj)
Definition: C4Player.cpp:1673
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CloseMenu()

void C4Player::CloseMenu ( )

Definition at line 1466 of file C4Player.cpp.

References C4GUI::Dialog::Close(), and Menu.

Referenced by IsViewLocked().

1467 {
1468  // cancel all player menus
1469  Menu.Close(false);
1470 }
C4MainMenu Menu
Definition: C4Player.h:103
void Close(bool fOK)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CompileFunc() [1/2]

void C4PlayerInfoCore::CompileFunc ( StdCompiler pComp)
inherited

Definition at line 134 of file C4InfoCore.cpp.

References C4PlayerInfoCore::Achievements, C4PlayerInfoCore::Comment, C4ValueMapData::Denumerate(), C4ValueNumbers::Denumerate(), C4PlayerInfoCore::ExtraData, StdCompiler::isDeserializer(), C4PlayerInfoCore::LastRound, C4PlayerInfoCore::LeagueName, LoadResStr(), mkNamingAdapt(), mkParAdapt(), StdCompiler::Name(), StdCompiler::NameEnd(), C4PlayerInfoCore::OldPrefAutoContextMenu, C4PlayerInfoCore::OldPrefControl, C4PlayerInfoCore::OldPrefControlStyle, C4PlayerInfoCore::PrefClonkSkin, C4PlayerInfoCore::PrefColor, C4PlayerInfoCore::PrefColor2Dw, C4PlayerInfoCore::PrefColorDw, C4PlayerInfoCore::PrefControl, C4PlayerInfoCore::PrefMouse, C4PlayerInfoCore::PrefName, C4PlayerInfoCore::Rank, C4PlayerInfoCore::RankName, C4PlayerInfoCore::Rounds, C4PlayerInfoCore::RoundsLost, C4PlayerInfoCore::RoundsWon, toC4CStr, C4PlayerInfoCore::TotalPlayingTime, C4PlayerInfoCore::TotalScore, and StdCompiler::Value().

135 {
136  C4ValueNumbers numbers;
137  pComp->Name("Player");
138  pComp->Value(mkNamingAdapt(toC4CStr(PrefName),"Name", "Neuling"));
139  pComp->Value(mkNamingAdapt(toC4CStr(Comment), "Comment", ""));
140  pComp->Value(mkNamingAdapt(Rank, "Rank", 0));
141  pComp->Value(mkNamingAdapt(toC4CStr(RankName),"RankName", LoadResStr("IDS_MSG_RANK"))); // TODO: check if this would be desirable
142  pComp->Value(mkNamingAdapt(TotalScore, "Score", 0));
143  pComp->Value(mkNamingAdapt(Rounds, "Rounds", 0));
144  pComp->Value(mkNamingAdapt(RoundsWon, "RoundsWon", 0));
145  pComp->Value(mkNamingAdapt(RoundsLost, "RoundsLost", 0));
146  pComp->Value(mkNamingAdapt(TotalPlayingTime, "TotalPlayingTime", 0));
147  pComp->Value(mkNamingAdapt(mkParAdapt(ExtraData, &numbers), "ExtraData", C4ValueMapData()));
148  pComp->Value(mkNamingAdapt(numbers, "ExtraDataValues"));
149  if (pComp->isDeserializer())
150  {
151  numbers.Denumerate();
152  ExtraData.Denumerate(&numbers);
153  }
154  pComp->Value(mkNamingAdapt(toC4CStr(LeagueName),"LeagueName", ""));
155  pComp->NameEnd();
156 
157  pComp->Name("Preferences");
158  pComp->Value(mkNamingAdapt(PrefColor, "Color", 0));
159  pComp->Value(mkNamingAdapt(PrefColorDw, "ColorDw", 0xffu));
160  pComp->Value(mkNamingAdapt(PrefColor2Dw, "AlternateColorDw", 0u));
161  pComp->Value(mkNamingAdapt(PrefMouse, "Mouse", 1));
162  pComp->Value(mkNamingAdapt(OldPrefControl, "Control", 1));
163  pComp->Value(mkNamingAdapt(OldPrefControlStyle, "AutoStopControl", 0));
164  pComp->Value(mkNamingAdapt(OldPrefAutoContextMenu, "AutoContextMenu", -1)); // compiling default is -1 (if this is detected, AutoContextMenus will be defaulted by control style)
165  pComp->Value(mkNamingAdapt(PrefControl, "ControlSet", StdStrBuf()));
166  pComp->Value(mkNamingAdapt(PrefClonkSkin, "ClonkSkin", 0));
167  pComp->NameEnd();
168 
169  pComp->Value(mkNamingAdapt(LastRound, "LastRound"));
170 
171  pComp->Value(mkNamingAdapt(Achievements, "Achievements"));
172 }
int32_t OldPrefControlStyle
Definition: C4InfoCore.h:104
int32_t OldPrefAutoContextMenu
Definition: C4InfoCore.h:105
void Denumerate()
Definition: C4Value.cpp:281
int32_t TotalPlayingTime
Definition: C4InfoCore.h:91
int32_t RoundsWon
Definition: C4InfoCore.h:90
int32_t OldPrefControl
Definition: C4InfoCore.h:103
void Denumerate(C4ValueNumbers *)
Definition: C4ValueMap.cpp:254
char PrefName[C4MaxName+1]
Definition: C4InfoCore.h:85
int32_t PrefClonkSkin
Definition: C4InfoCore.h:100
char LeagueName[C4MaxName+1]
Definition: C4InfoCore.h:94
StdCopyStrBuf PrefControl
Definition: C4InfoCore.h:96
virtual bool Name(const char *szName)
Definition: StdCompiler.h:77
#define toC4CStr(szString)
Definition: StdAdaptors.h:24
int32_t PrefMouse
Definition: C4InfoCore.h:97
C4ValueMapData ExtraData
Definition: C4InfoCore.h:93
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
int32_t RoundsLost
Definition: C4InfoCore.h:90
StdNamingAdapt< T > mkNamingAdapt(T &&rValue, const char *szName)
Definition: StdAdaptors.h:92
char Comment[C4MaxComment+1]
Definition: C4InfoCore.h:86
char RankName[C4MaxName+1]
Definition: C4InfoCore.h:88
int32_t PrefColor
Definition: C4InfoCore.h:98
void Value(const T &rStruct)
Definition: StdCompiler.h:161
uint32_t PrefColorDw
Definition: C4InfoCore.h:99
uint32_t PrefColor2Dw
Definition: C4InfoCore.h:99
virtual bool isDeserializer()
Definition: StdCompiler.h:53
int32_t TotalScore
Definition: C4InfoCore.h:89
StdParameterAdapt< T, P > mkParAdapt(T &&rObj, P &&rPar)
Definition: StdAdaptors.h:476
int32_t Rounds
Definition: C4InfoCore.h:90
C4ScenarioParameters Achievements
Definition: C4InfoCore.h:108
virtual void NameEnd(bool fBreak=false)
Definition: StdCompiler.h:78
C4RoundResult LastRound
Definition: C4InfoCore.h:92
Here is the call graph for this function:

◆ CompileFunc() [2/2]

void C4Player::CompileFunc ( StdCompiler pComp,
C4ValueNumbers numbers 
)

Definition at line 1074 of file C4Player.cpp.

References AtClient, AtClientName, BaseMaterial, BaseProduction, C4ClientIDUnknown, C4P_Number_None, C4PVM_Cursor, ColorDw, Control, Crew, CrewInfoList, CurrentScore, Cursor, CursorFlash, C4Value::Denumerate(), Eliminated, Evaluated, fFogOfWar, Fix0, Hostility, ID, InitialScore, C4ObjectInfoList::iNumCreated, StdCompiler::isDeserializer(), Knowledge, MessageBuf, MessageStatus, mkNamingAdapt(), mkNamingPtrAdapt(), mkParAdapt(), C4ObjectPtr::Null, Number, ObjectsOwned, pMsgBoardQuery, Position, ProductionDelay, ProductionUnit, ShowStartup, SoundModifier, Status, Surrendered, toC4CStr, StdCompiler::Value(), ViewCursor, ViewLock, ViewMode, ViewX, ViewY, Wealth, ZoomHgt, ZoomLimitMaxHgt, ZoomLimitMaxVal, ZoomLimitMaxWdt, ZoomLimitMinHgt, ZoomLimitMinVal, ZoomLimitMinWdt, ZoomVal, and ZoomWdt.

Referenced by GetName().

1075 {
1076  assert(ID);
1077 
1078  pComp->Value(mkNamingAdapt(Status, "Status", 0));
1079  pComp->Value(mkNamingAdapt(AtClient, "AtClient", C4ClientIDUnknown));
1080  pComp->Value(mkNamingAdapt(toC4CStr(AtClientName),"AtClientName", "Local"));
1081  pComp->Value(mkNamingAdapt(Number, "Index", C4P_Number_None));
1082  pComp->Value(mkNamingAdapt(ID, "ID", 0));
1083  pComp->Value(mkNamingAdapt(Eliminated, "Eliminated", 0));
1084  pComp->Value(mkNamingAdapt(Surrendered, "Surrendered", 0));
1085  pComp->Value(mkNamingAdapt(Evaluated, "Evaluated", false));
1086  pComp->Value(mkNamingAdapt(ColorDw, "ColorDw", 0u));
1087  pComp->Value(mkNamingAdapt(Position, "Position", 0));
1088  pComp->Value(mkNamingAdapt(ViewMode, "ViewMode", C4PVM_Cursor));
1089  pComp->Value(mkNamingAdapt(ViewX, "ViewX", 0));
1090  pComp->Value(mkNamingAdapt(ViewY, "ViewY", 0));
1091  pComp->Value(mkNamingAdapt(ViewLock, "ViewLock", true));
1092  pComp->Value(mkNamingAdapt(ZoomLimitMinWdt, "ZoomLimitMinWdt", 0));
1093  pComp->Value(mkNamingAdapt(ZoomLimitMinHgt, "ZoomLimitMinHgt", 0));
1094  pComp->Value(mkNamingAdapt(ZoomLimitMaxWdt, "ZoomLimitMaxWdt", 0));
1095  pComp->Value(mkNamingAdapt(ZoomLimitMaxHgt, "ZoomLimitMaxHgt", 0));
1096  pComp->Value(mkNamingAdapt(ZoomWdt, "ZoomWdt", 0));
1097  pComp->Value(mkNamingAdapt(ZoomHgt, "ZoomHgt", 0));
1098  pComp->Value(mkNamingAdapt(ZoomLimitMinVal, "ZoomLimitMinVal", Fix0));
1099  pComp->Value(mkNamingAdapt(ZoomLimitMaxVal, "ZoomLimitMaxVal", Fix0));
1100  pComp->Value(mkNamingAdapt(ZoomVal, "ZoomVal", Fix0));
1101  pComp->Value(mkNamingAdapt(fFogOfWar, "FogOfWar", false));
1102  pComp->Value(mkNamingAdapt(ShowStartup, "ShowStartup", false));
1103  pComp->Value(mkNamingAdapt(Wealth, "Wealth", 0));
1104  pComp->Value(mkNamingAdapt(CurrentScore, "Score", 0));
1105  pComp->Value(mkNamingAdapt(InitialScore, "InitialScore", 0));
1106  pComp->Value(mkNamingAdapt(ObjectsOwned, "ObjectsOwned", 0));
1107  pComp->Value(mkNamingAdapt(Hostility, "Hostile" ));
1108  pComp->Value(mkNamingAdapt(ProductionDelay, "ProductionDelay", 0));
1109  pComp->Value(mkNamingAdapt(ProductionUnit, "ProductionUnit", 0));
1110  pComp->Value(mkNamingAdapt(CursorFlash, "CursorFlash", 0));
1111  pComp->Value(mkNamingAdapt(Cursor, "Cursor", C4ObjectPtr::Null));
1112  pComp->Value(mkNamingAdapt(ViewCursor, "ViewCursor", C4ObjectPtr::Null));
1113  pComp->Value(mkNamingAdapt(MessageStatus, "MessageStatus", 0));
1114  pComp->Value(mkNamingAdapt(toC4CStr(MessageBuf),"MessageBuf", ""));
1115  pComp->Value(mkNamingAdapt(BaseMaterial, "BaseMaterial" ));
1116  pComp->Value(mkNamingAdapt(BaseProduction, "BaseProduction" ));
1117  pComp->Value(mkNamingAdapt(Knowledge, "Knowledge" ));
1118  pComp->Value(mkNamingAdapt(mkParAdapt(Crew, numbers), "Crew" ));
1119  pComp->Value(mkNamingAdapt(CrewInfoList.iNumCreated, "CrewCreated", 0));
1120  pComp->Value(mkNamingPtrAdapt( pMsgBoardQuery, "MsgBoardQueries" ));
1121  pComp->Value(mkNamingAdapt(mkParAdapt(SoundModifier, numbers), "SoundModifier", C4Value()));
1122 
1123  if (pComp->isDeserializer())
1124  {
1125  SoundModifier.Denumerate(numbers);
1126  }
1127 
1128  // Keys held down
1129  pComp->Value(Control);
1130 }
char AtClientName[C4MaxTitle+1]
Definition: C4Player.h:98
C4ObjectPtr Cursor
Definition: C4Player.h:130
int32_t ProductionDelay
Definition: C4Player.h:122
bool ViewLock
Definition: C4Player.h:107
int32_t ViewMode
Definition: C4Player.h:105
int32_t Number
Definition: C4Player.h:86
C4Real ZoomVal
Definition: C4Player.h:113
int32_t ObjectsOwned
Definition: C4Player.h:117
bool ShowStartup
Definition: C4Player.h:109
int32_t ZoomLimitMinHgt
Definition: C4Player.h:112
C4PlayerControl Control
Definition: C4Player.h:129
#define toC4CStr(szString)
Definition: StdAdaptors.h:24
int32_t Position
Definition: C4Player.h:93
int32_t ProductionUnit
Definition: C4Player.h:122
int32_t ZoomLimitMaxWdt
Definition: C4Player.h:112
char MessageBuf[256+1]
Definition: C4Player.h:135
StdNamingAdapt< T > mkNamingAdapt(T &&rValue, const char *szName)
Definition: StdAdaptors.h:92
uint32_t ColorDw
Definition: C4Player.h:89
int32_t CursorFlash
Definition: C4Player.h:131
static const C4ObjectPtr Null
Definition: C4ObjectPtr.h:28
int32_t ZoomWdt
Definition: C4Player.h:112
const int32_t C4P_Number_None
Definition: C4Player.h:35
void Denumerate(C4ValueNumbers *)
Definition: C4Value.cpp:251
int32_t Status
Definition: C4Player.h:82
C4IDList Knowledge
Definition: C4Player.h:127
int32_t MessageStatus
Definition: C4Player.h:134
void Value(const T &rStruct)
Definition: StdCompiler.h:161
bool Evaluated
Definition: C4Player.h:85
const int32_t C4ClientIDUnknown
Definition: C4Client.h:24
int32_t Surrendered
Definition: C4Player.h:84
C4ObjectList Crew
Definition: C4Player.h:125
int32_t Eliminated
Definition: C4Player.h:83
C4Value SoundModifier
Definition: C4Player.h:140
int32_t CurrentScore
Definition: C4Player.h:116
int32_t Wealth
Definition: C4Player.h:115
int32_t ZoomLimitMinWdt
Definition: C4Player.h:112
virtual bool isDeserializer()
Definition: StdCompiler.h:53
int32_t AtClient
Definition: C4Player.h:97
int32_t ID
Definition: C4Player.h:87
int32_t ZoomLimitMaxHgt
Definition: C4Player.h:112
C4Real ViewY
Definition: C4Player.h:106
C4Real ZoomLimitMaxVal
Definition: C4Player.h:113
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
int32_t InitialScore
Definition: C4Player.h:116
StdParameterAdapt< T, P > mkParAdapt(T &&rObj, P &&rPar)
Definition: StdAdaptors.h:476
const int32_t C4PVM_Cursor
Definition: C4Player.h:31
int32_t ZoomHgt
Definition: C4Player.h:112
StdPtrAdapt< T > mkNamingPtrAdapt(T *&rpObj, const char *szNaming)
Definition: StdAdaptors.h:622
bool fFogOfWar
Definition: C4Player.h:111
C4ObjectPtr ViewCursor
Definition: C4Player.h:130
C4IDList BaseMaterial
Definition: C4Player.h:120
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
C4IDList BaseProduction
Definition: C4Player.h:121
const C4Real Fix0
Definition: C4Real.h:312
C4Real ViewX
Definition: C4Player.h:106
HostilitySet Hostility
Definition: C4Player.h:118
C4Real ZoomLimitMinVal
Definition: C4Player.h:113
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CountControl()

void C4Player::CountControl ( ControlType  eType,
int32_t  iID,
int32_t  iCntAdd = 1 
)

Definition at line 1631 of file C4Player.cpp.

References ActionCount, C4MessageBoardQuery::CallbackObj, C4ObjectInfo::ControlCount, ControlCount, Cursor, C4Object::DoExperience(), C4MessageBoardQuery::fAnswered, C4MessageBoardQuery::fIsUppercase, C4Object::Info, C4MessageInput::IsTypeIn(), LastControlID, LastControlType, MessageInput, Number, pMsgBoardQuery, C4MessageBoardQuery::pNext, C4MessageBoardQuery::sInputQuery, and C4MessageInput::StartTypeIn().

Referenced by C4ControlPlayerSelect::C4ControlPlayerSelect(), C4PlayerControl::ExecuteControlPacket(), and IsViewLocked().

1632 {
1633  // count it
1634  ControlCount += iCntAdd;
1635  // catch doubles
1636  if (eType == LastControlType && iID == LastControlID) return;
1637  // no double: count as action
1638  LastControlType = eType;
1639  LastControlID = iID;
1640  ActionCount += iCntAdd;
1641  // and give experience
1642  if (Cursor && Cursor->Info)
1643  {
1644  if (Cursor->Info)
1645  {
1646  Cursor->Info->ControlCount++; if ((Cursor->Info->ControlCount%5) == 0) Cursor->DoExperience(+1);
1647  }
1648  }
1649 }
int32_t LastControlID
Definition: C4Player.h:148
C4ObjectPtr Cursor
Definition: C4Player.h:130
int32_t ControlCount
Definition: C4Player.h:146
int32_t ControlCount
Definition: C4ObjectInfo.h:38
ControlType LastControlType
Definition: C4Player.h:148
C4ObjectInfo * Info
Definition: C4Object.h:145
void DoExperience(int32_t change)
Definition: C4Object.cpp:1213
int32_t ActionCount
Definition: C4Player.h:147
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateGraphs()

void C4Player::CreateGraphs ( )

Definition at line 1587 of file C4Player.cpp.

References ClearGraphs(), ColorDw, C4TableGraph::DefaultBlockLength, Game, C4PlayerInfo::GetColor(), GetName(), C4PlayerInfoList::GetPlayerInfoByID(), ID, C4GUI::MakeColorReadableOnBlack(), C4Game::PlayerInfos, C4Game::pNetworkStatistics, pstatActions, pstatControls, C4Graph::SetColorDw(), and C4Graph::SetTitle().

Referenced by Init(), and IsViewLocked().

1588 {
1589  // del prev
1590  ClearGraphs();
1591  // create graphs
1593  {
1594  DWORD dwGraphClr = ColorDw;
1595  C4PlayerInfo *pInfo;
1596  if (ID && (pInfo = Game.PlayerInfos.GetPlayerInfoByID(ID)))
1597  {
1598  // set color by player info class
1599  dwGraphClr = pInfo->GetColor();
1600  }
1601  C4GUI::MakeColorReadableOnBlack(dwGraphClr); dwGraphClr &= 0xffffff;
1603  pstatControls->SetColorDw(dwGraphClr);
1606  pstatActions->SetColorDw(dwGraphClr);
1608  // register into
1609  Game.pNetworkStatistics->statControls.AddGraph(pstatControls);
1610  Game.pNetworkStatistics->statActions.AddGraph(pstatActions);
1611  }
1612 }
C4Game Game
Definition: C4Globals.cpp:52
class C4TableGraph * pstatActions
Definition: C4Player.h:145
DWORD MakeColorReadableOnBlack(DWORD &rdwClr)
Definition: C4Gui.cpp:98
uint32_t GetColor() const
Definition: C4PlayerInfo.h:153
uint32_t ColorDw
Definition: C4Player.h:89
const char * GetName() const
Definition: C4Player.h:151
class C4TableGraph * pstatControls
Definition: C4Player.h:145
int32_t ID
Definition: C4Player.h:87
C4PlayerInfoList & PlayerInfos
Definition: C4Game.h:71
void ClearGraphs()
Definition: C4Player.cpp:1614
void SetTitle(const char *szNewTitle)
std::unique_ptr< C4Network2Stats > pNetworkStatistics
Definition: C4Game.h:95
uint32_t DWORD
C4PlayerInfo * GetPlayerInfoByID(int32_t id) const
void SetColorDw(DWORD dwClr)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Default()

void C4PlayerInfoCore::Default ( C4RankSystem pRanks = nullptr)
inherited

Definition at line 40 of file C4InfoCore.cpp.

References StdStrBuf::Clear(), C4PlayerInfoCore::Comment, C4RoundResult::Default(), C4PlayerInfoCore::ExtraData, StdStrBuf::getData(), C4RankSystem::GetRankName(), C4PlayerInfoCore::LastRound, C4PlayerInfoCore::LeagueName, C4PlayerInfoCore::OldPrefAutoContextMenu, C4PlayerInfoCore::OldPrefControl, C4PlayerInfoCore::OldPrefControlStyle, C4PlayerInfoCore::PrefClonkSkin, C4PlayerInfoCore::PrefColor, C4PlayerInfoCore::PrefColor2Dw, C4PlayerInfoCore::PrefColorDw, C4PlayerInfoCore::PrefControl, C4PlayerInfoCore::PrefMouse, C4PlayerInfoCore::PrefName, C4PlayerInfoCore::Rank, C4PlayerInfoCore::RankName, C4ValueMapData::Reset(), C4PlayerInfoCore::Rounds, C4PlayerInfoCore::RoundsLost, C4PlayerInfoCore::RoundsWon, SCopy(), C4PlayerInfoCore::TotalPlayingTime, and C4PlayerInfoCore::TotalScore.

Referenced by C4ObjectInfoCore::C4ObjectInfoCore(), C4PlayerInfoCore::C4PlayerInfoCore(), and C4StartupPlrPropertiesDlg::C4StartupPlrPropertiesDlg().

41 {
42  *Comment='\0';
43  *RankName='\0';
44  TotalScore=0;
47  *LeagueName='\0';
51  Rank=0;
52  SCopy("Neuling",PrefName);
53  if (pRanks) SCopy(pRanks->GetRankName(Rank,false).getData(),RankName);
54  else SCopy("Rang",RankName);
55  PrefClonkSkin=0;
56  PrefColor=0;
57  PrefColorDw=0xff;
58  PrefColor2Dw=0;
60  PrefMouse=1;
64  ExtraData.Reset();
65 }
int32_t OldPrefControlStyle
Definition: C4InfoCore.h:104
int32_t OldPrefAutoContextMenu
Definition: C4InfoCore.h:105
int32_t TotalPlayingTime
Definition: C4InfoCore.h:91
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:152
int32_t RoundsWon
Definition: C4InfoCore.h:90
int32_t OldPrefControl
Definition: C4InfoCore.h:103
void Clear()
Definition: StdBuf.h:466
char PrefName[C4MaxName+1]
Definition: C4InfoCore.h:85
int32_t PrefClonkSkin
Definition: C4InfoCore.h:100
char LeagueName[C4MaxName+1]
Definition: C4InfoCore.h:94
StdCopyStrBuf PrefControl
Definition: C4InfoCore.h:96
int32_t PrefMouse
Definition: C4InfoCore.h:97
C4ValueMapData ExtraData
Definition: C4InfoCore.h:93
StdStrBuf GetRankName(int iRank, bool fReturnLastIfOver)
int32_t RoundsLost
Definition: C4InfoCore.h:90
char Comment[C4MaxComment+1]
Definition: C4InfoCore.h:86
char RankName[C4MaxName+1]
Definition: C4InfoCore.h:88
int32_t PrefColor
Definition: C4InfoCore.h:98
uint32_t PrefColorDw
Definition: C4InfoCore.h:99
const char * getData() const
Definition: StdBuf.h:442
uint32_t PrefColor2Dw
Definition: C4InfoCore.h:99
int32_t TotalScore
Definition: C4InfoCore.h:89
int32_t Rounds
Definition: C4InfoCore.h:90
C4RoundResult LastRound
Definition: C4InfoCore.h:92
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DefaultRuntimeData()

void C4Player::DefaultRuntimeData ( )

Definition at line 1206 of file C4Player.cpp.

References AtClient, AtClientName, BaseMaterial, BaseProduction, C4ClientIDUnknown, C4PVM_Cursor, StdStrBuf::Clear(), ControlSet, ControlSetName, CurrentScore, Cursor, CursorFlash, C4IDList::Default(), Eliminated, FlashCom, Hostility, InitialScore, Knowledge, MessageBuf, MessageStatus, MouseControl, ObjectsOwned, PlrStartIndex, Position, ProductionDelay, ProductionUnit, RetireDelay, SCopy(), ShowStartup, Status, Surrendered, ViewCursor, ViewMode, ViewTarget, ViewX, ViewY, and Wealth.

Referenced by C4Player(), and GetName().

1207 {
1208  Status=0;
1209  Eliminated=0;
1210  Surrendered=0;
1212  SCopy("Local",AtClientName);
1213  ControlSet = nullptr;
1215  MouseControl=false;
1216  Position=-1;
1217  PlrStartIndex=0;
1218  RetireDelay=0;
1220  ViewX=ViewY=0;
1221  ViewTarget=nullptr;
1222  ShowStartup=true;
1223  Wealth=0;
1225  ObjectsOwned=0;
1227  Cursor=ViewCursor=nullptr;
1228  CursorFlash=30;
1229  MessageStatus=0;
1230  MessageBuf[0]=0;
1231  Hostility.clear();
1234  Knowledge.Default();
1235  FlashCom=0;
1236 }
int32_t MouseControl
Definition: C4Player.h:92
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:152
char AtClientName[C4MaxTitle+1]
Definition: C4Player.h:98
C4ObjectPtr Cursor
Definition: C4Player.h:130
int32_t ProductionDelay
Definition: C4Player.h:122
int32_t ViewMode
Definition: C4Player.h:105
int32_t FlashCom
Definition: C4Player.h:110
void Clear()
Definition: StdBuf.h:466
int32_t ObjectsOwned
Definition: C4Player.h:117
bool ShowStartup
Definition: C4Player.h:109
int32_t PlrStartIndex
Definition: C4Player.h:94
int32_t Position
Definition: C4Player.h:93
int32_t ProductionUnit
Definition: C4Player.h:122
char MessageBuf[256+1]
Definition: C4Player.h:135
int32_t CursorFlash
Definition: C4Player.h:131
class C4PlayerControlAssignmentSet * ControlSet
Definition: C4Player.h:90
void Default()
Definition: stub-handle.cpp:63
int32_t Status
Definition: C4Player.h:82
C4IDList Knowledge
Definition: C4Player.h:127
int32_t MessageStatus
Definition: C4Player.h:134
const int32_t C4ClientIDUnknown
Definition: C4Client.h:24
int32_t Surrendered
Definition: C4Player.h:84
int32_t Eliminated
Definition: C4Player.h:83
int32_t CurrentScore
Definition: C4Player.h:116
int32_t Wealth
Definition: C4Player.h:115
int32_t AtClient
Definition: C4Player.h:97
C4Real ViewY
Definition: C4Player.h:106
StdCopyStrBuf ControlSetName
Definition: C4Player.h:91
int32_t InitialScore
Definition: C4Player.h:116
int32_t RetireDelay
Definition: C4Player.h:95
C4Object * ViewTarget
Definition: C4Player.h:108
const int32_t C4PVM_Cursor
Definition: C4Player.h:31
C4ObjectPtr ViewCursor
Definition: C4Player.h:130
C4IDList BaseMaterial
Definition: C4Player.h:120
C4IDList BaseProduction
Definition: C4Player.h:121
C4Real ViewX
Definition: C4Player.h:106
HostilitySet Hostility
Definition: C4Player.h:118
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DenumeratePointers()

void C4Player::DenumeratePointers ( )

Definition at line 1258 of file C4Player.cpp.

References Crew, Cursor, C4ObjectPtr::DenumeratePointers(), C4ObjectList::DenumeratePointers(), pMsgBoardQuery, C4MessageBoardQuery::pNext, and ViewCursor.

Referenced by GetName(), and LoadRuntimeData().

1259 {
1260  // Crew
1262  // Cursor
1264  // ViewCursor
1266  // messageboard-queries
1267  for (C4MessageBoardQuery *pCheck = pMsgBoardQuery; pCheck; pCheck = pCheck->pNext)
1268  pCheck->CallbackObj.DenumeratePointers();
1269 }
C4ObjectPtr Cursor
Definition: C4Player.h:130
bool DenumeratePointers()
void DenumeratePointers()
Definition: C4ObjectPtr.cpp:47
C4ObjectList Crew
Definition: C4Player.h:125
C4MessageBoardQuery * pNext
C4ObjectPtr ViewCursor
Definition: C4Player.h:130
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoScore()

bool C4Player::DoScore ( int32_t  iChange)

Definition at line 1342 of file C4Player.cpp.

References CurrentScore.

Referenced by GetName().

1343 {
1344  CurrentScore = Clamp<int32_t>( CurrentScore+iChange, -100000, 100000 );
1345  return true;
1346 }
int32_t CurrentScore
Definition: C4Player.h:116
Here is the caller graph for this function:

◆ DoTeamSelection()

void C4Player::DoTeamSelection ( int32_t  idTeam)

Definition at line 1250 of file C4Player.cpp.

References CDT_Queue, CID_PlrAction, Control, C4ControlPlayerAction::InitScenarioPlayer(), PS_TeamSelectionPending, and Status.

Referenced by Execute(), GetName(), and C4MainMenu::MenuCommand().

1251 {
1252  // stop team selection. This might close the menu forever if the control gets lost
1253  // let's hope it doesn't!
1256 }
C4PlayerControl Control
Definition: C4Player.h:129
int32_t Status
Definition: C4Player.h:82
static C4ControlPlayerAction * InitScenarioPlayer(const C4Player *source, int32_t team)
Definition: C4Control.cpp:605
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoWealth()

bool C4Player::DoWealth ( int32_t  change)

Definition at line 729 of file C4Player.cpp.

References LocalControl, SetWealth(), StartSoundEffect(), and Wealth.

Referenced by GetName().

730 {
731  if (LocalControl)
732  {
733  if (iChange>0) StartSoundEffect("UI::Cash");
734  if (iChange<0) StartSoundEffect("UI::UnCash");
735  }
736  SetWealth(Wealth+iChange);
737 
738  return true;
739 }
C4SoundInstance * StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier)
int32_t Wealth
Definition: C4Player.h:115
bool SetWealth(int32_t val)
Definition: C4Player.cpp:741
bool LocalControl
Definition: C4Player.h:99
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawHostility()

void C4Player::DrawHostility ( C4Facet cgo,
int32_t  iIndex 
)

Definition at line 995 of file C4Player.cpp.

References ColorDw, C4Facet::Draw(), C4Facet::DrawClr(), C4GraphicsResource::fctCrewClr, C4GraphicsResource::fctMenu, C4PlayerList::GetByIndex(), C4Facet::GetPhase(), GraphicsResource, Hostility, and Players.

Referenced by C4MainMenu::DoRefillInternal(), and GetName().

996 {
997  C4Player *pPlr;
998  if ((pPlr=::Players.GetByIndex(iIndex)))
999  {
1000  ::GraphicsResource.fctCrewClr.DrawClr(cgo, true, pPlr->ColorDw);
1001  // Other player and hostile
1002  if (pPlr != this)
1003  if (Hostility.find(pPlr) != Hostility.end())
1005  }
1006 }
void DrawClr(C4Facet &cgo, bool fAspect=true, DWORD dwClr=0)
Definition: C4Facet.cpp:213
C4Player * GetByIndex(int iIndex) const
C4GraphicsResource GraphicsResource
uint32_t ColorDw
Definition: C4Player.h:89
C4PlayerList Players
void Draw(C4Facet &cgo, bool fAspect=true, int32_t iPhaseX=0, int32_t iPhaseY=0, bool fTransparent=true)
Definition: C4Facet.cpp:154
C4Facet GetPhase(int iPhaseX=0, int iPhaseY=0)
Definition: C4Facet.cpp:59
HostilitySet Hostility
Definition: C4Player.h:118
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Eliminate()

void C4Player::Eliminate ( )

Definition at line 1472 of file C4Player.cpp.

References Application, AtClient, C4ClientIDHost, C4RetireDelay, CDT_Sync, CID_ClientUpdate, Control, CUT_Activate, Eliminated, FormatString(), C4PlayerList::GetAtClient(), GetName(), C4Application::isEditor, LoadResStr(), Log(), Players, RetireDelay, and StartSoundEffect().

Referenced by CheckElimination(), GetName(), and C4ControlPlayerAction::InitPlayerControl().

1473 {
1474  if (Eliminated) return;
1475  Eliminated=true;
1477  StartSoundEffect("UI::Eliminated");
1478  Log(FormatString(LoadResStr("IDS_PRC_PLRELIMINATED"),GetName()).getData());
1479 
1480  // Early client deactivation check
1481  if (::Control.isCtrlHost() && AtClient > C4ClientIDHost && !::Application.isEditor)
1482  {
1483  // Check: Any player left at this client?
1484  C4Player *pPlr = nullptr;
1485  for (int i = 0; (pPlr = ::Players.GetAtClient(AtClient, i)); i++)
1486  if (!pPlr->Eliminated)
1487  break;
1488  // If not, deactivate the client
1489  if (!pPlr)
1490  ::Control.DoInput(CID_ClientUpdate,
1492  CDT_Sync);
1493  }
1494 }
const int C4RetireDelay
Definition: C4Constants.h:29
C4PlayerControl Control
Definition: C4Player.h:129
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
C4SoundInstance * StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier)
const char * GetName() const
Definition: C4Player.h:151
C4PlayerList Players
int32_t Eliminated
Definition: C4Player.h:83
int32_t AtClient
Definition: C4Player.h:97
C4Player * GetAtClient(int iClient, int iIndex=0) const
bool Log(const char *szMessage)
Definition: C4Log.cpp:202
int32_t RetireDelay
Definition: C4Player.h:95
C4Application Application
Definition: C4Globals.cpp:44
const int32_t C4ClientIDHost
Definition: C4Client.h:25
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Evaluate()

void C4Player::Evaluate ( )

Definition at line 787 of file C4Player.cpp.

References C4PlayerList::AverageScoreGain(), C4RoundResult::Bonus, C4Game::C4S, CrewInfoList, CurrentScore, C4RoundResult::Date, C4RoundResult::Duration, Eliminated, C4ObjectInfoList::Evaluate(), Evaluated, EvaluateLeague(), C4RoundResults::EvaluatePlayer(), C4RoundResult::FinalScore, Game, C4Scenario::Game, GameJoinTime, C4Game::GameOver, InitialScore, C4GameParameters::isLeague(), C4SGame::IsMelee(), C4PlayerInfoCore::LastRound, C4RoundResult::Level, C4Game::Parameters, Players, C4Game::RoundResults, C4PlayerInfoCore::Rounds, C4PlayerInfoCore::RoundsLost, C4PlayerInfoCore::RoundsWon, C4Game::ScenarioTitle, C4RoundResult::Score, C4Game::Time, C4RoundResult::Title, C4PlayerInfoCore::TotalPlayingTime, C4RoundResult::TotalScore, C4PlayerInfoCore::TotalScore, and C4RoundResult::Won.

Referenced by GetName(), and C4PlayerList::Retire().

788 {
789  // do not evaluate twice
790  if (Evaluated) return;
791 
792  const int32_t SuccessBonus=100;
793 
794  // Set last round
796  time(reinterpret_cast<time_t *>(&LastRound.Date));
799  // Melee: personal value gain score ...check ::Objects(C4D_Goal)
800  if (Game.C4S.Game.IsMelee()) LastRound.Score = std::max<int32_t>(CurrentScore-InitialScore,0);
801  // Cooperative: shared score
802  else LastRound.Score = std::max(::Players.AverageScoreGain(),0);
803  LastRound.Level = 0; // unknown...
804  LastRound.Bonus = SuccessBonus * LastRound.Won;
807 
808  // Update player
809  Rounds++;
810  if (LastRound.Won) RoundsWon++; else RoundsLost++;
813 
814  // Crew
816 
817  // league
818  if (Game.Parameters.isLeague())
820 
821  // Player is now evaluated
822  Evaluated = true;
823 
824  // round results
826 }
int32_t TotalScore
Definition: C4InfoCore.h:71
int32_t TotalPlayingTime
Definition: C4InfoCore.h:91
int32_t Won
Definition: C4InfoCore.h:70
int32_t Score
Definition: C4InfoCore.h:71
bool IsMelee()
Definition: C4Scenario.cpp:512
C4Game Game
Definition: C4Globals.cpp:52
int32_t RoundsWon
Definition: C4InfoCore.h:90
C4Scenario C4S
Definition: C4Game.h:74
StdCopyStrBuf ScenarioTitle
Definition: C4Game.h:103
C4GameParameters & Parameters
Definition: C4Game.h:67
int32_t RoundsLost
Definition: C4InfoCore.h:90
uint32_t Date
Definition: C4InfoCore.h:68
bool GameOver
Definition: C4Game.h:114
bool isLeague() const
C4PlayerList Players
int32_t Time
Definition: C4Game.h:132
int32_t GameJoinTime
Definition: C4Player.h:96
bool Evaluated
Definition: C4Player.h:85
C4RoundResults & RoundResults
Definition: C4Game.h:73
int32_t Eliminated
Definition: C4Player.h:83
int32_t CurrentScore
Definition: C4Player.h:116
int32_t FinalScore
Definition: C4InfoCore.h:71
void EvaluateLeague(bool fDisconnected, bool fWon)
Definition: C4Player.cpp:1515
int32_t TotalScore
Definition: C4InfoCore.h:89
C4SGame Game
Definition: C4Scenario.h:234
void EvaluatePlayer(C4Player *pPlr)
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
int32_t InitialScore
Definition: C4Player.h:116
int32_t Rounds
Definition: C4InfoCore.h:90
int AverageScoreGain() const
int32_t Duration
Definition: C4InfoCore.h:69
int32_t Level
Definition: C4InfoCore.h:73
int32_t Bonus
Definition: C4InfoCore.h:72
StdCopyStrBuf Title
Definition: C4InfoCore.h:67
C4RoundResult LastRound
Definition: C4InfoCore.h:92
Here is the call graph for this function:
Here is the caller graph for this function:

◆ EvaluateLeague()

void C4Player::EvaluateLeague ( bool  fDisconnected,
bool  fWon 
)

Definition at line 1515 of file C4Player.cpp.

References GetInfo(), LeagueEvaluated, C4PlayerInfo::SetDisconnected(), and C4PlayerInfo::SetWinner().

Referenced by Evaluate(), and IsViewLocked().

1516 {
1517  // already evaluated?
1518  if (LeagueEvaluated) return; LeagueEvaluated=true;
1519  // set fate
1520  C4PlayerInfo *pInfo = GetInfo();
1521  if (pInfo)
1522  {
1523  if (fDisconnected)
1524  pInfo->SetDisconnected();
1525  if (fWon)
1526  pInfo->SetWinner();
1527  }
1528 }
class C4PlayerInfo * GetInfo()
Definition: C4Player.cpp:1551
void SetDisconnected()
Definition: C4PlayerInfo.h:200
bool LeagueEvaluated
Definition: C4Player.h:100
void SetWinner()
Definition: C4PlayerInfo.h:201
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ExecBaseProduction()

void C4Player::ExecBaseProduction ( )
protected

Definition at line 1153 of file C4Player.cpp.

References BaseMaterial, BaseProduction, C4IDList::GetCount(), C4IDList::GetID(), C4IDList::GetIDCount(), C4IDList::IncreaseIDCount(), ProductionDelay, and ProductionUnit.

Referenced by Execute(), and IsViewLocked().

1154 {
1155  const int32_t MaxBaseProduction = 25;
1156  ProductionDelay++;
1157  if (ProductionDelay>=60) // Minute Production Unit
1158  {
1160  for (int32_t cnt=0; BaseProduction.GetID(cnt); cnt++)
1161  if (BaseProduction.GetCount(cnt)>0)
1162  if (ProductionUnit % Clamp<int32_t>(11-BaseProduction.GetCount(cnt),1,10) ==0)
1163  if (BaseMaterial.GetIDCount(BaseProduction.GetID(cnt)) < MaxBaseProduction)
1165  }
1166 }
int32_t ProductionDelay
Definition: C4Player.h:122
int32_t ProductionUnit
Definition: C4Player.h:122
C4ID GetID(size_t index, int32_t *ipCount=nullptr) const
Definition: C4IDList.cpp:99
bool IncreaseIDCount(C4ID c_id, bool fAddNewID=true, int32_t IncreaseBy=1, bool fRemoveEmpty=false)
Definition: C4IDList.cpp:220
int32_t GetIDCount(C4ID c_id, int32_t iZeroDefVal=0) const
Definition: stub-handle.cpp:67
int32_t GetCount(size_t index) const
Definition: C4IDList.cpp:111
C4IDList BaseMaterial
Definition: C4Player.h:120
C4IDList BaseProduction
Definition: C4Player.h:121
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Execute()

void C4Player::Execute ( )

Definition at line 162 of file C4Player.cpp.

References ActivateMenuTeamSelection(), C4MN_TeamSelection, C4Game::C4S, C4S_MaxPlayer, CheckElimination(), Control, ControlSet, CursorFlash, DoTeamSelection(), ExecBaseProduction(), C4Menu::Execute(), ExecuteControl(), Game, C4MenuItem::GetCommand(), StdStrBuf::getData(), C4TeamList::GetForcedTeamSelection(), C4Menu::GetIdentification(), C4Landscape::GetMapZoom(), C4Team::GetPlrStartIndex(), C4Menu::GetSelectedItem(), C4TeamList::GetTeamByID(), C4PlayerControlAssignmentSet::HasGamepad(), ID, C4Menu::IsActive(), C4Game::iTick35, Landscape, LocalControl, LogF(), Menu, MessageStatus, Name, C4Game::Pause(), pGamepad, C4Scenario::PlrStart, pMsgBoardQuery, C4SPlrStart::Position, PS_Normal, PS_TeamSelection, RetireDelay, Status, C4Game::Teams, C4Menu::TryClose(), UpdateView(), ViewX, and ViewY.

Referenced by C4PlayerList::Execute(), FinalInit(), and GetName().

163 {
164  if (!Status) return;
165 
166  // Open/refresh team menu if desired
168  {
169  int32_t idSelectedTeam;
170  if ((idSelectedTeam = Game.Teams.GetForcedTeamSelection(ID)))
171  {
172  // There's only one team left to join? Join there immediately.
173  if (Menu.IsActive() && Menu.GetIdentification() == C4MN_TeamSelection) Menu.TryClose(false, false);
174  if (LocalControl && !::Control.isReplay())
175  {
176  // team selection done through queue because TeamSelection-status may not be in sync (may be TeamSelectionPending!)
177  DoTeamSelection(idSelectedTeam);
178  }
179  }
180  else if (!Menu.IsActive()) ActivateMenuTeamSelection(false);
181  else
182  {
183  // during team selection: Update view to selected team, if it has a position assigned
184  C4MenuItem *pSelectedTeamItem;
185  if ((pSelectedTeamItem = Menu.GetSelectedItem()))
186  {
187  int32_t idSelectedTeam = atoi(pSelectedTeamItem->GetCommand()+8);
188  if (idSelectedTeam)
189  {
190  C4Team *pSelectedTeam;
191  if ((pSelectedTeam = Game.Teams.GetTeamByID(idSelectedTeam)))
192  {
193  int32_t iPlrStartIndex = pSelectedTeam->GetPlrStartIndex();
194  if (iPlrStartIndex && Inside<int32_t>(iPlrStartIndex, 1, C4S_MaxPlayer))
195  {
196  if (Game.C4S.PlrStart[iPlrStartIndex-1].Position[0] > -1)
197  {
198  // player has selected a team that has a valid start position assigned
199  // set view to this position!
200  ViewX = Game.C4S.PlrStart[iPlrStartIndex-1].Position[0] * ::Landscape.GetMapZoom();
201  ViewY = Game.C4S.PlrStart[iPlrStartIndex-1].Position[1] * ::Landscape.GetMapZoom();
202  }
203  }
204  }
205  }
206  }
207  }
208  }
210  {
211  Menu.TryClose(false, false);
212  }
213 
214  // Do we have a gamepad?
215  if (pGamepad)
216  {
217  // Check whether it's still connected.
218  if (!pGamepad->IsAttached())
219  {
220  // Allow the player to plug the gamepad back in. This allows
221  // battery replacement or plugging the controller back
222  // in after someone tripped over the wire.
223  if (!FindGamepad())
224  {
225  LogF("%s: No gamepad available.", Name.getData());
226  ::Game.Pause();
227  }
228  }
229  }
230  // Should we have one? The player may have started the game
231  // without turning their controller on, only noticing this
232  // after the game started.
233  else if (LocalControl && ControlSet && ControlSet->HasGamepad())
234  {
235  FindGamepad();
236  }
237 
238  // Tick1
239  UpdateView();
240  ExecuteControl();
241  Menu.Execute();
242 
243  // ::Game.iTick35
244  if (!::Game.iTick35 && Status==PS_Normal)
245  {
248  if (pMsgBoardQuery && LocalControl) ExecMsgBoardQueries();
249  }
250 
251  // Delays
252  if (MessageStatus>0) MessageStatus--;
253  if (RetireDelay>0) RetireDelay--;
254  if (CursorFlash>0) CursorFlash--;
255 }
C4MainMenu Menu
Definition: C4Player.h:103
C4Game Game
Definition: C4Globals.cpp:52
int32_t iTick35
Definition: C4Game.h:130
C4Scenario C4S
Definition: C4Game.h:74
const char * GetCommand() const
Definition: C4Menu.h:113
Definition: C4Teams.h:30
void UpdateView()
Definition: C4Player.cpp:1180
const int C4S_MaxPlayer
Definition: C4Constants.h:53
C4PlayerControl Control
Definition: C4Player.h:129
StdStrBuf Name
Definition: C4Player.h:81
C4TeamList & Teams
Definition: C4Game.h:70
bool ActivateMenuTeamSelection(bool fFromMain)
Definition: C4Player.cpp:1238
std::shared_ptr< class C4GamePadOpener > pGamepad
Definition: C4Player.h:132
bool Pause()
Definition: C4Game.cpp:950
int32_t CursorFlash
Definition: C4Player.h:131
class C4PlayerControlAssignmentSet * ControlSet
Definition: C4Player.h:90
int32_t Status
Definition: C4Player.h:82
C4MenuItem * GetSelectedItem()
Definition: C4Menu.cpp:583
C4Landscape Landscape
int32_t GetPlrStartIndex() const
Definition: C4Teams.h:69
int32_t MessageStatus
Definition: C4Player.h:134
int32_t GetIdentification()
Definition: C4Menu.cpp:612
const char * getData() const
Definition: StdBuf.h:442
C4SPlrStart PlrStart[C4S_MaxPlayer]
Definition: C4Scenario.h:235
bool IsActive()
Definition: C4Menu.cpp:480
void CheckElimination()
Definition: C4Player.cpp:1168
void DoTeamSelection(int32_t idTeam)
Definition: C4Player.cpp:1250
bool TryClose(bool fOK, bool fControl)
Definition: C4Menu.cpp:280
int32_t ID
Definition: C4Player.h:87
C4Real ViewY
Definition: C4Player.h:106
int32_t GetMapZoom() const
void Execute()
Definition: C4Menu.cpp:903
void ExecuteControl()
Definition: C4Player.cpp:1054
int32_t RetireDelay
Definition: C4Player.h:95
int32_t Position[2]
Definition: C4Scenario.h:145
int32_t GetForcedTeamSelection(int32_t idForPlayer) const
Definition: C4Teams.cpp:850
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:260
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
void ExecBaseProduction()
Definition: C4Player.cpp:1153
bool LocalControl
Definition: C4Player.h:99
C4Real ViewX
Definition: C4Player.h:106
C4Team * GetTeamByID(int32_t iID) const
Definition: C4Teams.cpp:383
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ExecuteControl()

void C4Player::ExecuteControl ( )

Definition at line 1054 of file C4Player.cpp.

References Control, and C4PlayerControl::Execute().

Referenced by Execute(), and GetName().

1055 {
1056  Control.Execute();
1057 }
C4PlayerControl Control
Definition: C4Player.h:129
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FinalInit()

bool C4Player::FinalInit ( bool  fInitialScore)

Definition at line 699 of file C4Player.cpp.

References AdjustCursorCommand(), CurrentScore, Cursor, Execute(), InitialScore, LocalControl, MouseControl, Number, and Status.

Referenced by GetName(), C4Game::InitGameFinal(), C4Game::JoinPlayer(), and ScenarioAndTeamInit().

700 {
701  if (!Status) return true;
702 
703  // Init player's mouse control
704  if (LocalControl)
705  if (MouseControl)
706  ::MouseControl.Init(Number);
707 
708  // Set initial score
709  if (fInitialScore)
710  {
712  }
713 
714  // Cursor
715  if (!Cursor) AdjustCursorCommand();
716 
717  // Update counts, pointers, views
718  Execute();
719 
720  return true;
721 }
int32_t MouseControl
Definition: C4Player.h:92
C4ObjectPtr Cursor
Definition: C4Player.h:130
int32_t Number
Definition: C4Player.h:86
int32_t Status
Definition: C4Player.h:82
void Execute()
Definition: C4Player.cpp:162
int32_t CurrentScore
Definition: C4Player.h:116
int32_t InitialScore
Definition: C4Player.h:116
void AdjustCursorCommand()
Definition: C4Player.cpp:1059
bool LocalControl
Definition: C4Player.h:99
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FindNewOwner()

int32_t C4Player::FindNewOwner ( ) const

Definition at line 1279 of file C4Player.cpp.

References C4PlayerList::First, Game, C4Team::GetIndexedPlayer(), C4PlayerInfo::GetInGameNumber(), C4Team::GetPlayerCount(), C4PlayerInfoList::GetPlayerInfoByID(), C4TeamList::GetTeamByID(), C4PlayerList::Hostile(), ID, C4PlayerInfo::IsJoined(), Next, NO_OWNER, Number, C4Game::PlayerInfos, Players, Team, and C4Game::Teams.

Referenced by GetName(), and NotifyOwnedObjects().

1280 {
1281  int32_t iNewOwner = NO_OWNER;
1282  C4Team *pTeam;
1283  if (Team) if ((pTeam = Game.Teams.GetTeamByID(Team)))
1284  {
1285  for (int32_t i=0; i<pTeam->GetPlayerCount(); ++i)
1286  {
1287  int32_t iPlrID = pTeam->GetIndexedPlayer(i);
1288  if (iPlrID && iPlrID != ID)
1289  {
1290  C4PlayerInfo *pPlrInfo = Game.PlayerInfos.GetPlayerInfoByID(iPlrID);
1291  if (pPlrInfo) if (pPlrInfo->IsJoined())
1292  {
1293  // this looks like a good new owner
1294  iNewOwner = pPlrInfo->GetInGameNumber();
1295  break;
1296  }
1297  }
1298  }
1299  }
1300  // if noone from the same team was found, try to find another non-hostile player
1301  // (necessary for cooperative rounds without teams)
1302  if (iNewOwner == NO_OWNER)
1303  for (C4Player *pOtherPlr = ::Players.First; pOtherPlr; pOtherPlr = pOtherPlr->Next)
1304  if (pOtherPlr != this) if (!pOtherPlr->Eliminated)
1305  if (!::Players.Hostile(pOtherPlr->Number, Number))
1306  iNewOwner = pOtherPlr->Number;
1307 
1308  return iNewOwner;
1309 }
int32_t Team
Definition: C4Player.h:88
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
Definition: C4Teams.h:30
int32_t GetPlayerCount() const
Definition: C4Teams.h:64
C4Player * First
Definition: C4PlayerList.h:31
int32_t GetIndexedPlayer(int32_t iIndex) const
Definition: C4Teams.h:76
C4TeamList & Teams
Definition: C4Game.h:70
bool IsJoined() const
Definition: C4PlayerInfo.h:166
bool Hostile(int iPlayer1, int iPlayer2) const
C4PlayerList Players
const int NO_OWNER
Definition: C4Constants.h:137
int32_t ID
Definition: C4Player.h:87
C4PlayerInfoList & PlayerInfos
Definition: C4Game.h:71
C4Player * Next
Definition: C4Player.h:142
C4PlayerInfo * GetPlayerInfoByID(int32_t id) const
int32_t GetInGameNumber() const
Definition: C4PlayerInfo.h:189
C4Team * GetTeamByID(int32_t iID) const
Definition: C4Teams.cpp:383
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GainScenarioAchievement()

bool C4Player::GainScenarioAchievement ( const char *  achievement_id,
int32_t  value,
const char *  scen_name_override = nullptr 
)

Definition at line 1906 of file C4Player.cpp.

References C4PlayerInfoCore::Achievements, C4ScenarioParameters::AddFilename2ID(), C4Game::C4S, Game, StdStrBuf::getData(), StdStrBuf::getLength(), C4Scenario::Head, C4SHead::Origin, C4Game::ScenarioFilename, and C4ScenarioParameters::SetValue().

Referenced by IsViewLocked().

1907 {
1908  // Determine full ID of achievement
1909  if (!scen_name_override)
1910  {
1911  if (::Game.C4S.Head.Origin.getLength())
1912  scen_name_override = ::Game.C4S.Head.Origin.getData();
1913  else
1914  scen_name_override = ::Game.ScenarioFilename;
1915  }
1916  StdStrBuf sAchvID = C4ScenarioParameters::AddFilename2ID(scen_name_override, achievement_id);
1917  // Gain achievement iff it's an improvement
1918  Achievements.SetValue(sAchvID.getData(), value, true);
1919  return true;
1920 }
StdCopyStrBuf Origin
Definition: C4Scenario.h:80
char ScenarioFilename[_MAX_PATH+1]
Definition: C4Game.h:102
C4Game Game
Definition: C4Globals.cpp:52
C4Scenario C4S
Definition: C4Game.h:74
static StdStrBuf AddFilename2ID(const char *filename, const char *id)
const char * getData() const
Definition: StdBuf.h:442
C4SHead Head
Definition: C4Scenario.h:232
size_t getLength() const
Definition: StdBuf.h:445
C4ScenarioParameters Achievements
Definition: C4InfoCore.h:108
void SetValue(const char *id, int32_t value, bool only_if_larger)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetHiExpActiveCrew()

C4Object * C4Player::GetHiExpActiveCrew ( )

Definition at line 867 of file C4Player.cpp.

References Crew, C4ObjectInfoCore::Experience, and C4Object::Info.

Referenced by CheckCrewExPromotion(), and GetName().

868 {
869  C4Object *hiexp=nullptr;
870  int32_t iHighestExp=-2, iExp;
871  for (C4Object *cobj : Crew)
872  {
873  if (!cobj->CrewDisabled)
874  {
875  if (cobj->Info) iExp = cobj->Info->Experience; else iExp=-1;
876  if (!hiexp || (iExp>iHighestExp))
877  {
878  hiexp=cobj;
879  iHighestExp=iExp;
880  }
881  }
882  }
883  return hiexp;
884 }
C4ObjectInfo * Info
Definition: C4Object.h:145
C4ObjectList Crew
Definition: C4Player.h:125
int32_t Experience
Definition: C4InfoCore.h:43
Here is the caller graph for this function:

◆ GetHiRankActiveCrew()

C4Object * C4Player::GetHiRankActiveCrew ( )

Definition at line 886 of file C4Player.cpp.

References Crew, C4Object::Info, and C4ObjectInfoCore::Rank.

Referenced by AdjustCursorCommand(), CheckCrewExPromotion(), and GetName().

887 {
888  C4Object *hirank=nullptr;
889  int32_t iHighestRank=-2, iRank;
890  for (C4Object *cobj : Crew)
891  {
892  if (!cobj->CrewDisabled)
893  {
894  if (cobj->Info) iRank = cobj->Info->Rank; else iRank=-1;
895  if (!hirank || (iRank>iHighestRank))
896  {
897  hirank=cobj;
898  iHighestRank=iRank;
899  }
900  }
901  }
902  return hirank;
903 }
C4ObjectInfo * Info
Definition: C4Object.h:145
C4ObjectList Crew
Definition: C4Player.h:125
Here is the caller graph for this function:

◆ GetInfo()

C4PlayerInfo * C4Player::GetInfo ( )

Definition at line 1551 of file C4Player.cpp.

References Game, C4PlayerInfoList::GetPlayerInfoByID(), ID, and C4Game::PlayerInfos.

Referenced by EvaluateLeague(), C4RoundResultsPlayer::EvaluatePlayer(), InitControl(), IsViewLocked(), ScenarioAndTeamInit(), and ScenarioInit().

1552 {
1554 }
C4Game Game
Definition: C4Globals.cpp:52
int32_t ID
Definition: C4Player.h:87
C4PlayerInfoList & PlayerInfos
Definition: C4Game.h:71
C4PlayerInfo * GetPlayerInfoByID(int32_t id) const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetName()

const char* C4Player::GetName ( ) const
inline

Definition at line 151 of file C4Player.h.

References ActivateMenuMain(), ActivateMenuTeamSelection(), ActiveCrewCount(), AdjustCursorCommand(), ClearPointers(), CompileFunc(), DefaultRuntimeData(), DenumeratePointers(), DoScore(), DoTeamSelection(), DoWealth(), DrawHostility(), Eliminate(), Evaluate(), Execute(), ExecuteControl(), FinalInit(), FindNewOwner(), StdStrBuf::getData(), GetHiExpActiveCrew(), GetHiRankActiveCrew(), GetSelectedCrewCount(), GetType(), Init(), IsHostileTowards(), Load(), LoadRuntimeData(), LocalSync(), MakeCrewMember(), Message(), NotifyOwnedObjects(), ObjectInCrew(), RemoveCrewObjects(), ResetCursorView(), Save(), ScenarioAndTeamInit(), ScenarioInit(), ScrollView(), SetCursor(), SetFoW(), SetHostility(), SetKnowledge(), SetObjectCrewStatus(), SetViewMode(), SetWealth(), Strip(), and Surrender().

Referenced by C4ControlEMDrawTool::C4ControlEMDrawTool(), CreateGraphs(), C4MainMenu::DoRefillInternal(), C4Viewport::DrawMenu(), C4Viewport::DrawPlayerStartup(), Eliminate(), C4Object::GetDataString(), C4ViewportWindow::Init(), C4Game::JoinPlayer(), C4ChatInputDialog::OnChatInput(), C4PlayerList::RemoveAtClient(), C4PlayerList::RemoveAtRemoteClient(), C4PlayerList::RemoveLocal(), ScenarioInit(), SetHostility(), and Surrender().

151 { return Name.getData(); }
StdStrBuf Name
Definition: C4Player.h:81
const char * getData() const
Definition: StdBuf.h:442
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPrefColorValue()

DWORD C4PlayerInfoCore::GetPrefColorValue ( int32_t  iPrefColor)
staticinherited

Definition at line 67 of file C4InfoCore.cpp.

Referenced by C4StartupPlrPropertiesDlg::C4StartupPlrPropertiesDlg(), C4PlayerInfoCore::Load(), C4StartupPlrPropertiesDlg::OnClrChangeLeft(), and C4StartupPlrPropertiesDlg::OnClrChangeRight().

68 {
69  DWORD valRGB[12] = { 0xFF0000E8, 0xFFF40000, 0xFF00C800, 0xFFFCF41C,
70  0xFFC48444, 0xFF784830, 0xFFA04400, 0xFFF08050,
71  0xFF848484, 0xFFFFFFFF, 0xFF0094F8, 0xFFBC00C0
72  };
73  if (Inside<int32_t>(iPrefColor, 0, 11))
74  return valRGB[iPrefColor];
75  return 0xFFAAAAAA;
76 }
uint32_t DWORD
Here is the caller graph for this function:

◆ GetSelectedCrewCount()

int32_t C4Player::GetSelectedCrewCount ( )

Definition at line 1508 of file C4Player.cpp.

References C4Object::CrewDisabled, and Cursor.

Referenced by GetName().

1509 {
1510  if (Cursor && !Cursor->CrewDisabled)
1511  return 1;
1512  return 0;
1513 }
C4ObjectPtr Cursor
Definition: C4Player.h:130
bool CrewDisabled
Definition: C4Object.h:164
Here is the caller graph for this function:

◆ GetType()

C4PlayerType C4Player::GetType ( ) const

Definition at line 1726 of file C4Player.cpp.

References C4PT_User, Game, C4PlayerInfoList::GetPlayerInfoByID(), C4PlayerInfo::GetType(), ID, and C4Game::PlayerInfos.

Referenced by GetName(), C4Object::IsUserPlayerObject(), LocalSync(), C4MainMenu::MenuCommand(), C4PlayerList::Retire(), and Save().

1727 {
1728  // type by info
1730  if (pInfo) return pInfo->GetType(); else { assert(false); return C4PT_User; }
1731 }
C4Game Game
Definition: C4Globals.cpp:52
C4PlayerType GetType() const
Definition: C4PlayerInfo.h:152
int32_t ID
Definition: C4Player.h:87
C4PlayerInfoList & PlayerInfos
Definition: C4Game.h:71
C4PlayerInfo * GetPlayerInfoByID(int32_t id) const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ HasMessageBoardQuery()

bool C4Player::HasMessageBoardQuery ( )

Definition at line 1697 of file C4Player.cpp.

References pMsgBoardQuery.

Referenced by IsViewLocked().

1698 {
1699  // return whether any object has a messageboard-query
1700  return !!pMsgBoardQuery;
1701 }
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
Here is the caller graph for this function:

◆ Init()

bool C4Player::Init ( int32_t  iNumber,
int32_t  iAtClient,
const char *  szAtClientName,
const char *  szFilename,
bool  fScenarioInit,
class C4PlayerInfo pInfo,
C4ValueNumbers numbers 
)

Definition at line 257 of file C4Player.cpp.

References AtClient, AtClientName, C4Config::AtUserDataPath(), C4Id2Def(), C4MaxTitle, C4P_Number_None, C4PT_Script, C4Game::C4S, C4PropList::Call(), ClearControl(), ColorDw, Config, Control, StdStrBuf::Copy(), CreateGraphs(), Filename, Game, GameJoinTime, C4PlayerInfo::GetColor(), C4TeamList::GetGenerateTeamByID(), C4Landscape::GetHeight(), C4PlayerInfo::GetID(), C4PlayerInfo::GetInGameNumber(), C4PlayerInfo::GetName(), C4Value::getPropList(), C4PlayerInfo::GetScriptPlayerExtraID(), C4PlayerInfo::GetTeam(), C4TeamList::GetTeamByID(), C4PlayerInfo::GetType(), C4Landscape::GetWidth(), C4Game::GRBroadcast(), C4Scenario::Head, ID, C4PlayerControl::Init(), InitControl(), C4TeamList::IsAutoGenerateTeams(), C4PlayerInfo::IsJoined(), C4PlayerInfo::IsNoEliminationCheck(), C4TeamList::IsRuntimeJoinTeamChoice(), C4PlayerInfo::IsScenarioInitDesired(), Landscape, Load(), LoadRuntimeData(), LogF(), Name, NO_OWNER, NoEliminationCheck, Number, Objects, Players, C4Game::pNetworkStatistics, PS_Normal, PS_TeamSelection, PSF_InitializeScriptPlayer, PSF_PreInitializePlayer, C4PlayerList::RecheckPlayerSort(), C4SHead::SaveGame, C4Game::ScenarioFile, ScenarioInit(), SCopy(), C4PlayerInfo::SetJoined(), SetSoundModifier(), SetTeamHostility(), SoundModifier, Status, Team, C4Game::Teams, C4Game::Time, ViewX, and ViewY.

Referenced by GetName(), and C4PlayerList::Join().

259 {
260  // safety
261  if (!pInfo)
262  {
263  LogF("ERROR: Init player %s failed: No info!", szFilename);
264  assert(false);
265  return false;
266  }
267  // Status init
269  Number = iNumber;
270  ID = pInfo->GetID();
271  Team = pInfo->GetTeam();
272  NoEliminationCheck = pInfo->IsNoEliminationCheck();
273 
274  // At client
275  AtClient=iAtClient; SCopy(szAtClientName,AtClientName,C4MaxTitle);
276 
277  if (szFilename)
278  {
279  // Load core & crew info list
280  if (!Load(szFilename, !fScenarioInit)) return false;
281  }
282  else
283  {
284  // no core file present: Keep defaults
285  // This can happen for script players only
286  assert(pInfo->GetType() == C4PT_Script);
287  }
288 
289  // Take player name from player info; forcing overloads by the league or because of doubled player names
290  Name.Copy(pInfo->GetName());
291 
292  // view pos init: Start at center pos
294 
295  // Scenario init
296  if (fScenarioInit)
297  {
298  // mark player join in player info list
299  // for non-scenarioinit, player should already be marked as joined
300  pInfo->SetJoined(iNumber);
301 
302  // Number might have changed: Recheck list sorting before scenarioinit, which will do script calls
304 
305  // check for a postponed scenario init, if no team is specified (post-lobby-join in network, or simply non-network)
306  C4Team *pTeam = nullptr;
307  if (Team)
308  {
311  else
312  pTeam = Game.Teams.GetTeamByID(Team);
313  }
314  if (!pTeam && Game.Teams.IsRuntimeJoinTeamChoice())
315  {
316  if (pInfo->GetType() == C4PT_Script)
317  {
318  // script player without team: This can usually not happen, because RecheckPlayerInfoTeams should have been executed
319  // just leave this player without the team
320  assert(false);
321  }
322  else
323  {
324  // postponed init: Chose team first
326  }
327  }
328 
329  // Init control method before scenario init, because script callbacks may need to know it!
330  ClearControl();
331  InitControl();
332 
333  // defaultdisabled controls
334  Control.Init();
335 
336  // Special: Script players may skip scenario initialization altogether, and just desire a single callback to all objects
337  // of a given ID
338  if (!pInfo->IsScenarioInitDesired())
339  {
340  // only initialization that's done anyway is team hostility
341  if (Team) SetTeamHostility();
342  // callback definition passed?
343  C4ID idCallback = pInfo->GetScriptPlayerExtraID();
344  C4Def *pDefCallback;
345  if (idCallback && (pDefCallback = C4Id2Def(idCallback)))
346  {
348  }
349  }
350  else
351  {
352  // player preinit: In case a team needs to be chosen first, no InitializePlayer-broadcast is done
353  // this callback shall give scripters a chance to do stuff like starting an intro or enabling FoW, which might need to be done
355  // direct init
356  if (Status != PS_TeamSelection) if (!ScenarioInit()) return false;
357  }
358  }
359 
360  // Load runtime data
361  else
362  {
363  assert(pInfo->IsJoined());
364  assert(numbers);
365  // (compile using DefaultRuntimeData) - also check if compilation returned sane results, i.e. ID assigned
366  if (!LoadRuntimeData(Game.ScenarioFile, numbers) || !ID)
367  {
368  // for script players in non-savegames, this is OK - it means they get restored using default values
369  // this happens when the users saves a scenario using the "Save scenario"-option while a script player
370  // was joined
371  if (!Game.C4S.Head.SaveGame && pInfo->GetType() == C4PT_Script)
372  {
373  Number = pInfo->GetInGameNumber();
374  ColorDw = pInfo->GetColor();
375  ID = pInfo->GetID();
376  Team = pInfo->GetTeam();
377  }
378  else
379  return false;
380  }
381  // Reset values default-overriden by old runtime data load (safety?)
382  if (Number==C4P_Number_None) Number=iNumber;
383  if (szFilename) SCopy(Config.AtUserDataPath(szFilename),Filename); else *Filename='\0';
384  // NET2: Direct joins always send accurate client IDs and names in params
385  // do not overwrite them with savegame data, because players might as well
386  // change clients
387  // (only call should be savegame recreation by C4PlayerInfoList::RecreatePlayers)
388  AtClient = iAtClient;
389  SCopy(szAtClientName,AtClientName,C4MaxTitle);
390  // Number might have changed: Recheck list sorting
392  // Init control after loading runtime data, because control init will overwrite some of the values
393  InitControl();
394  }
395 
396  // store game joining time
398 
399  // Init FoW-viewobjects: NO_OWNER-FoW-repellers might need to be added
400  for (C4Object *pObj : Objects)
401  {
402  if ((pObj->lightRange || pObj->lightFadeoutRange) && pObj->Owner == NO_OWNER)
403  pObj->UpdateLight();
404  }
405 
406  // init graphs
408 
409  // init sound mod
411 
412  return true;
413 }
void RecheckPlayerSort(C4Player *pForPlayer)
C4Config Config
Definition: C4Config.cpp:833
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:152
const size_t C4MaxTitle
Definition: C4Constants.h:25
char AtClientName[C4MaxTitle+1]
Definition: C4Player.h:98
int32_t Team
Definition: C4Player.h:88
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
C4Scenario C4S
Definition: C4Game.h:74
Definition: C4Teams.h:30
C4PropList * getPropList() const
Definition: C4Value.h:116
char Filename[_MAX_PATH+1]
Definition: C4Player.h:80
void ClearControl()
Definition: C4Player.cpp:1373
C4Team * GetGenerateTeamByID(int32_t iID)
Definition: C4Teams.cpp:390
bool Load(const char *szFilename, bool fSavegame)
Definition: C4Player.cpp:937
C4PlayerControl Control
Definition: C4Player.h:129
StdStrBuf Name
Definition: C4Player.h:81
C4TeamList & Teams
Definition: C4Game.h:70
uint32_t ColorDw
Definition: C4Player.h:89
bool SaveGame
Definition: C4Scenario.h:71
const int32_t C4P_Number_None
Definition: C4Player.h:35
bool LoadRuntimeData(C4Group &hGroup, C4ValueNumbers *)
Definition: C4Player.cpp:1132
int32_t Status
Definition: C4Player.h:82
void CreateGraphs()
Definition: C4Player.cpp:1587
C4Landscape Landscape
C4Group ScenarioFile
Definition: C4Game.h:86
C4PlayerList Players
int32_t Time
Definition: C4Game.h:132
Definition: C4Def.h:98
const int NO_OWNER
Definition: C4Constants.h:137
int32_t GameJoinTime
Definition: C4Player.h:96
Definition: C4Id.h:25
C4Value SoundModifier
Definition: C4Player.h:140
bool ScenarioInit()
Definition: C4Player.cpp:601
bool IsRuntimeJoinTeamChoice() const
Definition: C4Teams.h:173
int32_t AtClient
Definition: C4Player.h:97
bool NoEliminationCheck
Definition: C4Player.h:101
int32_t ID
Definition: C4Player.h:87
int32_t GetHeight() const
C4Def * C4Id2Def(C4ID id)
Definition: C4DefList.h:84
bool IsAutoGenerateTeams() const
Definition: C4Teams.h:172
C4Real ViewY
Definition: C4Player.h:106
void SetTeamHostility()
Definition: C4Player.cpp:915
const char * AtUserDataPath(const char *szFilename)
Definition: C4Config.cpp:526
int32_t GetWidth() const
C4Value GRBroadcast(const char *szFunction, C4AulParSet *pPars=nullptr, bool fPassError=false, bool fRejectTest=false)
Definition: C4Game.cpp:3853
#define PSF_PreInitializePlayer
Definition: C4GameScript.h:42
void InitControl()
Definition: C4Player.cpp:1393
C4SHead Head
Definition: C4Scenario.h:232
std::unique_ptr< C4Network2Stats > pNetworkStatistics
Definition: C4Game.h:95
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:260
#define PSF_InitializeScriptPlayer
Definition: C4GameScript.h:41
void Copy()
Definition: StdBuf.h:467
void SetSoundModifier(C4PropList *new_modifier)
Definition: C4Player.cpp:1922
C4GameObjects Objects
Definition: C4Globals.cpp:48
C4Real ViewX
Definition: C4Player.h:106
C4Value Call(C4PropertyName k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4PropList.h:110
C4Team * GetTeamByID(int32_t iID) const
Definition: C4Teams.cpp:383
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitControl()

void C4Player::InitControl ( )
protected

Definition at line 1393 of file C4Player.cpp.

References Application, AtClient, C4PT_User, CDT_Queue, CID_PlrAction, Config, Control, ControlSet, ControlSetName, Game, C4ConfigGeneral::GamepadEnabled, C4Config::General, C4GamePadControl::GetAvailableGamePad(), StdStrBuf::getData(), C4PlayerControlAssignmentSets::GetDefaultSet(), GetInfo(), C4PlayerControlAssignmentSets::GetSetByName(), C4PlayerInfo::GetType(), C4PlayerControlAssignmentSet::HasGamepad(), C4PlayerControlAssignmentSet::HasMouse(), ID, C4ControlPlayerAction::InitPlayerControl(), LocalControl, LogF(), MouseControl, C4PlayerList::MouseControlTaken(), Name, NO_OWNER, Number, C4Game::Pause(), pGamepad, C4Application::pGamePadControl, C4Game::PlayerControlUserAssignmentSets, Players, C4PlayerInfoCore::PrefControl, C4PlayerInfoCore::PrefMouse, and C4PlayerControl::RegisterKeyset().

Referenced by Init(), and IsViewLocked().

1394 {
1395  // Check local control
1396  if (AtClient == ::Control.ClientID())
1397  if (!GetInfo() || GetInfo()->GetType() == C4PT_User)
1398  if (!::Control.isReplay())
1399  LocalControl=true;
1400  // needs to init control for local players only
1401  if (LocalControl)
1402  {
1403  // Preferred control
1406  // control set unassigned/not known? fallback to some default then (=first defined control set)
1408  // gamepad control safety (assuming the default control set is not using gamepad)
1410  {
1412  }
1413  // Choose next while control taken
1414  // TODO
1415  // init gamepad
1416  if (ControlSet && ControlSet->HasGamepad())
1417  {
1418  if (!FindGamepad())
1419  {
1420  LogF("No gamepad available for %s, please plug one in!", Name.getData());
1421  ::Game.Pause();
1422  }
1423  }
1424  // Mouse
1425  if (ControlSet && ControlSet->HasMouse() && PrefMouse)
1426  if (!::Players.MouseControlTaken())
1427  MouseControl=true;
1428  // Some controls such as gamepad control need special synced GUI elements
1429  // Do a script callback for selected control
1431  }
1432  // clear old control method and register new
1434 }
class C4PlayerInfo * GetInfo()
Definition: C4Player.cpp:1551
int32_t MouseControl
Definition: C4Player.h:92
C4Config Config
Definition: C4Config.cpp:833
C4PlayerControlAssignmentSet * GetDefaultSet()
C4PlayerControlAssignmentSet * GetSetByName(const char *szName)
bool MouseControlTaken() const
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
C4ConfigGeneral General
Definition: C4Config.h:251
StdCopyStrBuf PrefControl
Definition: C4InfoCore.h:96
C4PlayerControl Control
Definition: C4Player.h:129
bool GamepadEnabled
Definition: C4Config.h:58
StdStrBuf Name
Definition: C4Player.h:81
int32_t PrefMouse
Definition: C4InfoCore.h:97
bool Pause()
Definition: C4Game.cpp:950
class C4PlayerControlAssignmentSet * ControlSet
Definition: C4Player.h:90
C4PlayerType GetType() const
Definition: C4PlayerInfo.h:152
C4PlayerList Players
void RegisterKeyset(int32_t iPlr, C4PlayerControlAssignmentSet *pKeyset)
const char * getData() const
Definition: StdBuf.h:442
static C4ControlPlayerAction * InitPlayerControl(const C4Player *source, const C4PlayerControlAssignmentSet *ctrl_set=nullptr)
Definition: C4Control.cpp:613
int32_t AtClient
Definition: C4Player.h:97
StdCopyStrBuf ControlSetName
Definition: C4Player.h:91
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:260
C4PlayerControlAssignmentSets PlayerControlUserAssignmentSets
Definition: C4Game.h:93
bool LocalControl
Definition: C4Player.h:99
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsChosingTeam()

bool C4Player::IsChosingTeam ( ) const
inline

Definition at line 202 of file C4Player.h.

References IsInvisible(), PS_TeamSelection, and PS_TeamSelectionPending.

Here is the call graph for this function:

◆ IsHostileTowards()

bool C4Player::IsHostileTowards ( const C4Player opponent) const

Definition at line 860 of file C4Player.cpp.

References Hostility.

Referenced by GetName(), C4PlayerList::Hostile(), and C4PlayerList::HostilityDeclared().

861 {
862  assert(plr);
863  if (!plr) return false;
864  return Hostility.find(plr) != Hostility.end();
865 }
HostilitySet Hostility
Definition: C4Player.h:118
Here is the caller graph for this function:

◆ IsInvisible()

bool C4Player::IsInvisible ( ) const

Definition at line 1733 of file C4Player.cpp.

References Game, C4PlayerInfoList::GetPlayerInfoByID(), ID, C4PlayerInfo::IsInvisible(), and C4Game::PlayerInfos.

Referenced by C4MainMenu::DoRefillInternal(), and IsChosingTeam().

1734 {
1735  // invisible by info
1737  if (pInfo) return pInfo->IsInvisible(); else { assert(false); return false; }
1738 }
C4Game Game
Definition: C4Globals.cpp:52
bool IsInvisible() const
Definition: C4PlayerInfo.h:175
int32_t ID
Definition: C4Player.h:87
C4PlayerInfoList & PlayerInfos
Definition: C4Game.h:71
C4PlayerInfo * GetPlayerInfoByID(int32_t id) const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsViewLocked()

bool C4Player::IsViewLocked ( ) const
inline

Definition at line 204 of file C4Player.h.

References CallMessageBoard(), CheckCrewExPromotion(), CheckElimination(), ClearControl(), ClearGraphs(), CloseMenu(), CountControl(), CreateGraphs(), EvaluateLeague(), ExecBaseProduction(), GainScenarioAchievement(), GetInfo(), HasMessageBoardQuery(), InitControl(), MarkMessageBoardQueryAnswered(), OnTeamSelectionFailed(), PlaceReadyBase(), PlaceReadyCrew(), PlaceReadyMaterial(), PlaceReadyVehic(), RemoveMessageBoardQuery(), SetMaxZoom(), SetMaxZoomByViewRange(), SetMinZoom(), SetMinZoomByViewRange(), SetPlayerColor(), SetSoundModifier(), SetTeamHostility(), SetViewLocked(), SetZoom(), SetZoomByViewRange(), ToggleMouseControl(), UpdateView(), ViewLock, ZoomLimitsToViewport(), ZoomLimitsToViewports(), ZoomToViewport(), and ZoomToViewports().

Referenced by C4MouseControl::UpdateScrolling().

204 { return ViewLock; } // return if view is fixed to cursor, so scrolling is not allowed
bool ViewLock
Definition: C4Player.h:107
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Load() [1/2]

bool C4PlayerInfoCore::Load ( C4Group hGroup)
inherited

Definition at line 78 of file C4InfoCore.cpp.

References StdStrBuf::Append(), C4CFN_PlayerInfoCore, DirSep, StdStrBuf::getData(), C4Group::GetFullName(), C4PlayerInfoCore::GetPrefColorValue(), C4Group::LoadEntryString(), C4PlayerInfoCore::OldPrefAutoContextMenu, C4PlayerInfoCore::OldPrefControlStyle, C4PlayerInfoCore::PrefColor, C4PlayerInfoCore::PrefColor2Dw, C4PlayerInfoCore::PrefColorDw, C4PlayerInfoCore::PrefName, and C4Markup::StripMarkup().

Referenced by C4StartupScenSelDlg::AbortRenaming(), C4MainMenu::ActivateNewPlayer(), C4StartupPlrSelDlg::PlayerListItem::Load(), Load(), C4PlayerInfo::LoadFromLocalFile(), C4StartupPlrSelDlg::PlayerListItem::MoveFilename(), and Strip().

79 {
80  // New version
81  StdStrBuf Source;
82  if (hGroup.LoadEntryString(C4CFN_PlayerInfoCore,&Source))
83  {
84  // Compile
85  StdStrBuf GrpName = hGroup.GetFullName(); GrpName.Append(DirSep C4CFN_PlayerInfoCore);
86  if (!CompileFromBuf_LogWarn<StdCompilerINIRead>(*this, Source, GrpName.getData()))
87  return false;
88  // Pref for AutoContextMenus is still undecided: default by player's control style
89  if (OldPrefAutoContextMenu == -1)
91  // Determine true color from indexed pref color
92  if (!PrefColorDw)
94  // Validate colors
95  PrefColorDw &= 0xffffff;
96  PrefColor2Dw &= 0xffffff;
97  // Validate name
99  // Success
100  return true;
101  }
102 
103  // Old version no longer supported - sorry
104  return false;
105 }
int32_t OldPrefControlStyle
Definition: C4InfoCore.h:104
int32_t OldPrefAutoContextMenu
Definition: C4InfoCore.h:105
char PrefName[C4MaxName+1]
Definition: C4InfoCore.h:85
StdStrBuf GetFullName() const
Definition: C4Group.cpp:2078
static DWORD GetPrefColorValue(int32_t iPrefColor)
Definition: C4InfoCore.cpp:67
#define C4CFN_PlayerInfoCore
Definition: C4Components.h:45
void Append(const char *pnData, size_t iChars)
Definition: StdBuf.h:519
int32_t PrefColor
Definition: C4InfoCore.h:98
uint32_t PrefColorDw
Definition: C4InfoCore.h:99
const char * getData() const
Definition: StdBuf.h:442
uint32_t PrefColor2Dw
Definition: C4InfoCore.h:99
bool LoadEntryString(const char *szEntryName, StdStrBuf *Buf)
Definition: C4Group.cpp:1932
#define DirSep
static bool StripMarkup(char *szText)
Definition: C4Markup.cpp:148
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Load() [2/2]

bool C4Player::Load ( const char *  szFilename,
bool  fSavegame 
)

Definition at line 937 of file C4Player.cpp.

References _MAX_PATH, BigIcon, C4CFN_BigIcon, C4FCT_Full, C4Group::Close(), CrewInfoList, Filename, C4Group::FindEntry(), StdStrBuf::getData(), C4Group::GetFullName(), C4ObjectInfoList::Load(), C4FacetSurface::Load(), C4PlayerInfoCore::Load(), C4Reloc::Open(), Reloc, and SCopy().

Referenced by GetName(), and Init().

938 {
939  C4Group hGroup;
940  // Open group
941  if (!Reloc.Open(hGroup, szFilename)) return false;
942  // Remember filename
944  // Load core
945  if (!C4PlayerInfoCore::Load(hGroup))
946  { hGroup.Close(); return false; }
947  // Load BigIcon
948  if (hGroup.FindEntry(C4CFN_BigIcon)) BigIcon.Load(hGroup, C4CFN_BigIcon, C4FCT_Full, C4FCT_Full, false, 0);
949  // Load crew info list
950  CrewInfoList.Load(hGroup);
951  // Close group
952  hGroup.Close();
953  // Success
954  return true;
955 }
bool FindEntry(const char *szWildCard, StdStrBuf *sFileName=nullptr, size_t *iSize=nullptr)
Definition: C4Group.cpp:1774
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:152
int32_t Load(C4Group &hGroup)
bool Load(C4Group &hGroup, const char *szName, int iWdt, int iHgt, bool fNoErrIfNotFound, int iFlags)
Definition: C4FacetEx.cpp:78
char Filename[_MAX_PATH+1]
Definition: C4Player.h:80
#define _MAX_PATH
StdStrBuf GetFullName() const
Definition: C4Group.cpp:2078
bool Load(C4Group &hGroup)
Definition: C4InfoCore.cpp:78
C4FacetSurface BigIcon
Definition: C4Player.h:138
bool Close()
Definition: C4Group.cpp:755
const char * getData() const
Definition: StdBuf.h:442
C4Reloc Reloc
Definition: C4Reloc.cpp:21
#define C4CFN_BigIcon
Definition: C4Components.h:111
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
bool Open(C4Group &hGroup, const char *filename) const
Definition: C4Reloc.cpp:82
const int C4FCT_Full
Definition: C4FacetEx.h:26
Here is the call graph for this function:
Here is the caller graph for this function:

◆ LoadRuntimeData()

bool C4Player::LoadRuntimeData ( C4Group hGroup,
C4ValueNumbers numbers 
)

Definition at line 1132 of file C4Player.cpp.

References DenumeratePointers(), FormatString(), Game, C4Game::GameText, C4ComponentHost::GetData(), StdStrBuf::getData(), C4ComponentHost::GetFilePath(), ID, mkNamingAdapt(), mkParAdapt(), and SSearch().

Referenced by GetName(), and Init().

1133 {
1134  const char *pSource;
1135  // Use loaded game text component
1136  if (!(pSource = Game.GameText.GetData())) return false;
1137  // safety: Do nothing if player section is not even present (could kill initialized values)
1138  if (!SSearch(pSource, FormatString("[Player%i]", ID).getData())) return false;
1139  // Compile (Search player section - runtime data is stored by unique player ID)
1140  // Always compile exact. Exact data will not be present for savegame load, so it does not matter
1141  assert(ID);
1142  if (!CompileFromBuf_LogWarn<StdCompilerINIRead>(
1143  mkNamingAdapt(mkParAdapt(*this, numbers), FormatString("Player%i", ID).getData()),
1144  StdStrBuf(pSource),
1146  return false;
1147  // Denumerate pointers
1149  // Success
1150  return true;
1151 }
const char * GetData() const
C4Game Game
Definition: C4Globals.cpp:52
C4ComponentHost GameText
Definition: C4Game.h:79
const char * SSearch(const char *szString, const char *szIndex)
Definition: Standard.cpp:363
const char * GetFilePath() const
void DenumeratePointers()
Definition: C4Player.cpp:1258
StdNamingAdapt< T > mkNamingAdapt(T &&rValue, const char *szName)
Definition: StdAdaptors.h:92
const char * getData() const
Definition: StdBuf.h:442
int32_t ID
Definition: C4Player.h:87
StdParameterAdapt< T, P > mkParAdapt(T &&rObj, P &&rPar)
Definition: StdAdaptors.h:476
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270
Here is the call graph for this function:
Here is the caller graph for this function:

◆ LocalSync()

bool C4Player::LocalSync ( )

Definition at line 1530 of file C4Player.cpp.

References C4PT_Script, CrewInfoList, Game, GameJoinTime, C4ObjectInfoList::GetFirst(), GetType(), C4ObjectInfo::Next, Save(), C4Game::Time, and C4PlayerInfoCore::TotalPlayingTime.

Referenced by GetName().

1531 {
1532  // local sync not necessary for script players
1533  if (GetType() == C4PT_Script) return true;
1534  // evaluate total playing time
1537  // evaluate total playing time of all the crew
1538  for (C4ObjectInfo *pInf = CrewInfoList.GetFirst(); pInf; pInf=pInf->Next)
1539  if (pInf->InAction)
1540  {
1541  pInf->TotalPlayingTime+=(Game.Time-pInf->InActionTime);
1542  pInf->InActionTime = Game.Time;
1543  }
1544  // save player
1545  if (!Save())
1546  return false;
1547  // done, success
1548  return true;
1549 }
int32_t TotalPlayingTime
Definition: C4InfoCore.h:91
C4Game Game
Definition: C4Globals.cpp:52
C4ObjectInfo * Next
Definition: C4ObjectInfo.h:41
C4ObjectInfo * GetFirst()
C4PlayerType GetType() const
Definition: C4Player.cpp:1726
int32_t Time
Definition: C4Game.h:132
int32_t GameJoinTime
Definition: C4Player.h:96
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
bool Save()
Definition: C4Player.cpp:415
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MakeCrewMember()

bool C4Player::MakeCrewMember ( C4Object pObj,
bool  fForceInfo = true,
bool  fDoCalls = true 
)

Definition at line 1008 of file C4Player.cpp.

References C4ObjectList::Add(), Crew, CrewInfoList, C4Def::CrewMember, C4Object::Def, Definitions, StdStrBuf::getData(), C4ObjectInfoList::GetIdle(), C4ObjectList::GetLink(), C4Object::id, C4Object::Info, C4Object::lightRange, C4ObjectInfoCore::Name, C4ObjectInfoList::New(), C4Object::nInfo, C4Object::SetLightRange(), C4Object::SetName(), C4PropList::Status, and C4ObjectList::stNone.

Referenced by C4Object::AssignInfo(), GetName(), C4Object::GrabInfo(), and SetObjectCrewStatus().

1009 {
1010  C4ObjectInfo *cInf = nullptr;
1011  if (!pObj || !pObj->Def->CrewMember || !pObj->Status) return false;
1012 
1013  // only if info is not yet assigned
1014  if (!pObj->Info && fForceInfo)
1015  {
1016  // Find crew info by name
1017  if (pObj->nInfo)
1018  cInf = CrewInfoList.GetIdle(pObj->nInfo.getData());
1019 
1020  // Find crew info by id
1021  if (!cInf)
1022  while (!( cInf = CrewInfoList.GetIdle(pObj->id,::Definitions) ))
1023  if (!CrewInfoList.New(pObj->id,&::Definitions))
1024  return false;
1025 
1026  // Set object info
1027  pObj->Info = cInf;
1028  pObj->SetName(cInf->Name);
1029  }
1030 
1031  // Add to crew
1032  if (!Crew.GetLink(pObj))
1033  Crew.Add(pObj, C4ObjectList::stNone);
1034 
1035  // add light
1036  if (!pObj->lightRange)
1037  pObj->SetLightRange(C4FOW_DefLightRangeX, C4FOW_DefLightFadeoutRangeX);
1038  else
1039  pObj->UpdateLight();
1040 
1041  // controlled by the player
1042  pObj->Controller = Number;
1043 
1044  // OnJoinCrew callback
1045  if (fDoCalls)
1046  {
1047  C4AulParSet parset(Number);
1048  pObj->Call(PSF_OnJoinCrew, &parset);
1049  }
1050 
1051  return true;
1052 }
C4ID id
Definition: C4Object.h:108
virtual bool Add(C4Object *nObj, SortType eSort, C4ObjectList *pLstSorted=nullptr)
int32_t Number
Definition: C4Player.h:86
#define PSF_OnJoinCrew
Definition: C4GameScript.h:93
C4ObjectInfo * Info
Definition: C4Object.h:145
C4Def * Def
Definition: C4Object.h:143
int32_t lightRange
Definition: C4Object.h:122
char Name[C4MaxName+1]
Definition: C4InfoCore.h:37
int32_t Status
Definition: C4PropList.h:168
C4ObjectList Crew
Definition: C4Player.h:125
const char * getData() const
Definition: StdBuf.h:442
int32_t CrewMember
Definition: C4Def.h:112
StdCopyStrBuf nInfo
Definition: C4Object.h:169
void SetName(const char *NewName=nullptr) override
Definition: C4Object.cpp:1682
bool SetLightRange(int32_t iToRange, int32_t iToFadeoutRange)
Definition: C4Object.cpp:4011
void UpdateLight()
Definition: C4Object.cpp:4034
const C4ObjectLink * GetLink(const C4Object *pObj) const
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
C4DefList Definitions
Definition: C4Globals.cpp:49
C4ObjectInfo * New(C4ID n_id, C4DefList *pDefs)
C4ObjectInfo * GetIdle(C4ID c_id, C4DefList &rDefs)
int32_t Controller
Definition: C4Object.h:111
C4Value Call(C4PropertyName k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4PropList.h:110
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MarkMessageBoardQueryAnswered()

bool C4Player::MarkMessageBoardQueryAnswered ( C4Object pForObj)

Definition at line 1686 of file C4Player.cpp.

References C4MessageBoardQuery::CallbackObj, C4MessageBoardQuery::fAnswered, pMsgBoardQuery, and C4MessageBoardQuery::pNext.

Referenced by IsViewLocked(), C4ChatInputDialog::OnChatCancel(), and C4ChatInputDialog::OnChatInput().

1687 {
1688  // get matching query
1690  while (pCheck) if (pCheck->CallbackObj == pForObj && !pCheck->fAnswered) break; else pCheck = pCheck->pNext;
1691  if (!pCheck) return false;
1692  // mark it
1693  pCheck->fAnswered = true;
1694  return true;
1695 }
C4ObjectPtr CallbackObj
C4MessageBoardQuery * pNext
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
Here is the caller graph for this function:

◆ Message()

bool C4Player::Message ( const char *  szMsg)

Definition at line 929 of file C4Player.cpp.

References MessageBuf, MessageStatus, SCopy(), and SLen().

Referenced by GetName().

930 {
931  if (!szMsg) return false;
932  SCopy(szMsg,MessageBuf,256);
933  MessageStatus=SLen(szMsg)*2;
934  return true;
935 }
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:152
size_t SLen(const char *sptr)
Definition: Standard.h:74
char MessageBuf[256+1]
Definition: C4Player.h:135
int32_t MessageStatus
Definition: C4Player.h:134
Here is the call graph for this function:
Here is the caller graph for this function:

◆ NotifyOwnedObjects()

void C4Player::NotifyOwnedObjects ( )

Definition at line 1311 of file C4Player.cpp.

References C4D_StaticBack, Crew, C4AulFunc::Exec(), FindNewOwner(), C4GameObjects::InactiveObjects, C4ObjectList::IsContained(), Number, Objects, and PSF_OnOwnerRemoved.

Referenced by GetName(), and C4PlayerList::Remove().

1312 {
1313  int32_t iNewOwner = FindNewOwner();
1314  // notify objects in all object lists
1315  for (C4ObjectList *pList = &::Objects; pList; pList = ((pList == &::Objects) ? &::Objects.InactiveObjects : nullptr))
1316  {
1317  for (C4Object *cobj : *pList)
1318  {
1319  if (cobj->Status && cobj->Owner == Number)
1320  {
1321  C4AulFunc *pFn = cobj->GetFunc(PSF_OnOwnerRemoved);
1322  if (pFn)
1323  {
1324  C4AulParSet pars(iNewOwner);
1325  pFn->Exec(cobj, &pars);
1326  }
1327  else
1328  {
1329  // crew members: Those are removed later (AFTER the player has been removed, for backwards compatiblity with relaunch scripting)
1330  if (Crew.IsContained(cobj))
1331  continue;
1332  // Regular objects: Try to find a new, suitable owner from the same team
1333  // Ignore StaticBack, because this would not be compatible with many internal objects such as team account
1334  if ((cobj->Category & C4D_StaticBack) == 0)
1335  cobj->SetOwner(iNewOwner);
1336  }
1337  }
1338  }
1339  }
1340 }
#define PSF_OnOwnerRemoved
Definition: C4GameScript.h:146
int32_t Number
Definition: C4Player.h:86
bool IsContained(const C4Object *pObj) const
C4ObjectList InactiveObjects
Definition: C4GameObjects.h:43
C4Value Exec(C4PropList *p=nullptr, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4AulFunc.h:72
const int32_t C4D_StaticBack
Definition: C4Def.h:40
C4ObjectList Crew
Definition: C4Player.h:125
int32_t FindNewOwner() const
Definition: C4Player.cpp:1279
C4GameObjects Objects
Definition: C4Globals.cpp:48
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ObjectInCrew()

bool C4Player::ObjectInCrew ( C4Object tobj)

Definition at line 90 of file C4Player.cpp.

References Crew.

Referenced by GetName(), and C4MouseControl::UpdateSingleSelection().

91 {
92  if (!tobj) return false;
93  for (C4Object *cobj : Crew)
94  if (cobj==tobj) return true;
95  return false;
96 }
C4ObjectList Crew
Definition: C4Player.h:125
Here is the caller graph for this function:

◆ OnTeamSelectionFailed()

void C4Player::OnTeamSelectionFailed ( )

Definition at line 1703 of file C4Player.cpp.

References PS_TeamSelection, PS_TeamSelectionPending, and Status.

Referenced by IsViewLocked(), and ScenarioAndTeamInit().

1704 {
1705  // looks like a selected team was not available: Go back to team selection if this is not a mislead call
1708 }
int32_t Status
Definition: C4Player.h:82
Here is the caller graph for this function:

◆ PlaceReadyBase()

void C4Player::PlaceReadyBase ( int32_t &  tx,
int32_t &  ty,
C4Object **  pFirstBase 
)
protected

Definition at line 527 of file C4Player.cpp.

References C4Id2Def(), C4Game::C4S, C4Game::CreateObjectConstruction(), C4Object::Def, C4SPlrStart::EnforcePosition, C4Def::Entrance, FindConSiteSpot(), FullCon, Game, C4IDList::GetCount(), C4IDList::GetID(), C4Object::GetX(), C4Rect::Hgt, Number, C4Scenario::PlrStart, PlrStartIndex, C4SPlrStart::ReadyBase, C4Def::Shape, and C4Rect::Wdt.

Referenced by IsViewLocked(), and ScenarioInit().

528 {
529  int32_t cnt,cnt2,ctx,cty;
530  C4Def *def;
531  C4ID cid;
532  C4Object *cbase;
533  // Create ready base structures
534  for (cnt=0; (cid=Game.C4S.PlrStart[PlrStartIndex].ReadyBase.GetID(cnt)); cnt++)
535  {
536  if ((def=C4Id2Def(cid)))
537  for (cnt2=0; cnt2<Game.C4S.PlrStart[PlrStartIndex].ReadyBase.GetCount(cnt); cnt2++)
538  {
539  ctx=tx; cty=ty;
541  || FindConSiteSpot(ctx,cty,def->Shape.Wdt,def->Shape.Hgt,20))
542  if ((cbase=Game.CreateObjectConstruction(C4Id2Def(cid),nullptr,Number,ctx,cty,FullCon,true)))
543  {
544  // FirstBase
545  if (!(*pFirstBase)) if ((cbase->Def->Entrance.Wdt>0) && (cbase->Def->Entrance.Hgt>0))
546  { *pFirstBase=cbase; tx=(*pFirstBase)->GetX(); ty=(*pFirstBase)->GetY(); }
547  }
548  }
549  }
550 }
C4Object * CreateObjectConstruction(C4PropList *type, C4Object *pCreator, int32_t owner, int32_t ctx=0, int32_t bty=0, int32_t con=1, bool terrain=false)
Definition: C4Game.cpp:1102
int32_t GetX() const
Definition: C4Object.h:287
int32_t EnforcePosition
Definition: C4Scenario.h:146
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
C4Scenario C4S
Definition: C4Game.h:74
int32_t PlrStartIndex
Definition: C4Player.h:94
const int32_t FullCon
Definition: C4Constants.h:181
int32_t Wdt
Definition: C4Rect.h:30
C4ID GetID(size_t index, int32_t *ipCount=nullptr) const
Definition: C4IDList.cpp:99
C4Shape Shape
Definition: C4Def.h:104
C4Def * Def
Definition: C4Object.h:143
bool FindConSiteSpot(int32_t &rx, int32_t &ry, int32_t wdt, int32_t hgt, int32_t hrange)
Definition: C4Def.h:98
Definition: C4Id.h:25
C4SPlrStart PlrStart[C4S_MaxPlayer]
Definition: C4Scenario.h:235
C4IDList ReadyBase
Definition: C4Scenario.h:148
C4Def * C4Id2Def(C4ID id)
Definition: C4DefList.h:84
C4Rect Entrance
Definition: C4Def.h:105
int32_t Hgt
Definition: C4Rect.h:30
int32_t GetCount(size_t index) const
Definition: C4IDList.cpp:111
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PlaceReadyCrew()

void C4Player::PlaceReadyCrew ( int32_t  tx1,
int32_t  tx2,
int32_t  ty,
C4Object FirstBase 
)
protected

Definition at line 479 of file C4Player.cpp.

References C4ObjectList::Add(), C4Id2Def(), C4Game::C4S, C4Game::CreateInfoObject(), Crew, CrewInfoList, Definitions, C4SPlrStart::EnforcePosition, FindSolidGround(), Game, C4IDList::GetID(), C4ObjectInfoList::GetIdle(), C4ObjectInfoCore::id, C4ObjectInfoList::New(), Number, C4Scenario::PlrStart, PlrStartIndex, Random(), C4SPlrStart::ReadyCrew, C4Object::SetLightRange(), C4Def::Shape, C4ObjectList::stNone, and C4Rect::Wdt.

Referenced by IsViewLocked(), and ScenarioInit().

480 {
481  int32_t cnt,ctx,cty;
482  C4Object *nobj;
483  C4ObjectInfo *pInfo;
484  C4Def *pDef;
485 
486  // Place crew
487  int32_t iCount;
488  C4ID id;
489  for (cnt=0; (id=Game.C4S.PlrStart[PlrStartIndex].ReadyCrew.GetID(cnt,&iCount)); cnt++)
490  {
491  // Minimum one clonk if empty id
492  iCount = std::max<int32_t>(iCount,1);
493 
494  for (int32_t cnt2=0; cnt2<iCount; cnt2++)
495  {
496  // Select member from home crew, add new if necessary
497  while (!(pInfo=CrewInfoList.GetIdle(id,::Definitions)))
498  if (!CrewInfoList.New(id,&::Definitions))
499  break;
500  // Safety
501  if (!pInfo || !(pDef=C4Id2Def(pInfo->id))) continue;
502  // Crew placement location
503  ctx=tx1+Random(tx2-tx1); cty=ty;
505  FindSolidGround(ctx,cty,pDef->Shape.Wdt*3);
506  // Create object
507  if ((nobj=Game.CreateInfoObject(pInfo,Number,ctx,cty)))
508  {
509  // Add object to crew
511  // add visibility range
512  nobj->SetLightRange(C4FOW_DefLightRangeX, C4FOW_DefLightFadeoutRangeX);
513  // If base is present, enter base
514  if (FirstBase) { nobj->Enter(FirstBase); nobj->SetCommand(C4CMD_Exit); }
515  // OnJoinCrew callback
516  {
517  C4DebugRecOff DbgRecOff{ !DEBUGREC_RECRUITMENT };
518  C4AulParSet parset(Number);
519  nobj->Call(PSF_OnJoinCrew, &parset);
520  }
521  }
522  }
523  }
524 
525 }
bool Enter(C4Object *pTarget, bool fCalls=true, bool fCopyMotion=true, bool *pfRejectCollect=nullptr)
Definition: C4Object.cpp:1263
int32_t EnforcePosition
Definition: C4Scenario.h:146
uint32_t Random()
Definition: C4Random.cpp:43
virtual bool Add(C4Object *nObj, SortType eSort, C4ObjectList *pLstSorted=nullptr)
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
#define PSF_OnJoinCrew
Definition: C4GameScript.h:93
C4Scenario C4S
Definition: C4Game.h:74
C4IDList ReadyCrew
Definition: C4Scenario.h:147
int32_t PlrStartIndex
Definition: C4Player.h:94
int32_t Wdt
Definition: C4Rect.h:30
C4ID GetID(size_t index, int32_t *ipCount=nullptr) const
Definition: C4IDList.cpp:99
C4Shape Shape
Definition: C4Def.h:104
Definition: C4Def.h:98
void SetCommand(int32_t iCommand, C4Object *pTarget, C4Value iTx, int32_t iTy=0, C4Object *pTarget2=nullptr, bool fControl=false, C4Value iData=C4VNull, int32_t iRetries=0, C4String *szText=nullptr)
Definition: C4Object.cpp:2600
Definition: C4Id.h:25
C4ObjectList Crew
Definition: C4Player.h:125
C4SPlrStart PlrStart[C4S_MaxPlayer]
Definition: C4Scenario.h:235
C4Def * C4Id2Def(C4ID id)
Definition: C4DefList.h:84
bool SetLightRange(int32_t iToRange, int32_t iToFadeoutRange)
Definition: C4Object.cpp:4011
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
C4DefList Definitions
Definition: C4Globals.cpp:49
C4ObjectInfo * New(C4ID n_id, C4DefList *pDefs)
bool FindSolidGround(int32_t &rx, int32_t &ry, int32_t width)
C4ObjectInfo * GetIdle(C4ID c_id, C4DefList &rDefs)
constexpr bool DEBUGREC_RECRUITMENT
Definition: C4Include.h:36
C4Object * CreateInfoObject(C4ObjectInfo *cinf, int32_t owner, int32_t tx=50, int32_t ty=50)
Definition: C4Game.cpp:1086
C4Value Call(C4PropertyName k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4PropList.h:110
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PlaceReadyMaterial()

void C4Player::PlaceReadyMaterial ( int32_t  tx1,
int32_t  tx2,
int32_t  ty,
C4Object FirstBase 
)
protected

Definition at line 573 of file C4Player.cpp.

References C4Id2Def(), C4Game::C4S, C4Object::CreateContentsByList(), C4Game::CreateObject(), C4SPlrStart::EnforcePosition, FindSolidGround(), Game, C4IDList::GetCount(), C4IDList::GetID(), Number, C4Scenario::PlrStart, PlrStartIndex, Random(), C4SPlrStart::ReadyMaterial, C4Def::Shape, and C4Rect::Wdt.

Referenced by IsViewLocked(), and ScenarioInit().

574 {
575  int32_t cnt,cnt2,ctx,cty;
576  C4Def *def; C4ID cid;
577 
578  // In base
579  if (FirstBase)
580  {
582  }
583 
584  // Outside
585  else
586  {
587  for (cnt=0; (cid=Game.C4S.PlrStart[PlrStartIndex].ReadyMaterial.GetID(cnt)); cnt++)
588  {
589  if ((def=C4Id2Def(cid)))
590  for (cnt2=0; cnt2<Game.C4S.PlrStart[PlrStartIndex].ReadyMaterial.GetCount(cnt); cnt2++)
591  {
592  ctx=tx1+Random(tx2-tx1); cty=ty;
594  FindSolidGround(ctx,cty,def->Shape.Wdt);
595  Game.CreateObject(cid,nullptr,Number,ctx,cty);
596  }
597  }
598  }
599 }
int32_t EnforcePosition
Definition: C4Scenario.h:146
uint32_t Random()
Definition: C4Random.cpp:43
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
C4Scenario C4S
Definition: C4Game.h:74
bool CreateContentsByList(C4IDList &idlist)
Definition: C4Object.cpp:1447
int32_t PlrStartIndex
Definition: C4Player.h:94
int32_t Wdt
Definition: C4Rect.h:30
C4ID GetID(size_t index, int32_t *ipCount=nullptr) const
Definition: C4IDList.cpp:99
C4Shape Shape
Definition: C4Def.h:104
Definition: C4Def.h:98
Definition: C4Id.h:25
C4SPlrStart PlrStart[C4S_MaxPlayer]
Definition: C4Scenario.h:235
C4Def * C4Id2Def(C4ID id)
Definition: C4DefList.h:84
C4IDList ReadyMaterial
Definition: C4Scenario.h:150
int32_t GetCount(size_t index) const
Definition: C4IDList.cpp:111
bool FindSolidGround(int32_t &rx, int32_t &ry, int32_t width)
C4Object * CreateObject(C4PropList *type, C4Object *pCreator, int32_t owner=NO_OWNER, int32_t x=50, int32_t y=50, int32_t r=0, bool grow_from_center=false, C4Real xdir=Fix0, C4Real ydir=Fix0, C4Real rdir=Fix0, int32_t iController=NO_OWNER)
Definition: C4Game.cpp:1072
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PlaceReadyVehic()

void C4Player::PlaceReadyVehic ( int32_t  tx1,
int32_t  tx2,
int32_t  ty,
C4Object FirstBase 
)
protected

Definition at line 552 of file C4Player.cpp.

References C4CMD_Exit, C4Id2Def(), C4Game::C4S, C4Game::CreateObject(), C4SPlrStart::EnforcePosition, C4Object::Enter(), FindLevelGround(), Game, C4IDList::GetCount(), C4IDList::GetID(), Number, C4Scenario::PlrStart, PlrStartIndex, Random(), C4SPlrStart::ReadyVehic, C4Object::SetCommand(), C4Def::Shape, and C4Rect::Wdt.

Referenced by IsViewLocked(), and ScenarioInit().

553 {
554  int32_t cnt,cnt2,ctx,cty;
555  C4Def *def; C4ID cid; C4Object *cobj;
556  for (cnt=0; (cid=Game.C4S.PlrStart[PlrStartIndex].ReadyVehic.GetID(cnt)); cnt++)
557  {
558  if ((def=C4Id2Def(cid)))
559  for (cnt2=0; cnt2<Game.C4S.PlrStart[PlrStartIndex].ReadyVehic.GetCount(cnt); cnt2++)
560  {
561  ctx=tx1+Random(tx2-tx1); cty=ty;
563  FindLevelGround(ctx,cty,def->Shape.Wdt,6);
564  if ((cobj=Game.CreateObject(cid,nullptr,Number,ctx,cty)))
565  {
566  if (FirstBase) // First base overrides target location
567  { cobj->Enter(FirstBase); cobj->SetCommand(C4CMD_Exit); }
568  }
569  }
570  }
571 }
bool Enter(C4Object *pTarget, bool fCalls=true, bool fCopyMotion=true, bool *pfRejectCollect=nullptr)
Definition: C4Object.cpp:1263
int32_t EnforcePosition
Definition: C4Scenario.h:146
uint32_t Random()
Definition: C4Random.cpp:43
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
C4Scenario C4S
Definition: C4Game.h:74
int32_t PlrStartIndex
Definition: C4Player.h:94
int32_t Wdt
Definition: C4Rect.h:30
C4ID GetID(size_t index, int32_t *ipCount=nullptr) const
Definition: C4IDList.cpp:99
C4Shape Shape
Definition: C4Def.h:104
Definition: C4Def.h:98
void SetCommand(int32_t iCommand, C4Object *pTarget, C4Value iTx, int32_t iTy=0, C4Object *pTarget2=nullptr, bool fControl=false, C4Value iData=C4VNull, int32_t iRetries=0, C4String *szText=nullptr)
Definition: C4Object.cpp:2600
Definition: C4Id.h:25
C4SPlrStart PlrStart[C4S_MaxPlayer]
Definition: C4Scenario.h:235
C4Def * C4Id2Def(C4ID id)
Definition: C4DefList.h:84
C4IDList ReadyVehic
Definition: C4Scenario.h:149
int32_t GetCount(size_t index) const
Definition: C4IDList.cpp:111
bool FindLevelGround(int32_t &rx, int32_t &ry, int32_t width, int32_t hrange)
C4Object * CreateObject(C4PropList *type, C4Object *pCreator, int32_t owner=NO_OWNER, int32_t x=50, int32_t y=50, int32_t r=0, bool grow_from_center=false, C4Real xdir=Fix0, C4Real ydir=Fix0, C4Real rdir=Fix0, int32_t iController=NO_OWNER)
Definition: C4Game.cpp:1072
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Promote()

void C4PlayerInfoCore::Promote ( int32_t  iRank,
C4RankSystem rRanks 
)
inherited

Definition at line 118 of file C4InfoCore.cpp.

References C4MaxName, StdStrBuf::getData(), C4RankSystem::GetRankName(), C4PlayerInfoCore::Rank, C4PlayerInfoCore::RankName, and SCopy().

Referenced by C4PlayerInfoCore::CheckPromotion().

119 {
120  Rank=iRank;
122 }
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:152
StdStrBuf GetRankName(int iRank, bool fReturnLastIfOver)
char RankName[C4MaxName+1]
Definition: C4InfoCore.h:88
const unsigned int C4MaxName
const char * getData() const
Definition: StdBuf.h:442
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RemoveCrewObjects()

void C4Player::RemoveCrewObjects ( )

Definition at line 1271 of file C4Player.cpp.

References C4Object::AssignRemoval(), Crew, and C4ObjectList::GetObject().

Referenced by GetName(), and C4PlayerList::Remove().

1272 {
1273  C4Object *pCrew;
1274 
1275  // Remove all crew objects
1276  while ((pCrew = Crew.GetObject())) pCrew->AssignRemoval(true);
1277 }
C4Object * GetObject(int Index=0) const
void AssignRemoval(bool fExitContents=false)
Definition: C4Object.cpp:255
C4ObjectList Crew
Definition: C4Player.h:125
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RemoveMessageBoardQuery()

bool C4Player::RemoveMessageBoardQuery ( C4Object pForObj)

Definition at line 1673 of file C4Player.cpp.

References pMsgBoardQuery, and C4MessageBoardQuery::pNext.

Referenced by CallMessageBoard(), ClearPointers(), C4Control::CompileFunc(), and IsViewLocked().

1674 {
1675  // get matching query
1676  C4MessageBoardQuery **ppCheck = &pMsgBoardQuery, *pFound;
1677  while (*ppCheck) if ((*ppCheck)->CallbackObj == pForObj) break; else ppCheck = &((*ppCheck)->pNext);
1678  pFound = *ppCheck;
1679  if (!pFound) return false;
1680  // remove it
1681  *ppCheck = (*ppCheck)->pNext;
1682  delete pFound;
1683  return true;
1684 }
C4MessageBoardQuery * pNext
class C4MessageBoardQuery * pMsgBoardQuery
Definition: C4Player.h:136
Here is the caller graph for this function:

◆ ResetCursorView()

void C4Player::ResetCursorView ( bool  immediate_position = false)

Definition at line 780 of file C4Player.cpp.

References C4PVM_Cursor, Cursor, SetViewMode(), and ViewCursor.

Referenced by AdjustCursorCommand(), and GetName().

781 {
782  // reset view to cursor if any cursor exists
783  if (!ViewCursor && !Cursor) return;
784  SetViewMode(C4PVM_Cursor, nullptr, immediate_position);
785 }
C4ObjectPtr Cursor
Definition: C4Player.h:130
void SetViewMode(int32_t iMode, C4Object *pTarget=nullptr, bool immediate_position=false)
Definition: C4Player.cpp:767
const int32_t C4PVM_Cursor
Definition: C4Player.h:31
C4ObjectPtr ViewCursor
Definition: C4Player.h:130
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Save() [1/3]

bool C4PlayerInfoCore::Save ( C4Group hGroup)
inherited

Definition at line 107 of file C4InfoCore.cpp.

References C4Group::Add(), StdStrBuf::Append(), C4CFN_PlayerInfoCore, C4Group::Delete(), DirSep, StdStrBuf::getData(), and C4Group::GetFullName().

Referenced by C4StartupPlrSelDlg::PlayerListItem::MoveFilename(), C4StartupPlrPropertiesDlg::OnClosed(), Save(), Strip(), and C4StartupPlrSelDlg::PlayerListItem::UpdateCore().

108 {
109  StdStrBuf Source, Name = hGroup.GetFullName(); Name.Append(DirSep C4CFN_PlayerInfoCore);
110  if (!DecompileToBuf_Log<StdCompilerINIWrite>(*this, &Source, Name.getData()))
111  return false;
112  if (!hGroup.Add(C4CFN_PlayerInfoCore,Source,false,true))
113  return false;
114  hGroup.Delete("C4Player.ocb");
115  return true;
116 }
bool Delete(const char *szFiles, bool fRecursive=false)
Definition: C4Group.cpp:1334
StdStrBuf GetFullName() const
Definition: C4Group.cpp:2078
#define C4CFN_PlayerInfoCore
Definition: C4Components.h:45
void Append(const char *pnData, size_t iChars)
Definition: StdBuf.h:519
const char * getData() const
Definition: StdBuf.h:442
bool Add(const char *szFile, const char *szAddAs)
Definition: C4Group.cpp:1316
#define DirSep
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Save() [2/3]

bool C4Player::Save ( )

Definition at line 415 of file C4Player.cpp.

References _MAX_PATH, C4Config::AtRelativePath(), C4Config::AtTempPath(), C4CFN_TempPlayer, C4Group_CopyItem(), C4Group_MoveItem(), C4PT_Script, C4Group::Close(), Config, Control, CrewInfoList, Definitions, C4Network2Res::Derive(), EraseItem(), Filename, C4Network2ResList::getRefRes(), GetType(), GraphicsSystem, ItemExists(), LoadResStr(), LocalControl, LogF(), MakeTempFilename(), C4GraphicsSystem::MessageBoard, Network, C4Group::Open(), C4Network2::ResList, SCopy(), and C4ObjectInfoList::Strip().

Referenced by GetName(), LocalSync(), and C4PlayerList::Retire().

416 {
417  C4Group hGroup;
418  // Regular player saving need not be done for script players
419  if (GetType() == C4PT_Script) return false;
420  // Log
421  LogF(LoadResStr("IDS_PRC_SAVEPLR"), Config.AtRelativePath(Filename));
422  ::GraphicsSystem.MessageBoard->EnsureLastMessage();
423  // copy player to save somewhere else
424  char szPath[_MAX_PATH + 1];
426  MakeTempFilename(szPath);
427  // For local players, we save over the old player file, as there might
428  // be all kinds of non-essential stuff in it. For non-local players, we
429  // just re-create it every time (it's temporary anyway).
430  if (LocalControl)
431  {
432  // But make sure to copy it first so full hard (flgr stupid) disks
433  // won't corrupt any player files...
434  C4Group_CopyItem(Filename, szPath);
435  }
436  else
437  {
438  // For non-local players, we can actually use the loaded definition
439  // list to strip out all non-existant definitions. This is only valid
440  // because we know the file to be temporary.
442  }
443  // Open group
444  if (!hGroup.Open(szPath,true))
445  return false;
446  // Save
447  if (!Save(hGroup, false, !LocalControl))
448  { hGroup.Close(); return false; }
449  // Close group
450  if (!hGroup.Close()) return false;
451  // resource
453  pDRes = nullptr;
454  bool fOfficial = pRes && ::Control.isCtrlHost();
455  if (pRes) pDRes = pRes->Derive();
456  // move back
458  if (!C4Group_MoveItem(szPath, Filename)) return false;
459  // finish update
460  if (pDRes && fOfficial) pDRes->FinishDerive();
461  // Success
462  return true;
463 }
C4Config Config
Definition: C4Config.cpp:833
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:152
char Filename[_MAX_PATH+1]
Definition: C4Player.h:80
C4PlayerControl Control
Definition: C4Player.h:129
#define _MAX_PATH
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
C4Network2 Network
Definition: C4Globals.cpp:53
C4GraphicsSystem GraphicsSystem
Definition: C4Globals.cpp:51
bool Open(const char *szGroupName, bool fCreate=false)
Definition: C4Group.cpp:514
bool C4Group_CopyItem(const char *szSource, const char *szTarget1, bool fNoSort, bool fResetAttributes)
Definition: C4Group.cpp:100
C4PlayerType GetType() const
Definition: C4Player.cpp:1726
C4Network2Res::Ref Derive()
bool Close()
Definition: C4Group.cpp:755
C4Network2Res::Ref getRefRes(int32_t iResID)
C4Network2ResList ResList
Definition: C4Network2.h:113
bool C4Group_MoveItem(const char *szSource, const char *szTarget1, bool fNoSort)
Definition: C4Group.cpp:144
#define C4CFN_TempPlayer
Definition: C4Components.h:162
std::unique_ptr< C4MessageBoard > MessageBoard
bool EraseItem(const char *szItemName)
Definition: StdFile.cpp:809
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
C4DefList Definitions
Definition: C4Globals.cpp:49
bool Save()
Definition: C4Player.cpp:415
const char * AtTempPath(const char *szFilename)
Definition: C4Config.cpp:540
const char * AtRelativePath(const char *szFilename)
Definition: C4Config.cpp:656
void MakeTempFilename(char *szFilename)
Definition: StdFile.cpp:323
void Strip(C4DefList &rDefs)
bool ItemExists(const char *szItemName)
Definition: StdFile.h:75
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:260
bool LocalControl
Definition: C4Player.h:99
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Save() [3/3]

bool C4Player::Save ( C4Group hGroup,
bool  fSavegame,
bool  fStoreTiny 
)

Definition at line 465 of file C4Player.cpp.

References C4FLS_Player, C4Group::Close(), CrewInfoList, Definitions, C4ObjectInfoList::Save(), C4PlayerInfoCore::Save(), and C4Group::Sort().

466 {
467  // Save core
468  if (!C4PlayerInfoCore::Save(hGroup))
469  return false;
470  // Save crew
471  C4DefList *pDefs = &::Definitions;
472  if (!CrewInfoList.Save(hGroup, fSavegame, fStoreTiny, pDefs))
473  { hGroup.Close(); return false; }
474  // Sort
475  hGroup.Sort(C4FLS_Player);
476  return true;
477 }
bool Save(C4Group &hGroup)
Definition: C4InfoCore.cpp:107
bool Close()
Definition: C4Group.cpp:755
bool Save(C4Group &hGroup, bool fSavegame, bool fStoreTiny, C4DefList *pDefs)
C4ObjectInfoList CrewInfoList
Definition: C4Player.h:124
#define C4FLS_Player
Definition: C4Components.h:194
C4DefList Definitions
Definition: C4Globals.cpp:49
bool Sort(const char *szSortList)
Definition: C4Group.cpp:1963
Here is the call graph for this function:

◆ ScenarioAndTeamInit()

bool C4Player::ScenarioAndTeamInit ( int32_t  idTeam)

Definition at line 118 of file C4Player.cpp.

References C4Team::AddPlayer(), FinalInit(), Game, C4TeamList::GetGenerateTeamByID(), C4Team::GetID(), C4PlayerInfo::GetID(), GetInfo(), C4TeamList::GetTeamByID(), C4PlayerInfo::GetType(), C4TeamList::IsAutoGenerateTeams(), C4TeamList::IsJoin2TeamAllowed(), C4Game::OnPlayerJoinFinished(), OnTeamSelectionFailed(), C4Team::RemovePlayerByID(), ScenarioInit(), Team, TEAMID_New, and C4Game::Teams.

Referenced by GetName().

119 {
120  C4PlayerInfo *pInfo = GetInfo();
121  if (!pInfo) return false;
122  C4Team *pTeam;
123  if (idTeam == TEAMID_New)
124  {
125  // creation of a new team only if allowed by scenario
127  pTeam = nullptr;
128  else
129  {
130  if ((pTeam = Game.Teams.GetGenerateTeamByID(idTeam))) idTeam = pTeam->GetID();
131  }
132  }
133  else
134  {
135  // uage of an existing team
136  pTeam = Game.Teams.GetTeamByID(idTeam);
137  }
138  C4Team *pPrevTeam = Game.Teams.GetTeamByID(Team);
139  // check if join to team is possible; e.g. not too many players
140  if (pPrevTeam != pTeam && idTeam)
141  {
142  if (!Game.Teams.IsJoin2TeamAllowed(idTeam, pInfo->GetType()))
143  {
144  pTeam = nullptr;
145  }
146  }
147  if (!pTeam && idTeam)
148  {
150  return false;
151  }
152  // team selection OK; execute it!
153  if (pPrevTeam) pPrevTeam->RemovePlayerByID(pInfo->GetID());
154  if (pTeam) pTeam->AddPlayer(*pInfo, true);
155  if (!ScenarioInit()) return false;
156  if (!FinalInit(false)) return false;
157  // perform any pending InitializePlayers() callback
159  return true;
160 }
class C4PlayerInfo * GetInfo()
Definition: C4Player.cpp:1551
int32_t Team
Definition: C4Player.h:88
C4Game Game
Definition: C4Globals.cpp:52
Definition: C4Teams.h:30
void OnPlayerJoinFinished()
Definition: C4Game.cpp:3083
C4Team * GetGenerateTeamByID(int32_t iID)
Definition: C4Teams.cpp:390
C4TeamList & Teams
Definition: C4Game.h:70
bool FinalInit(bool fInitialScore)
Definition: C4Player.cpp:699
void OnTeamSelectionFailed()
Definition: C4Player.cpp:1703
C4PlayerType GetType() const
Definition: C4PlayerInfo.h:152
void AddPlayer(class C4PlayerInfo &rInfo, bool fAdjustPlayer)
Definition: C4Teams.cpp:52
int32_t GetID() const
Definition: C4Teams.h:66
const int32_t TEAMID_New
Definition: C4Teams.h:27
bool ScenarioInit()
Definition: C4Player.cpp:601
void RemovePlayerByID(int32_t iID)
Definition: C4Teams.cpp:94
bool IsAutoGenerateTeams() const
Definition: C4Teams.h:172
bool IsJoin2TeamAllowed(int32_t idTeam, C4PlayerType plrType)
Definition: C4Teams.cpp:534
int32_t GetID() const
Definition: C4PlayerInfo.h:194
C4Team * GetTeamByID(int32_t iID) const
Definition: C4Teams.cpp:383
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ScenarioInit()

bool C4Player::ScenarioInit ( )

Definition at line 601 of file C4Player.cpp.

References BaseMaterial, C4SPlrStart::BaseMaterial, BaseProduction, C4SPlrStart::BaseProduction, C4SPlrStart::BuildKnowledge, C4Id2Def(), C4P_MaxPosition, C4Game::C4S, C4S_MaxPlayer, Clamp(), ColorDw, C4IDList::ConsolidateValids(), Definitions, C4SPlrStart::EnforcePosition, C4SVal::Evaluate(), FindConSiteSpot(), FindSolidGround(), Game, C4PlayerInfo::GetColor(), C4Landscape::GetHeight(), GetInfo(), GetName(), C4PlayerInfoList::GetPlayerInfoByIndex(), C4Team::GetPlrStartIndex(), C4PlayerInfo::GetTeam(), C4TeamList::GetTeamByID(), C4Landscape::GetWidth(), C4Game::GRBroadcast(), Knowledge, C4Scenario::Landscape, Landscape, LogF(), C4SLandscape::MapZoom, Number, PlaceReadyBase(), PlaceReadyCrew(), PlaceReadyMaterial(), PlaceReadyVehic(), C4Game::PlayerInfos, Players, C4Scenario::PlrStart, PlrStartIndex, Position, C4SPlrStart::Position, C4PlayerList::PositionTaken(), PS_Normal, PSF_InitializePlayer, Random(), SetTeamHostility(), C4Game::StartupPlayerCount, Status, Team, C4Game::Teams, Wealth, and C4SPlrStart::Wealth.

Referenced by GetName(), Init(), C4Game::InitGameFinal(), and ScenarioAndTeamInit().

602 {
603  int32_t ptx,pty;
604 
605  // player start index by team, if specified. Otherwise by player number
607  C4Team *pTeam; int32_t i;
608  if (Team && (pTeam = Game.Teams.GetTeamByID(Team))) if ((i=pTeam->GetPlrStartIndex())) PlrStartIndex=i-1;
609 
610  C4PlayerInfo *pInfo = GetInfo();
611  if (!pInfo) { assert(false); LogF("Internal error: ScenarioInit for ghost player %s!", GetName()); return false; }
612 
613  // set color by player info class
614  // re-setting, because runtime team choice may have altered color
615  ColorDw = pInfo->GetColor();
616 
617  // any team selection is over now
618  Status = PS_Normal;
619 
620  // Wealth, home base materials, abilities
628 
629  // Starting position
632 
633  // Zoomed position
634  if (ptx>-1) ptx = Clamp<int32_t>( ptx * Game.C4S.Landscape.MapZoom.Evaluate(), 0, ::Landscape.GetWidth()-1 );
635  if (pty>-1) pty = Clamp<int32_t>( pty * Game.C4S.Landscape.MapZoom.Evaluate(), 0, ::Landscape.GetHeight()-1 );
636 
637  // Standard position (PrefPosition)
638  if (ptx<0)
639  if (Game.StartupPlayerCount>=2)
640  {
641  int32_t iMaxPos=Game.StartupPlayerCount;
642  // Try to initialize PrefPosition using teams. This should put players of a team next to each other.
643  int PrefPosition = 0;
644  C4PlayerInfo *plr;
645  for (int i = 0; (plr = Game.PlayerInfos.GetPlayerInfoByIndex(i)) != nullptr; i++)
646  {
647  if (plr->GetTeam() < Team)
648  PrefPosition++;
649  }
650  // Map preferred position to available positions
651  int32_t iStartPos=Clamp(PrefPosition*iMaxPos/C4P_MaxPosition,0,iMaxPos-1);
652  int32_t iPosition=iStartPos;
653  // Distribute according to availability
654  while (::Players.PositionTaken(iPosition))
655  {
656  ++iPosition;
657  iPosition %= iMaxPos;
658  if (iPosition == iStartPos)
659  break;
660  }
661  Position=iPosition;
662  // Set x position
663  ptx=Clamp(16+Position*(::Landscape.GetWidth()-32)/(iMaxPos-1),0,::Landscape.GetWidth()-16);
664  }
665 
666  // All-random position
667  if (ptx<0) ptx=16+Random(::Landscape.GetWidth()-32);
668  if (pty<0) pty=16+Random(::Landscape.GetHeight()-32);
669 
670  // Place to solid ground
672  {
673  // Use nearest above-ground...
674  FindSolidGround(ptx,pty,30);
675  // Might have hit a small lake, or similar: Seach a real site spot from here
676  FindConSiteSpot(ptx, pty, 30, 50, 400);
677  }
678 
679  // Place Readies
680  C4Object *FirstBase = nullptr;
681  PlaceReadyBase(ptx,pty,&FirstBase);
682  PlaceReadyMaterial(ptx-10,ptx+10,pty,FirstBase);
683  PlaceReadyVehic(ptx-30,ptx+30,pty,FirstBase);
684  PlaceReadyCrew(ptx-30,ptx+30,pty,FirstBase);
685 
686  // set initial hostility by team info
687  if (Team) SetTeamHostility();
688 
689  // Scenario script initialization
691  ptx,
692  pty,
693  FirstBase,
694  Team,
695  C4Id2Def(GetInfo()->GetScriptPlayerExtraID())));
696  return true;
697 }
class C4PlayerInfo * GetInfo()
Definition: C4Player.cpp:1551
C4IDList BuildKnowledge
Definition: C4Scenario.h:151
bool PositionTaken(int iPosition) const
bool ConsolidateValids(C4DefList &rDefs, int32_t dwCategory=0)
Definition: C4IDList.cpp:367
int32_t GetTeam() const
Definition: C4PlayerInfo.h:195
int32_t EnforcePosition
Definition: C4Scenario.h:146
int32_t Team
Definition: C4Player.h:88
uint32_t Random()
Definition: C4Random.cpp:43
C4Game Game
Definition: C4Globals.cpp:52
int32_t Number
Definition: C4Player.h:86
C4Scenario C4S
Definition: C4Game.h:74
C4IDList BaseProduction
Definition: C4Scenario.h:153
Definition: C4Teams.h:30
C4SLandscape Landscape
Definition: C4Scenario.h:236
const int C4S_MaxPlayer
Definition: C4Constants.h:53
int32_t PlrStartIndex
Definition: C4Player.h:94
int32_t Position
Definition: C4Player.h:93
C4TeamList & Teams
Definition: C4Game.h:70
uint32_t GetColor() const
Definition: C4PlayerInfo.h:153
T Clamp(T bval, T lbound, T rbound)
Definition: Standard.h:44
uint32_t ColorDw
Definition: C4Player.h:89
C4PlayerInfo * GetPlayerInfoByIndex(int32_t index) const
C4SVal MapZoom
Definition: C4Scenario.h:178
bool FindConSiteSpot(int32_t &rx, int32_t &ry, int32_t wdt, int32_t hgt, int32_t hrange)
const char * GetName() const
Definition: C4Player.h:151
int32_t Status
Definition: C4Player.h:82
C4IDList Knowledge
Definition: C4Player.h:127
C4SVal Wealth
Definition: C4Scenario.h:144
C4Landscape Landscape
C4PlayerList Players
int32_t GetPlrStartIndex() const
Definition: C4Teams.h:69
void PlaceReadyCrew(int32_t tx1, int32_t tx2, int32_t ty, C4Object *FirstBase)
Definition: C4Player.cpp:479
C4SPlrStart PlrStart[C4S_MaxPlayer]
Definition: C4Scenario.h:235
void PlaceReadyBase(int32_t &tx, int32_t &ty, C4Object **pFirstBase)
Definition: C4Player.cpp:527
int32_t Wealth
Definition: C4Player.h:115
int32_t GetHeight() const
int32_t StartupPlayerCount
Definition: C4Game.h:109
C4PlayerInfoList & PlayerInfos
Definition: C4Game.h:71
C4Def * C4Id2Def(C4ID id)
Definition: C4DefList.h:84
void SetTeamHostility()
Definition: C4Player.cpp:915
int32_t GetWidth() const
C4Value GRBroadcast(const char *szFunction, C4AulParSet *pPars=nullptr, bool fPassError=false, bool fRejectTest=false)
Definition: C4Game.cpp:3853
const int C4P_MaxPosition
Definition: C4Constants.h:63
int32_t Position[2]
Definition: C4Scenario.h:145
void PlaceReadyVehic(int32_t tx1, int32_t tx2, int32_t ty, C4Object *FirstBase)
Definition: C4Player.cpp:552
C4DefList Definitions
Definition: C4Globals.cpp:49
#define PSF_InitializePlayer
Definition: C4GameScript.h:40
C4IDList BaseMaterial
Definition: C4Player.h:120
bool FindSolidGround(int32_t &rx, int32_t &ry, int32_t width)
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:260
int32_t Evaluate()
Definition: C4Scenario.cpp:50
void PlaceReadyMaterial(int32_t tx1, int32_t tx2, int32_t ty, C4Object *FirstBase)
Definition: C4Player.cpp:573
C4IDList BaseProduction
Definition: C4Player.h:121
C4IDList BaseMaterial
Definition: C4Scenario.h:152
C4Team * GetTeamByID(int32_t iID) const
Definition: C4Teams.cpp:383
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ScrollView()

void C4Player::ScrollView ( float  iX,
float  iY,
float  ViewWdt,
float  ViewHgt 
)

Definition at line 1364 of file C4Player.cpp.

References Application, C4PVM_Scrolling, C4ViewportScrollBorder, ftofix(), C4Landscape::GetHeight(), C4Landscape::GetWidth(), C4Application::isEditor, Landscape, SetViewMode(), ViewLock, ViewX, and ViewY.

Referenced by GetName(), and C4MouseControl::ScrollView().

1365 {
1366  if (ViewLock) return;
1368  float ViewportScrollBorder = Application.isEditor ? 0 : C4ViewportScrollBorder;
1369  ViewX = Clamp<C4Real>( ViewX+ftofix(iX), ftofix(ViewWdt/2.0f-ViewportScrollBorder), ftofix(::Landscape.GetWidth()+ViewportScrollBorder-ViewWdt/2.0f) );
1370  ViewY = Clamp<C4Real>( ViewY+ftofix(iY), ftofix(ViewHgt/2.0f-ViewportScrollBorder), ftofix(::Landscape.GetHeight()+ViewportScrollBorder-ViewHgt/2.0f) );
1371 }
const int32_t C4PVM_Scrolling
Definition: C4Player.h:33
bool ViewLock
Definition: C4Player.h:107
const int C4ViewportScrollBorder
Definition: C4Constants.h:65
C4Landscape Landscape
void SetViewMode(int32_t iMode, C4Object *pTarget=nullptr, bool immediate_position=false)
Definition: C4Player.cpp:767
C4Fixed ftofix(float x)
Definition: C4Real.h:258
int32_t GetHeight() const
C4Real ViewY
Definition: C4Player.h:106
int32_t GetWidth() const
C4Application Application
Definition: C4Globals.cpp:44
C4Real ViewX
Definition: C4Player.h:106
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetCursor()

void C4Player::SetCursor ( C4Object pObj,
bool  fSelectArrow 
)

Definition at line 1348 of file C4Player.cpp.

References C4Object::CrewDisabled, Cursor, CursorFlash, C4Object::DoSelect(), and C4Object::UnSelect().

Referenced by AdjustCursorCommand(), and GetName().

1349 {
1350  // check disabled
1351  if (pObj) if (pObj->CrewDisabled) return;
1352  bool fChanged = pObj != Cursor;
1353  C4Object *pPrev = Cursor;
1354  // Set cursor
1355  Cursor=pObj;
1356  // unselect previous
1357  if (pPrev && fChanged) pPrev->UnSelect();
1358  // Select object
1359  if (fChanged && Cursor) { Cursor->DoSelect(); }
1360  // View flash
1361  if (fSelectArrow) CursorFlash=30;
1362 }
bool DoSelect()
Definition: C4Object.cpp:4316
C4ObjectPtr Cursor
Definition: C4Player.h:130
int32_t CursorFlash
Definition: C4Player.h:131
bool CrewDisabled
Definition: C4Object.h:164
void UnSelect()
Definition: C4Object.cpp:4326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetFoW()

void C4Player::SetFoW ( bool  fEnable)

Definition at line 723 of file C4Player.cpp.

References fFogOfWar.

Referenced by GetName().

724 {
725  // set flag
726  fFogOfWar = fEnable;
727 }
bool fFogOfWar
Definition: C4Player.h:111
Here is the caller graph for this function:

◆ SetHostility()

bool C4Player::SetHostility ( int32_t  iOpponent,
int32_t  iHostility,
bool  fSilent = false 
)

Definition at line 838 of file C4Player.cpp.

References FormatString(), C4Game::FrameCounter, Game, C4PlayerList::Get(), GetName(), Hostility, LoadResStr(), Log(), Players, and StartSoundEffect().

Referenced by GetName(), and SetTeamHostility().

839 {
840  assert(hostile == 0 || hostile == 1);
841  // Check opponent valid
842  C4Player *opponent = ::Players.Get(iOpponent);
843  if (!opponent || opponent == this)
844  return false;
845  // Set hostility
846  if (hostile)
847  Hostility.insert(opponent);
848  else
849  Hostility.erase(opponent);
850  // no announce in first frame, or if specified
851  if (!Game.FrameCounter || fSilent) return true;
852  // Announce
853  StartSoundEffect("UI::Trumpet");
854  Log(FormatString(LoadResStr(hostile ? "IDS_PLR_HOSTILITY" : "IDS_PLR_NOHOSTILITY"),
855  GetName(),opponent->GetName()).getData());
856  // Success
857  return true;
858 }
C4Game Game
Definition: C4Globals.cpp:52
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
C4SoundInstance * StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier)
int32_t FrameCounter
Definition: C4Game.h:129
C4Player * Get(int iPlayer) const
const char * GetName() const
Definition: C4Player.h:151
C4PlayerList Players
bool Log(const char *szMessage)
Definition: C4Log.cpp:202
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270
HostilitySet Hostility
Definition: C4Player.h:118
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetKnowledge()

bool C4Player::SetKnowledge ( C4ID  id,
bool  fRemove 
)

Definition at line 752 of file C4Player.cpp.

References C4Id2Def(), C4IDList::DeleteItem(), C4IDList::GetIndex(), Knowledge, and C4IDList::SetIDCount().

Referenced by GetName().

753 {
754  if (fRemove)
755  {
756  long iIndex = Knowledge.GetIndex(id);
757  if (iIndex<0) return false;
758  return Knowledge.DeleteItem(iIndex);
759  }
760  else
761  {
762  if (!C4Id2Def(id)) return false;
763  return Knowledge.SetIDCount(id, 1, true);
764  }
765 }
C4IDList Knowledge
Definition: C4Player.h:127
C4Def * C4Id2Def(C4ID id)
Definition: C4DefList.h:84
bool SetIDCount(C4ID c_id, int32_t iCount, bool fAddNewID=false)
Definition: stub-handle.cpp:68
bool DeleteItem(size_t iIndex)
Definition: C4IDList.cpp:423
int32_t GetIndex(C4ID c_id) const
Definition: C4IDList.cpp:202
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetMaxZoom()

void C4Player::SetMaxZoom ( C4Real  zoom,
bool  no_increase,
bool  no_decrease 
)

Definition at line 1829 of file C4Player.cpp.

References ZoomLimitMaxVal, and ZoomLimitsToViewports().

Referenced by IsViewLocked().

1830 {
1831  AdjustZoomParameter(&ZoomLimitMaxVal, zoom, no_increase, no_decrease);
1833 }
void ZoomLimitsToViewports()
Definition: C4Player.cpp:1851
C4Real ZoomLimitMaxVal
Definition: C4Player.h:113
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetMaxZoomByViewRange()

void C4Player::SetMaxZoomByViewRange ( int32_t  range_wdt,
int32_t  range_hgt,
bool  no_increase,
bool  no_decrease 
)

Definition at line 1810 of file C4Player.cpp.

References ZoomLimitMaxHgt, ZoomLimitMaxWdt, and ZoomLimitsToViewports().

Referenced by IsViewLocked().

1811 {
1812  AdjustZoomParameter(&ZoomLimitMaxWdt, range_wdt, no_increase, no_decrease);
1813  AdjustZoomParameter(&ZoomLimitMaxHgt, range_hgt, no_increase, no_decrease);
1815 }
void ZoomLimitsToViewports()
Definition: C4Player.cpp:1851
int32_t ZoomLimitMaxWdt
Definition: C4Player.h:112
int32_t ZoomLimitMaxHgt
Definition: C4Player.h:112
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetMinZoom()

void C4Player::SetMinZoom ( C4Real  zoom,
bool  no_increase,
bool  no_decrease 
)

Definition at line 1823 of file C4Player.cpp.

References ZoomLimitMinVal, and ZoomLimitsToViewports().

Referenced by IsViewLocked().

1824 {
1825  AdjustZoomParameter(&ZoomLimitMinVal, zoom, no_increase, no_decrease);
1827 }
void ZoomLimitsToViewports()
Definition: C4Player.cpp:1851
C4Real ZoomLimitMinVal
Definition: C4Player.h:113
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetMinZoomByViewRange()

void C4Player::SetMinZoomByViewRange ( int32_t  range_wdt,
int32_t  range_hgt,
bool  no_increase,
bool  no_decrease 
)

Definition at line 1803 of file C4Player.cpp.

References ZoomLimitMinHgt, ZoomLimitMinWdt, and ZoomLimitsToViewports().

Referenced by IsViewLocked().

1804 {
1805  AdjustZoomParameter(&ZoomLimitMinWdt, range_wdt, no_increase, no_decrease);
1806  AdjustZoomParameter(&ZoomLimitMinHgt, range_hgt, no_increase, no_decrease);
1808 }
int32_t ZoomLimitMinHgt
Definition: C4Player.h:112
void ZoomLimitsToViewports()
Definition: C4Player.cpp:1851
int32_t ZoomLimitMinWdt
Definition: C4Player.h:112
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetObjectCrewStatus()

bool C4Player::SetObjectCrewStatus ( C4Object pCrew,
bool  fNewStatus 
)

Definition at line 1556 of file C4Player.cpp.

References C4PropList::Call(), Crew, CrewInfoList, C4Object::Info, C4ObjectList::IsContained(), C4ObjectInfoList::IsElement(), MakeCrewMember(), Number, PSF_OnRemoveCrew, C4ObjectList::Remove(), and C4ObjectInfo::Retire().

Referenced by GetName().

1557 {
1558  // either add...
1559  if (fNewStatus)
1560  {
1561  // is in crew already?
1562  if (Crew.IsContained(pCrew)) return true;
1563  return MakeCrewMember(pCrew, false);
1564  }
1565  else
1566  {
1567  // already outside?
1568  if (!Crew.IsContained(pCrew)) return true;
1569  // ...or remove
1570  Crew.Remove(pCrew);
1571  C4AulParSet parset(Number);
1572  pCrew->Call(PSF_OnRemoveCrew, &parset);
1573  // remove info, if assigned to this player
1574  // theoretically, info objects could remain when the player is deleted
1575  // but then they would be reassigned to the player crew when loaded in a savegame
1576  // by the crew-assignment code kept for backwards compatibility with pre-4.95.2-savegames
1577  if (pCrew->Info && CrewInfoList.IsElement(pCrew->