7e309e5adef96eb1fbd1bfb249403ad6e6c4706e
4 from sys
import platform
, argv
5 from logging
import info
6 from os
.path
import exists
7 from os
import makedirs
8 from panda3d
.core
import Filename
, load_prc_file_data
, AntialiasAttrib
9 from panda3d
.bullet
import BulletWorld
, BulletDebugNode
10 from direct
.showbase
.ShowBase
import ShowBase
11 from pmachines
.scene
import Scene
12 from pmachines
.music
import MusicMgr
13 from lib
.dictfile
import DctFile
14 from lib
.lib
.p3d
.p3d
import LibP3d
21 self
.base
= ShowBase()
22 info('platform: %s' % platform
)
23 info('exists main.py: %s' % exists('main.py'))
24 args
= self
._parse
_args
()
25 self
._prepare
_window
(args
)
26 self
.updating
= args
.update
27 self
.version
= args
.version
30 MusicMgr(self
._options
['settings']['volume'])
32 self
._scene
= Scene(self
.world
)
35 load_prc_file_data('', 'window-title pmachines')
36 load_prc_file_data('', 'framebuffer-multisample 1')
37 load_prc_file_data('', 'multisamples 4')
38 load_prc_file_data('', 'framebuffer-srgb true')
40 def _parse_args(self
):
41 parser
= argparse
.ArgumentParser()
42 parser
.add_argument('--update', action
='store_true')
43 parser
.add_argument('--version', action
='store_true')
44 parser
.add_argument('--optfile')
45 cmd_line
= [arg
for arg
in iter(argv
[1:]) if not arg
.startswith('-psn_')]
46 args
= parser
.parse_args(cmd_line
)
49 def _prepare_window(self
, args
):
51 if (platform
.startswith('win') or platform
.startswith('linux')) and (
52 not exists('main.py') or __file__
.startswith('/app/bin/')):
53 # it is the deployed version for windows
54 data_path
= str(Filename
.get_user_appdata_directory()) + '/pmachines'
55 home
= '/home/flavio' # we must force this for wine
56 if data_path
.startswith('/c/users/') and exists(home
+ '/.wine/'):
57 data_path
= home
+ '/.wine/drive_' + data_path
[1:]
58 info('creating dirs: %s' % data_path
)
59 makedirs(data_path
, exist_ok
=True)
60 optfile
= args
.optfile
if args
.optfile
else 'options.ini'
61 info('data path: %s' % data_path
)
62 info('option file: %s' % optfile
)
63 info('fixed path: %s' % LibP3d
.fixpath(data_path
+ '/' + optfile
))
70 opt_path
= LibP3d
.fixpath(data_path
+ '/' + optfile
) if data_path
else optfile
71 opt_exists
= exists(opt_path
)
72 self
._options
= DctFile(
73 LibP3d
.fixpath(data_path
+ '/' + optfile
) if data_path
else optfile
,
77 gltf
.patch_loader(base
.loader
)
78 pipeline
= simplepbr
.init(
80 use_emission_maps
=False,
81 use_occlusion_maps
=True,
83 render
.setAntialias(AntialiasAttrib
.MAuto
)
84 self
.base
.set_background_color(0, 0, 0, 1)
85 self
.base
.disable_mouse()
86 #self.base.accept('window-event', self._on_win_evt)
87 self
.base
.accept('aspectRatioChanged', self
._on
_aspect
_ratio
_changed
)
89 def _set_physics(self
):
90 if self
._options
['development']['physics_debug']:
91 debug_node
= BulletDebugNode('Debug')
92 debug_node
.show_wireframe(True)
93 debug_node
.show_constraints(True)
94 debug_node
.show_bounding_boxes(True)
95 debug_node
.show_normals(True)
96 debug_np
= render
.attach_new_node(debug_node
)
98 self
.world
= BulletWorld()
99 self
.world
.set_gravity((0, 0, -9.81))
100 if self
._options
['development']['physics_debug']:
101 self
.world
.set_debug_node(debug_np
.node())
103 dt
= globalClock
.get_dt()
104 self
.world
.do_physics(dt
)
106 taskMgr
.add(update
, 'update')
108 def _on_aspect_ratio_changed(self
):
109 self
._scene
.on_aspect_ratio_changed()