void Start() { currentHealth = mobStats.maxHealth; changeEvery = Random.Range(2f, 5f); sceneData = new MobSceneData(); Supervisor.self.initMobSceneData(this, sceneData); }
public void initMobSceneData(Mob caller, MobSceneData sceneData) { sceneData.players = currentSceneState.players; if (caller.mobStats.team == 1) { sceneData.allies = currentSceneState.redTeam; sceneData.enemies = currentSceneState.blueTeam; } else { sceneData.allies = currentSceneState.blueTeam; sceneData.enemies = currentSceneState.redTeam; } }
public static void chooseTarget(Mob self, MobStats selfStats, MobSceneData sceneData) { if (selfStats.team != Supervisor.self.playerTeam && chance(0.25f)) { // select some player self.target = randomFrom(Supervisor.currentSceneState.players); } else { // select enemy if (selfStats.team == 1) { self.target = randomFrom(Supervisor.currentSceneState.blueTeam); } else { self.target = randomFrom(Supervisor.currentSceneState.redTeam); } } }
public abstract void doActions(float deltaTime, GameObject self, MobStats selfStats, MobSceneData sceneData);
public override void doActions(float deltaTime, GameObject self, MobStats selfStats, MobSceneData sceneData) { Mob mob = self.GetComponent <Mob>(); if (mob.target == null) { Supervisor.chooseTarget(mob, selfStats, sceneData); } targetApproachAndAttack(deltaTime, mob, selfStats, sceneData); }
public void targetApproachAndAttack(float deltaTime, Mob self, MobStats selfStats, MobSceneData sceneData) { if (self.target == null) { return; } Vector3 targetPos = self.target.transform.position; float dist = Vector3.Distance(targetPos, self.transform.position); if (dist > 0.9f * selfStats.attackRadius) { Vector3 dir = targetPos - self.transform.position; dir = Vector3.Normalize(dir); self.transform.position += dir * selfStats.moveSpeed * deltaTime; } else { if (self.canAttack(selfStats)) { self.attack(self.gameObject, selfStats); } } }