summaryrefslogtreecommitdiff
path: root/src/game/objlist.cpp
blob: 01ce49b937f35d1db15566771ec637481be68b1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "objlist.h"
#include "world/world.h"
#include "world/map.h"

OBJECT_LIST* objl;

OBJECT_LIST* objl_init() {
  OBJECT_LIST* ret = new OBJECT_LIST;
  ret->world = 0;
  ret->pl = 0;

  return ret;
}

void objl_clear( U8 delete_player ) {
  objl->objects.each( fn( OBJECT** ptr ) {
    OBJECT* obj = *ptr;

    if( !delete_player && obj == objl->pl )
      return;

    if( obj->deinit_fn )
      obj->deinit_fn( obj );
    delete obj;
  } );

  objl->objects.clear();
  objl->world = 0;
  if( delete_player )
    objl->pl = 0;
}

void objl_load_world( GAME_DATA* game, WORLD_MAP* map ) {
  objl_clear();

  objl->world = world_create( map );
  if( !objl->pl )
    objl->pl = player_create( map->startpos, map->startang );

  if( !OK( world_populate_entities( objl->world ) ) ) {
    objl_clear();
    dlog( "objl_load_world() : error populating entities\n" );
  }
}