MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / Npc

Method Npc

source/game/StarNpc.cpp:33–99  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31namespace Star {
32
33Npc::Npc(NpcVariant const& npcVariant)
34 : m_humanoid(npcVariant.humanoidConfig) {
35 m_disableWornArmor.set(npcVariant.disableWornArmor);
36
37 m_emoteState = HumanoidEmote::Idle;
38 m_chatMessageUpdated = false;
39
40 m_statusText.set({});
41 m_displayNametag.set(false);
42
43 auto assets = Root::singleton().assets();
44
45 m_emoteCooldownTimer = GameTimer(assets->json("/npcs/npc.config:emoteCooldown").toFloat());
46 m_danceCooldownTimer = GameTimer(0.0f);
47 m_blinkInterval = jsonToVec2F(assets->json("/npcs/npc.config:blinkInterval"));
48
49 m_questIndicatorOffset = jsonToVec2F(assets->json("/quests/quests.config:defaultIndicatorOffset"));
50
51 if (npcVariant.overrides)
52 m_clientEntityMode = ClientEntityModeNames.getLeft(npcVariant.overrides.getString("clientEntityMode", "ClientSlaveOnly"));
53
54 m_isInteractive.set(false);
55
56 m_shifting.set(false);
57 m_damageOnTouch.set(false);
58
59 m_dropPools.set(npcVariant.dropPools);
60 m_npcVariant = npcVariant;
61
62 setTeam(EntityDamageTeam(m_npcVariant.damageTeamType, m_npcVariant.damageTeam));
63
64 m_scriptComponent.setScripts(m_npcVariant.scripts);
65 m_scriptComponent.setUpdateDelta(m_npcVariant.initialScriptDelta);
66 auto movementParameters = ActorMovementParameters(m_npcVariant.movementParameters);
67 if (!movementParameters.physicsEffectCategories)
68 movementParameters.physicsEffectCategories = StringSet({"npc"});
69 m_movementController = make_shared<ActorMovementController>(movementParameters);
70 m_humanoid.setIdentity(m_npcVariant.humanoidIdentity);
71 m_deathParticleBurst.set(m_humanoid.defaultDeathParticles());
72
73 m_statusController = make_shared<StatusController>(m_npcVariant.statusControllerSettings);
74 m_statusController->setPersistentEffects("innate", m_npcVariant.innateStatusEffects);
75 auto speciesDefinition = Root::singleton().speciesDatabase()->species(species());
76 m_statusController->setPersistentEffects("species", speciesDefinition->statusEffects());
77 m_statusController->setStatusProperty("species", species());
78 if (!m_statusController->statusProperty("effectDirectives"))
79 m_statusController->setStatusProperty("effectDirectives", speciesDefinition->effectDirectives());
80
81 m_songbook = make_shared<Songbook>(species());
82
83 m_effectEmitter = make_shared<EffectEmitter>();
84
85 m_hitDamageNotificationLimiter = 0;
86 m_hitDamageNotificationLimit = assets->json("/npcs/npc.config:hitDamageNotificationLimit").toInt();
87
88 m_blinkCooldownTimer = GameTimer();
89
90 m_armor = make_shared<ArmorWearer>();

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
GameTimerClass · 0.85
jsonToVec2FFunction · 0.85
EntityDamageTeamClass · 0.85
assetsMethod · 0.80
toFloatMethod · 0.80
jsonMethod · 0.80
getStringMethod · 0.80
setScriptsMethod · 0.80
setUpdateDeltaMethod · 0.80
defaultDeathParticlesMethod · 0.80

Tested by

no test coverage detected