コード例 #1
0
ファイル: evoseed.py プロジェクト: ghostonline/ld24
def update(dt):
    global collected, collected_change
    for entity_id, state in evoseeds.iteritems():
        max_health = state.max_health
        current_health = health.get_health(entity_id)
        if current_health > max_health:
            continue

        position = spatial.get_position_vec(entity_id)
        timeout = state.timeout - dt
        if timeout < 0:
            explosions.create_within_radius(position, state.radius, big=False)
            timeout = state.explode_timeout
        state.timeout = timeout

        nearest_collector, collector_position, collector_distance = spatial.nearest(
            entity_id, [collector_id], threshold=DEFAULT_COLLECTOR_THRESHOLD)
        if nearest_collector:
            pull_strength = 1 - collector_distance / DEFAULT_COLLECTOR_THRESHOLD
            drift_direction = (collector_position - position).normalized()
            drift = drift_direction * pull_strength * DRIFT_SPEED * dt
            spatial.move_vec(entity_id, drift)

    for entity_id, recipient_id in collect_events:
        addition = health.get_health(entity_id)
        health.heal(recipient_id, addition)
        collected += 1
        collected_change = True
        manager.destroy_entity(entity_id)
コード例 #2
0
ファイル: collider.py プロジェクト: ghostonline/ld24
def update(dt):
    global world_events
    global collide_events_data
    global collide_events
    world_events = set()
    collide_events = set()
    collide_events_data = {}

    player_id = player.player_id

    for entity_id, data in world_collidables.iteritems():
        radius, world_name = data
        world = worlds[world_name]
        pos_vec = spatial.get_position_vec(entity_id)
        distances = map(lambda ray: ray.distance_to(pos_vec), world)
        push_back = [v * -(d - radius) for d,v in zip(distances, push_back_vectors) if d - radius < 0]
        if push_back:
            push_back_vec = reduce(operator.add, push_back, planar.Vec2(0,0))
            spatial.move_vec(entity_id, push_back_vec)
            world_events.add(entity_id)

    for entity_id, radius in collidables.iteritems():
        pos_vec = spatial.get_position_vec(entity_id)

        candidates = ((id_, d) for (id_, d) in collidables.iteritems() if id_ != entity_id)
        for other_id, other_radius in candidates:
            other_vec = spatial.get_position_vec(other_id)
            distance = other_vec.distance_to(pos_vec) 
            if distance - other_radius - radius < 0:
                collide_events.add(entity_id)
                data = collide_events_data.get(entity_id, [])
                data.append(other_id)
                collide_events_data[entity_id] = data

    other_id = player_id
    other_radius = collidables[player_id]
    other_vec = spatial.get_position_vec(other_id)
    for entity_id, radius in player_collidables.iteritems():
        pos_vec = spatial.get_position_vec(entity_id)
        distance = other_vec.distance_to(pos_vec) 
        if distance - other_radius - radius < 0:
            collide_events.add(entity_id)
            data = collide_events_data.get(entity_id, [])
            data.append(other_id)
            collide_events_data[entity_id] = data
コード例 #3
0
ファイル: kamikaze_ai.py プロジェクト: ghostonline/ld24
def update(dt):
    for entity_id, state in enemies.iteritems():
        timeout = state.timeout - dt
        current_state = state.state
        if timeout < 0:
            if current_state == IDLE:
                player_id = player.player_id
                target_pos = spatial.get_position_vec(player_id)
                timeout = state.cooldown
                position = spatial.get_position_vec(entity_id)
                angle = SHIP_FACE.angle_to(target_pos - position)
                current_state = ATTACKING
                spatial.set_angle(entity_id, -angle)
                state.state = current_state

        if current_state == ATTACKING:
            spatial.move_forward(entity_id, SPEED * dt)
        state.timeout = timeout