public EnemyClimbAction(EnemyMotor enemyMotor, EnemyBehaviour enemyBehaviour, AnimationsController animationsController) { _animationsController = animationsController; _enemyMotor = enemyMotor; _enemyBehaviour = enemyBehaviour; _transform = _enemyBehaviour.transform; }
//spawns the enemies private void SpawnEnemy(int prefabIndex = -1) { Vector3 initialPos = new Vector3(0, 0, 0); //initializes int thirdRand = Random.Range(0, enemyPrefabs.Length); GameObject go; if (prefabIndex == -1) //prevents any errors from happening { go = Instantiate(enemyPrefabs[thirdRand]) as GameObject; } else { go = Instantiate(enemyPrefabs[prefabIndex]) as GameObject; } //this keeps changing the position of the spawned enemies from one side of the tile to the other so they arn't going in only 1 direction if (num1 == -1) { initialPos = new Vector3(spawnX, 0.14f, spawnZ - offset); } if (num1 == 1) { initialPos = new Vector3(-spawnX, 0.14f, spawnZ - offset); EnemyMotor enemyMotor = go.GetComponent <EnemyMotor>(); enemyMotor.forward = Vector3.forward; //changes the forward variable in EnemyMotor script to the opposite direction go.transform.rotation = Quaternion.Euler(0, 90, 0); } go.transform.position = initialPos; go.transform.SetParent(enemyParentTransform); //instantiated objects go in the EnemyParent gameobject activeEnemies.Add(go); //adds the instantiated prefab to the active enemies list num1 = -num1; }
// Start is called before the first frame update void Start() { selfStats = GetComponent <CharacterStats>(); selfCombat = GetComponent <CharacterCombat>(); motor = GetComponent <EnemyMotor>(); aggroZone.radius = aggroRadius; }
private void Update() { // Ensure target resource has this behaviour assigned // Coupling is otherwise lost when reloading a game if (targetResource != null) { if (!targetResource.QuestResourceBehaviour) { targetResource.QuestResourceBehaviour = this; } } // Handle enemy checks if (enemyEntityBehaviour) { // Get foe resource Foe foe = (Foe)targetResource; if (foe == null) { return; } // If foe is hidden then remove self from game if (foe.IsHidden) { Destroy(gameObject); return; } // Handle restrained check // This might need some tuning in relation to injured and death checks if (foe.IsRestrained) { // Make enemy non-hostile EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>(); if (enemyMotor) { enemyMotor.IsHostile = false; } // Lower flag now this has been handled foe.ClearRestrained(); } // Handle injured check // This has to happen before death or script actions attached to injured event will not trigger if (enemyEntityBehaviour.Entity.CurrentHealth < enemyEntityBehaviour.Entity.MaxHealth && !foe.InjuredTrigger) { foe.SetInjured(); return; } // Handle death check if (enemyEntityBehaviour.Entity.CurrentHealth <= 0 && !isFoeDead) { foe.IncrementKills(); isFoeDead = true; } } }
void Start() { motor = GetComponent <EnemyMotor>(); rb = GetComponent <Rigidbody>(); body = GetComponentInChildren <Body>(); flag = false; }
public object GetSaveData() { if (!enemy) { return(null); } // Get entity behaviour DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>(); if (!entityBehaviour) { return(null); } // Create save data EnemyEntity entity = entityBehaviour.Entity as EnemyEntity; EnemyMotor motor = enemy.GetComponent <EnemyMotor>(); EnemyData_v1 data = new EnemyData_v1(); data.loadID = LoadID; data.currentPosition = enemy.transform.position; data.currentRotation = enemy.transform.rotation; data.entityType = entity.EntityType; data.careerName = entity.Career.Name; data.careerIndex = entity.CareerIndex; data.startingHealth = entity.MaxHealth; data.currentHealth = entity.CurrentHealth; data.currentFatigue = entity.CurrentFatigue; data.currentMagicka = entity.CurrentMagicka; data.isHostile = motor.IsHostile; data.isDead = (entity.CurrentHealth <= 0) ? true : false; return(data); }
private void Start() { animAction = GetComponent <EnemyAnimation>(); motor = GetComponent <EnemyMotor>(); gun = GetComponent <Gun>(); gunAnim = GetComponent <GunAnimation>(); }
public object GetSaveData() { if (!enemy) { return(null); } // Get entity behaviour DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>(); if (!entityBehaviour) { return(null); } // Create save data EnemyEntity entity = entityBehaviour.Entity as EnemyEntity; EnemyMotor motor = enemy.GetComponent <EnemyMotor>(); EnemySenses senses = enemy.GetComponent <EnemySenses>(); DaggerfallMobileUnit mobileEnemy = enemy.GetComponentInChildren <DaggerfallMobileUnit>(); EnemyData_v1 data = new EnemyData_v1(); data.loadID = LoadID; data.gameObjectName = entityBehaviour.gameObject.name; data.currentPosition = enemy.transform.position; data.localPosition = enemy.transform.localPosition; data.currentRotation = enemy.transform.rotation; data.worldContext = entity.WorldContext; data.worldCompensation = GameManager.Instance.StreamingWorld.WorldCompensation; data.entityType = entity.EntityType; data.careerName = entity.Career.Name; data.careerIndex = entity.CareerIndex; data.startingHealth = entity.MaxHealth; data.currentHealth = entity.CurrentHealth; data.currentFatigue = entity.CurrentFatigue; data.currentMagicka = entity.CurrentMagicka; data.isHostile = motor.IsHostile; data.hasEncounteredPlayer = senses.HasEncounteredPlayer; data.isDead = (entity.CurrentHealth <= 0) ? true : false; data.questSpawn = enemy.QuestSpawn; data.mobileGender = mobileEnemy.Summary.Enemy.Gender; data.items = entity.Items.SerializeItems(); data.equipTable = entity.ItemEquipTable.SerializeEquipTable(); data.instancedEffectBundles = GetComponent <EntityEffectManager>().GetInstancedBundlesSaveData(); data.alliedToPlayer = mobileEnemy.Summary.Enemy.Team == MobileTeams.PlayerAlly; data.questFoeSpellQueueIndex = entity.QuestFoeSpellQueueIndex; data.questFoeItemQueueIndex = entity.QuestFoeItemQueueIndex; data.wabbajackActive = entity.WabbajackActive; data.team = (int)entity.Team + 1; // Add quest resource data if present QuestResourceBehaviour questResourceBehaviour = GetComponent <QuestResourceBehaviour>(); if (questResourceBehaviour) { data.questResource = questResourceBehaviour.GetSaveData(); } return(data); }
void Start() { Motor = GetComponent<EnemyMotor>(); Damagable = GetComponent<Damagable>(); GameHandler.Instance.EnemiesLeftInScene.Add(this.gameObject); this.GetComponent<Damagable>().Damaged += CivilianController_Damaged; }
void Start() { animator = GetComponent<Animator>(); motor = GetComponent<EnemyMotor>(); logic = GetComponent<EnemyLogic>(); animator.SetBool("Jumping",false); animator.SetLayerWeight(1,1); }
public EnemyMovementActionManager(EnemyBehaviour enemyBehaviour, EnemyMotor enemyMotor, AnimationsController animationsController) { _enemyBehaviour = enemyBehaviour; _enemyMotor = enemyMotor; _animationsController = animationsController; CreateActions(); }
protected override void Start() { enemyMotor = GetComponent <EnemyMotor>(); controller = GetComponent <CharacterController>(); mobile = GetComponent <DaggerfallMobileUnit>(); base.Start(); }
private void Start() { player = GameObject.Find("FPSController"); info = GetComponent <EnemyStatusInfo>(); anim = GetComponent <EnemyAnimation>(); motor = GetComponent <EnemyMotor>(); gun = GetComponentInChildren <Gun>(); }
void Start() { hasTouchThis = false; canBeUsed = false; SR = GetComponent <SpriteRenderer> (); SR.material.color = new Color32(255, 255, 255, 35); gm = GameObject.FindGameObjectWithTag("Player").GetComponent <GameManager> (); em = GameObject.FindGameObjectWithTag("Enemy").GetComponent <EnemyMotor> (); }
private void Awake() { GetComponent <EnemyMotor>().OnObstacleCollide += ObstacleCollideCallback; health = maxHealth; m_Character = GetComponent <EnemyMotor>(); Physics2D.IgnoreLayerCollision(LayerMask.NameToLayer("Enemy"), LayerMask.NameToLayer("Enemy")); target = GameManager.Instance.EnemyTarget; }
public void Init(int wId, EnemyMultiBrain emb, EnemyMotor em, EnemyProjectile ep, Transform we) { weaponID = wId; brain = emb; motor = em; projectilePrefab = ep; gunEnd = we; //projectilePrefab.weaponStats.Init(weaponID); }
/// <summary> /// Handle shared logic when player attacks entity. /// </summary> public void HandleAttackFromSource(DaggerfallEntityBehaviour sourceEntityBehaviour) { // Break "normal power" concealment effects on source if (sourceEntityBehaviour.Entity.IsMagicallyConcealedNormalPower) { EntityEffectManager.BreakNormalPowerConcealmentEffects(sourceEntityBehaviour); } // When source is player if (sourceEntityBehaviour == GameManager.Instance.PlayerEntityBehaviour) { // Handle civilian NPC crime reporting if (EntityType == EntityTypes.CivilianNPC) { PlayerEntity playerEntity = GameManager.Instance.PlayerEntity; MobilePersonNPC mobileNpc = transform.GetComponent <MobilePersonNPC>(); if (mobileNpc) { // Handle assault or murder if (Entity.CurrentHealth > 0) { playerEntity.CrimeCommitted = PlayerEntity.Crimes.Assault; playerEntity.SpawnCityGuards(true); } else { playerEntity.TallyCrimeGuildRequirements(false, 5); // TODO: LOS check from each townsperson. If seen, register crime and start spawning guards as below. playerEntity.CrimeCommitted = PlayerEntity.Crimes.Murder; playerEntity.SpawnCityGuards(true); // Disable when dead mobileNpc.Motor.gameObject.SetActive(false); } } } // Handle mobile enemy aggro if (EntityType == EntityTypes.EnemyClass || EntityType == EntityTypes.EnemyMonster) { // Make enemy aggressive to player EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>(); if (enemyMotor) { if (!enemyMotor.IsHostile) { GameManager.Instance.MakeEnemiesHostile(); } enemyMotor.MakeEnemyHostileToAttacker(GameManager.Instance.PlayerEntityBehaviour); } } } }
public object GetSaveData() { if (!enemy) { return(null); } // Get entity behaviour DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>(); if (!entityBehaviour) { return(null); } // Create save data EnemyEntity entity = entityBehaviour.Entity as EnemyEntity; EnemyMotor motor = enemy.GetComponent <EnemyMotor>(); EnemySenses senses = enemy.GetComponent <EnemySenses>(); DaggerfallMobileUnit mobileEnemy = enemy.GetComponentInChildren <DaggerfallMobileUnit>(); EnemyData_v1 data = new EnemyData_v1(); data.loadID = LoadID; data.gameObjectName = entityBehaviour.gameObject.name; data.currentPosition = enemy.transform.position; data.currentRotation = enemy.transform.rotation; data.entityType = entity.EntityType; data.careerName = entity.Career.Name; data.careerIndex = entity.CareerIndex; data.startingHealth = entity.MaxHealth; data.currentHealth = entity.CurrentHealth; data.currentFatigue = entity.CurrentFatigue; data.currentMagicka = entity.CurrentMagicka; data.isHostile = motor.IsHostile; data.hasEncounteredPlayer = senses.HasEncounteredPlayer; data.isDead = (entity.CurrentHealth <= 0) ? true : false; data.questSpawn = enemy.QuestSpawn; data.mobileGender = mobileEnemy.Summary.Enemy.Gender; data.items = entity.Items.SerializeItems(); data.equipTable = entity.ItemEquipTable.SerializeEquipTable(); // Add quest resource data if present QuestResourceBehaviour questResourceBehaviour = GetComponent <QuestResourceBehaviour>(); if (questResourceBehaviour) { data.questResource = questResourceBehaviour.GetSaveData(); } return(data); }
public void RestoreSaveData(object dataIn) { if (!enemy) { return; } EnemyData_v1 data = (EnemyData_v1)dataIn; if (data.loadID != LoadID) { return; } DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>(); EnemySenses senses = enemy.GetComponent <EnemySenses>(); EnemyMotor motor = enemy.GetComponent <EnemyMotor>(); EnemyEntity entity = entityBehaviour.Entity as EnemyEntity; // Quiesce entity during state restore entity.Quiesce = true; // Restore enemy career or class if different if (entity.EntityType != data.entityType || entity.CareerIndex != data.careerIndex) { SetupDemoEnemy setupEnemy = enemy.GetComponent <SetupDemoEnemy>(); setupEnemy.ApplyEnemySettings(data.entityType, data.careerIndex, data.isHostile); setupEnemy.AlignToGround(); } // Restore enemy position enemy.transform.position = data.currentPosition; enemy.transform.rotation = data.currentRotation; entity.MaxHealth = data.startingHealth; entity.CurrentHealth = data.currentHealth; entity.CurrentFatigue = data.currentFatigue; entity.CurrentMagicka = data.currentMagicka; motor.IsHostile = data.isHostile; senses.HasEncounteredPlayer = true; // Disable dead enemies if (data.isDead) { entityBehaviour.gameObject.SetActive(false); } // Resume entity entity.Quiesce = false; }
private void CreateEnemy() { //选择一条可用路线 WayLine[] usableLines = FindUsaleWayLines(); WayLine way = usableLines[Random.Range(0, usableLines.Length)]; //延迟时间随机 int index = Random.Range(0, enemyTypes.Length); GameObject enemy = Instantiate(enemyTypes[index], way.wayPoints[0], Quaternion.identity) as GameObject; EnemyManager.monsters.Add(enemy); EnemyMotor motor = enemy.GetComponent <EnemyMotor>(); Enemy e = enemy.GetComponent <Enemy>(); e.spawn = this; motor.line = way; way.isUsable = false; }
private void CreateEnemy() { WayLine[] result = SelectUsableWayLine(); WayLine line = result[Random.Range(0, result.Length)]; //创建敌人 //Object.Instantiate(敌人预制件,第一个点的位置,旋转角度) int count = Random.Range(0, enemyType.Length); GameObject go = Instantiate(enemyType[count], line.WayPoints[0], Quaternion.identity); //设置参数 EnemyMotor motor = go.GetComponent <EnemyMotor>(); motor.line = line; line.isUsable = false;//不可使用 //******************************** //传递生成器引用给EnemyStatusInfo go.GetComponent <EnemyStatusInfo>().spawn = this; }
void CreateEnemy() { Transform spawnPoint = spawnPoints[Random.Range(0, spawnPoints.Count)]; // Debug.Log("spawning enemy : " + enemyID); GameObject enemyObj = Instantiate(EnemyPrefab, spawnPoint); enemyObj.transform.localPosition = Vector3.zero; EnemyHurt enemyHurt = enemyObj.GetComponent <EnemyHurt>(); enemyHurt.master = master; EnemyMotor motor = enemyObj.GetComponent <EnemyMotor>(); motor.master = master; motor.bulletSpeedMulti += levelData.bulletSpeedIncrease.Evaluate(Time.time); motor.bulletIntervalMulti = levelData.bulletIntervalMulti.Evaluate(Time.time); enemyID++; }
private static void PacifyWere(bool isBeast) { DaggerfallEntityBehaviour[] entityBehaviours = FindObjectsOfType <DaggerfallEntityBehaviour>(); for (int i = 0; i < entityBehaviours.Length; i++) { DaggerfallEntityBehaviour entityBehaviour = entityBehaviours[i]; if (entityBehaviour.EntityType == EntityTypes.EnemyMonster) { EnemyEntity enemyEntity = entityBehaviour.Entity as EnemyEntity; EnemySenses enemySenses = entityBehaviour.GetComponent <EnemySenses>(); EnemyMotor enemyMotor = entityBehaviour.GetComponent <EnemyMotor>(); if (enemySenses && enemySenses.HasEncounteredPlayer && enemyEntity.MobileEnemy.Team == MobileTeams.Werecreatures && enemyMotor.IsHostile && enemyEntity.MobileEnemy.Team != MobileTeams.PlayerAlly) { if (isBeast) { enemyMotor.IsHostile = false; DaggerfallUI.AddHUDText("Pacified " + enemyEntity.Name + " using your lycanthropy."); } } } } }
public override void MagicRound() { base.MagicRound(); // Get peered entity gameobject DaggerfallEntityBehaviour entityBehaviour = GetPeeredEntityBehaviour(manager); if (!entityBehaviour) { return; } // Set target non-hostile if (IsAffinityMatch(entityBehaviour.Entity)) { EnemyMotor enemyMotor = entityBehaviour.GetComponent <EnemyMotor>(); if (enemyMotor) { enemyMotor.IsHostile = false; Debug.LogFormat("Enemy {0} is now non-hostile", enemyMotor.name); } } }
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (_playerController != null) { _playerController.SwitchState <NormalState>(); _playerMotor.HasGravity = true; _animationsController.Climb(false); animator.applyRootMotion = false; _playerController = null; } if (_enemyMotor != null) { _enemyMotor.RigidBody.isKinematic = true; _enemyMotor.ResetRigidbodyConstraints(); _enemyMotor.UpdateTransformToNavmesh = true; _enemyMotor.Warp(_enemyMotor.transform.position); _animationsController.Climb(false); animator.applyRootMotion = false; _enemyBehaviour.StopMovementAction(); _enemyMotor = null; } }
void StartLevitating() { // Get peered entity gameobject DaggerfallEntityBehaviour entityBehaviour = GetPeeredEntityBehaviour(manager); if (!entityBehaviour) { return; } // Enable levitation for player or enemies if (entityBehaviour.EntityType == EntityTypes.Player) { GameManager.Instance.PlayerMotor.GetComponent <LevitateMotor>().IsLevitating = true; } else if (entityBehaviour.EntityType == EntityTypes.EnemyMonster || entityBehaviour.EntityType == EntityTypes.EnemyClass) { EnemyMotor enemyMotor = entityBehaviour.GetComponent <EnemyMotor>(); if (enemyMotor) { enemyMotor.IsLevitating = true; } } }
private static void Halt() { DaggerfallEntityBehaviour[] entityBehaviours = FindObjectsOfType <DaggerfallEntityBehaviour>(); for (int i = 0; i < entityBehaviours.Length; i++) { DaggerfallEntityBehaviour entityBehaviour = entityBehaviours[i]; if (entityBehaviour.EntityType == EntityTypes.EnemyClass && !playerEntity.HaveShownSurrenderToGuardsDialogue) { EnemyEntity enemyEntity = entityBehaviour.Entity as EnemyEntity; EnemyMotor enemyMotor = entityBehaviour.GetComponent <EnemyMotor>(); if (enemyEntity.MobileEnemy.Team == MobileTeams.CityWatch && enemyMotor.IsHostile && Vector3.Distance(entityBehaviour.transform.position, GameManager.Instance.PlayerObject.transform.position) < 4f) { EnemySenses enemySenses = entityBehaviour.GetComponent <EnemySenses>(); bool guardCanSeePlayer = enemySenses.Target == GameManager.Instance.PlayerEntityBehaviour && enemySenses.TargetInSight; if (guardCanSeePlayer) { playerEntity.HaveShownSurrenderToGuardsDialogue = true; BribePrompt(); return; } } } } }
public void RestoreSaveData(object dataIn) { if (!enemy) { return; } EnemyData_v1 data = (EnemyData_v1)dataIn; if (data.loadID != LoadID) { return; } DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>(); EnemySenses senses = enemy.GetComponent <EnemySenses>(); EnemyMotor motor = enemy.GetComponent <EnemyMotor>(); EnemyEntity entity = entityBehaviour.Entity as EnemyEntity; // Restore enemy career or class if different if (entity == null || entity.EntityType != data.entityType || entity.CareerIndex != data.careerIndex) { SetupDemoEnemy setupEnemy = enemy.GetComponent <SetupDemoEnemy>(); setupEnemy.ApplyEnemySettings(data.entityType, data.careerIndex, data.mobileGender, data.isHostile, alliedToPlayer: data.alliedToPlayer); setupEnemy.AlignToGround(); if (entity == null) { entity = entityBehaviour.Entity as EnemyEntity; } } // Quiesce entity during state restore entity.Quiesce = true; // Restore enemy data entityBehaviour.gameObject.name = data.gameObjectName; enemy.transform.rotation = data.currentRotation; entity.QuestFoeSpellQueueIndex = data.questFoeSpellQueueIndex; entity.QuestFoeItemQueueIndex = data.questFoeItemQueueIndex; entity.WabbajackActive = data.wabbajackActive; entity.Items.DeserializeItems(data.items); entity.ItemEquipTable.DeserializeEquipTable(data.equipTable, entity.Items); entity.MaxHealth = data.startingHealth; entity.SetHealth(data.currentHealth, true); entity.SetFatigue(data.currentFatigue, true); entity.SetMagicka(data.currentMagicka, true); int team = data.team; if (team > 0) // Added 1 to made backwards compatible. 0 = no team saved { entity.Team = (MobileTeams)(team - 1); } motor.IsHostile = data.isHostile; senses.HasEncounteredPlayer = data.hasEncounteredPlayer; // Restore enemy position and migrate to floating y support for exteriors // Interiors seem to be working fine at this stage with any additional support // Dungeons are not involved with floating y and don't need any changes WorldContext enemyContext = GetEnemyWorldContext(enemy); if (enemyContext == WorldContext.Exterior) { RestoreExteriorPositionHandler(enemy, data, enemyContext); } else { // Everything else enemy.transform.position = data.currentPosition; } // Disable dead enemies if (data.isDead) { entityBehaviour.gameObject.SetActive(false); } // Restore quest resource link enemy.QuestSpawn = data.questSpawn; if (enemy.QuestSpawn) { // Add QuestResourceBehaviour to GameObject QuestResourceBehaviour questResourceBehaviour = entityBehaviour.gameObject.AddComponent <QuestResourceBehaviour>(); questResourceBehaviour.RestoreSaveData(data.questResource); // Destroy QuestResourceBehaviour if no actual quest properties are restored from save if (questResourceBehaviour.QuestUID == 0 || questResourceBehaviour.TargetSymbol == null) { enemy.QuestSpawn = false; Destroy(questResourceBehaviour); } } // Restore instanced effect bundles GetComponent <EntityEffectManager>().RestoreInstancedBundleSaveData(data.instancedEffectBundles); // Resume entity entity.Quiesce = false; }
private void Update() { // Ensure target resource has this behaviour assigned // Coupling is otherwise lost when reloading a game if (targetResource != null) { if (!targetResource.QuestResourceBehaviour) { targetResource.QuestResourceBehaviour = this; } } // Handle NPC checks if (targetResource is Person && targetResource.QuestResourceBehaviour) { // Disable person resource if hidden or destroyed // Normally this is done via QuestResource.Tick() but this stops receiving ticks when quest terminates // Sometimes a quest person is hidden at same time quest is ended, e.g. $CUREWER when spawning lycanthrope foe // Also disabling here to handle this situation Person targetPerson = (Person)targetResource; if (targetPerson.IsHidden || targetPerson.IsDestroyed) { targetPerson.QuestResourceBehaviour.gameObject.SetActive(false); } } // Handle enemy checks if (enemyEntityBehaviour) { // Get foe resource Foe foe = (Foe)targetResource; if (foe == null) { return; } // If foe is hidden then remove self from game if (foe.IsHidden) { Destroy(gameObject); return; } // Handle restrained check // This might need some tuning in relation to injured and death checks if (foe.IsRestrained) { // Make enemy non-hostile EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>(); if (enemyMotor) { enemyMotor.IsHostile = false; } // Lower flag now this has been handled foe.ClearRestrained(); } // Handle injured check // This has to happen before death or script actions attached to injured event will not trigger if (enemyEntityBehaviour.Entity.CurrentHealth < enemyEntityBehaviour.Entity.MaxHealth && !foe.InjuredTrigger) { foe.SetInjured(); return; } // Handle death check if (enemyEntityBehaviour.Entity.CurrentHealth <= 0 && !isFoeDead) { foe.IncrementKills(); isFoeDead = true; } } }
// Use this for initialization void Start() { player = GameObject.FindGameObjectWithTag("Player"); motor = GetComponent <EnemyMotor> (); animator = GetComponent <Animator> (); }
/// <summary> /// Handle shared logic when player attacks entity. /// </summary> public void HandleAttackFromSource(DaggerfallEntityBehaviour sourceEntityBehaviour) { // Break "normal power" concealment effects on source if (sourceEntityBehaviour.Entity.IsMagicallyConcealedNormalPower) { EntityEffectManager.BreakNormalPowerConcealmentEffects(sourceEntityBehaviour); } // When source is player if (sourceEntityBehaviour == GameManager.Instance.PlayerEntityBehaviour) { PlayerEntity playerEntity = GameManager.Instance.PlayerEntity; // Handle civilian NPC crime reporting if (EntityType == EntityTypes.CivilianNPC) { MobilePersonNPC mobileNpc = transform.GetComponent <MobilePersonNPC>(); if (mobileNpc) { // Handle assault or murder if (Entity.CurrentHealth > 0) { playerEntity.CrimeCommitted = PlayerEntity.Crimes.Assault; playerEntity.SpawnCityGuards(true); } else { if (!mobileNpc.IsGuard) { playerEntity.TallyCrimeGuildRequirements(false, 5); playerEntity.CrimeCommitted = PlayerEntity.Crimes.Murder; playerEntity.SpawnCityGuards(true); } else { playerEntity.CrimeCommitted = PlayerEntity.Crimes.Assault; playerEntity.SpawnCityGuard(mobileNpc.transform.position, mobileNpc.transform.forward); } // Disable when dead mobileNpc.Motor.gameObject.SetActive(false); } } } // Handle mobile enemy aggro if (EntityType == EntityTypes.EnemyClass || EntityType == EntityTypes.EnemyMonster) { // Make enemy aggressive to player EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>(); if (enemyMotor) { if (!enemyMotor.IsHostile) { GameManager.Instance.MakeEnemiesHostile(); } enemyMotor.MakeEnemyHostileToAttacker(GameManager.Instance.PlayerEntityBehaviour); } // Handle killing guards EnemyEntity enemyEntity = entity as EnemyEntity; if (enemyEntity.MobileEnemy.ID == (int)MobileTypes.Knight_CityWatch && entity.CurrentHealth <= 0) { playerEntity.TallyCrimeGuildRequirements(false, 1); playerEntity.CrimeCommitted = PlayerEntity.Crimes.Murder; } } } }
/// <summary> /// Check if this entity is a hostile enemy. /// Currently only used to block damage and aggro from Sleep spell in N0B00Y08. /// </summary> /// <returns>True if this entity is a hostile enemy.</returns> bool IsHostileEnemy() { EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>(); return(enemyMotor && enemyMotor.IsHostile); }