in gym-compete/gym_compete/new_envs/you_shall_not_pass.py [0:0]
def goal_rewards(self, infos=None, agent_dones=None):
self._elapsed_steps += 1
goal_rews = [0. for _ in range(self.n_agents)]
touchdowns = [self.agents[i].reached_goal()
for i in range(self.n_agents)]
walkers_fallen = [not self._is_standing(i)
for i in range(self.n_agents)
if self.agents[i].team == 'walker']
# print(self._elapsed_steps, touchdowns, walkers_fallen)
done = self._past_limit() or all(walkers_fallen)
# print(self._elapsed_steps,touchdowns, walkers_fallen)
if not any(touchdowns):
all_walkers_fallen = all(walkers_fallen)
# game_over = all_walkers_fallen
for j in range(self.n_agents):
if self.agents[j].team == 'blocker':
# goal_rews[j] += -infos[1-j]['reward_goal_dist']
infos[j]['reward_move'] += -infos[1-j]['reward_goal_dist']
if all_walkers_fallen and self.agents[j].team == 'blocker':
if self._is_standing(j):
goal_rews[j] += self.GOAL_REWARD
infos[j]['winner'] = True
elif done:
if self.agents[j].team == 'walker':
goal_rews[j] -= self.GOAL_REWARD
else:
infos[j]['winner'] = True
else:
# some walker touched-down
done = True
for i in range(self.n_agents):
if self.agents[i].team == 'walker':
if touchdowns[i]:
goal_rews[i] += self.GOAL_REWARD
infos[i]['winner'] = True
else:
goal_rews[i] -= self.GOAL_REWARD
# print(done, self._elapsed_steps, self._past_limit())
return goal_rews, done