Mise à jour de la convention de nommage des fonctions

This commit is contained in:
Philippe Roy 2022-07-13 01:10:27 +02:00
parent 3e041e5818
commit 1369bdf553
7 changed files with 867 additions and 722 deletions

1266
UML.xmi

File diff suppressed because it is too large Load Diff

BIN
codetower-27.blend Normal file

Binary file not shown.

144
ct.py
View File

@ -118,7 +118,7 @@ def cmd_tower_construct(cont):
scene.objects['Tower_construc_mode'].setVisible(True,False)
scene.objects['Tower_construc_mode'].color = color_cmd
text_info ("Tower position : ")
scene.objects['Cmd_text']['Text']= ""
scene.objects['Cmd-text']['Text']= ""
###############################################################################
# User interface : texte info et compteurs
@ -127,16 +127,16 @@ def cmd_tower_construct(cont):
# Affichage sur la boite de texte sur 6 lignes
def text_info (text):
if text=="":
scene.objects['Text_info-1'].setVisible(False,False)
scene.objects['Text_info-2'].setVisible(False,False)
scene.objects['Info-1-text'].setVisible(False,False)
scene.objects['Info-2-text'].setVisible(False,False)
else:
lines_txt=text.split("\n", 6)
for i in range (len(lines_txt),6):
lines_txt.append("")
scene.objects['Text_info-1'].setVisible(True,False)
scene.objects['Text_info-2'].setVisible(True,False)
scene.objects['Text_info-1']['Text']=lines_txt[0]+"\n"+lines_txt[1]+"\n"+lines_txt[2]
scene.objects['Text_info-2']['Text']=lines_txt[3]+"\n"+lines_txt[4]+"\n"+lines_txt[5]
scene.objects['Info-1-text'].setVisible(True,False)
scene.objects['Info-2-text'].setVisible(True,False)
scene.objects['Info-1-text']['Text']=lines_txt[0]+"\n"+lines_txt[1]+"\n"+lines_txt[2]
scene.objects['Info-2-text']['Text']=lines_txt[3]+"\n"+lines_txt[4]+"\n"+lines_txt[5]
# Mise à jour de l'affichage des compteurs
def points_maj (cont):
@ -149,25 +149,25 @@ def points_maj (cont):
time.sleep(0.01)
# Texte
scene.objects['Lifes_text']['Text']=str(scene.objects['Points']['lifes'])+"/"+str(scene.objects['Points']['lifes_max'])
scene.objects['Coins_text']['Text']=str(scene.objects['Points']['coins'])
scene.objects['Level_text']['Text']=str(scene.objects['Points']['level'])+"/"+str(scene.objects['Points']['level_max'])
scene.objects['Minions_text']['Text']=str(scene.objects['Points']['minions'])
scene.objects['Points-Lifes-text']['Text']=str(scene.objects['Points']['lifes'])+"/"+str(scene.objects['Points']['lifes_max'])
scene.objects['Points-Coins-text']['Text']=str(scene.objects['Points']['coins'])
scene.objects['Points-Level-text']['Text']=str(scene.objects['Points']['level'])+"/"+str(scene.objects['Points']['level_max'])
scene.objects['Points-Minions-text']['Text']=str(scene.objects['Points']['minions'])
scene.objects['Points']['tics'] +=1
# Texte de la vague
if scene.objects['Map_text']['anim']:
if scene.objects['Map_text']['timer']<120:
if scene.objects['Points-Map-text']['anim']:
if scene.objects['Points-Map-text']['timer']<120:
decal = 0.1
vect=scene.objects['Map_text'].getVectTo(scene.objects['Camera'])[1]
scene.objects['Map_text'].applyMovement((vect[0]*decal, vect[1]*decal, vect[2]*decal), False)
scene.objects['Map_text']['timer']+=1
if int(scene.objects['Map_text']['timer'])>=120:
scene.objects['Map_text'].color = color_text
scene.objects['Map_text'].worldPosition.x= scene.objects['Points'].worldPosition.x+ scene.objects['Map_text']['init_relativ_lx']
scene.objects['Map_text'].worldPosition.y= scene.objects['Points'].worldPosition.y+ scene.objects['Map_text']['init_relativ_ly']
scene.objects['Map_text'].worldPosition.z= scene.objects['Points'].worldPosition.z+ scene.objects['Map_text']['init_relativ_lz']
scene.objects['Map_text']['anim']=False
vect=scene.objects['Points-Map-text'].getVectTo(scene.objects['Camera'])[1]
scene.objects['Points-Map-text'].applyMovement((vect[0]*decal, vect[1]*decal, vect[2]*decal), False)
scene.objects['Points-Map-text']['timer']+=1
if int(scene.objects['Points-Map-text']['timer'])>=120:
scene.objects['Points-Map-text'].color = color_text
scene.objects['Points-Map-text'].worldPosition.x= scene.objects['Points'].worldPosition.x+ scene.objects['Points-Map-text']['init_relativ_lx']
scene.objects['Points-Map-text'].worldPosition.y= scene.objects['Points'].worldPosition.y+ scene.objects['Points-Map-text']['init_relativ_ly']
scene.objects['Points-Map-text'].worldPosition.z= scene.objects['Points'].worldPosition.z+ scene.objects['Points-Map-text']['init_relativ_lz']
scene.objects['Points-Map-text']['anim']=False
# Gestion du FPS - Tous les tics
if scene.objects['Commands']['debug_fps']:
@ -187,11 +187,11 @@ def points_maj (cont):
# Level trop élevé
if scene.objects['Points']['level'] > scene.objects['Points']['level_max'] :
scene.objects['Level_text'].color = color_text_red
scene.objects['Points-Level-text'].color = color_text_red
if scene.objects['Points']['level'] < scene.objects['Points']['level_max'] :
scene.objects['Level_text'].color = color_text_yellow
scene.objects['Points-Level-text'].color = color_text_yellow
if scene.objects['Points']['level'] == scene.objects['Points']['level_max']:
scene.objects['Level_text'].color = color_text
scene.objects['Points-Level-text'].color = color_text
# Ramassage des minions perdues ou zombis
if scene.objects['Terrain']['run'] == True: # Pas en pause
@ -244,7 +244,7 @@ def scn_terrain_mo (cont):
scene.objects['Tower_construc_mode'].worldPosition.y=round(hitPosition.y)
scene.objects['Tower_construc_mode'].worldPosition.z=0.2
text_info ("Tower position : "+str(round(hitPosition.x))+","+str(round(hitPosition.y)))
scene.objects['Cmd_text']['Text']= ""
scene.objects['Cmd-text']['Text']= ""
# Affiche les informations sur la tour
# FIXME : High-light sur la tower sélectionnée
@ -262,7 +262,7 @@ def scn_terrain_mo (cont):
text_info ("")
# Initialisation lors du chargement du terrain
def terrain_init (cont):
def terrain_init ():
# Cacher la bannière de fin
scene.objects['End'].setVisible(False,True)
@ -270,9 +270,11 @@ def terrain_init (cont):
scene.objects['Doc'].setVisible(False,True)
# Pile des draws
scene.objects['Terrain']['draw_process']=False
scene.objects['Terrain']['draw_list']=[]
scene.objects['Terrain']['draw2d_process']=False
scene.objects['Terrain']['draw2d_list']=[]
scene.objects['Terrain']['draw3d_process']=False
scene.objects['Terrain']['draw3d_list']=[]
# Ramasse-miettes
scene.objects['Points']['minions_lost']=[]
@ -297,7 +299,7 @@ def terrain_init (cont):
# Init de la carte
ct_map.map_init()
ct_map.map_reset()
scene.objects['Level_text'].color = color_text
scene.objects['Points-Level-text'].color = color_text
# Mise en route et pause du cycle
def terrain_run ():
@ -312,8 +314,8 @@ def terrain_run ():
scene.objects['Pause-Hl'].setVisible(False,False)
scene.objects['Run']. restorePhysics()
scene.objects['Run-Hl'].setVisible(True,False)
scene.objects['Cmd_text']['Text']= "Run (F5)"
scene.objects['Cmd_text'].setVisible(True,False) # FIXME : suppresion de du message
scene.objects['Cmd-text']['Text']= "Run (F5)"
scene.objects['Cmd-text'].setVisible(True,False) # FIXME : suppresion de du message
for obj_i in scene.objects: # Pause des Steerings
if "type_minion" in obj_i.getPropertyNames() and "type_towerminion" not in obj_i.getPropertyNames():
obj_i.actuators['Steering'].velocity=0
@ -327,8 +329,8 @@ def terrain_run ():
scene.objects['Run-Hl'].setVisible(False,False)
scene.objects['Pause']. restorePhysics()
scene.objects['Pause-Hl'].setVisible(True,False)
scene.objects['Cmd_text']['Text']= "Pause (F5)"
scene.objects['Cmd_text'].setVisible(True,False)
scene.objects['Cmd-text']['Text']= "Pause (F5)"
scene.objects['Cmd-text'].setVisible(True,False)
# Démarrage de la map
if scene.objects['Terrain']['thread_run']==False:
@ -394,7 +396,7 @@ def terrain_stop ():
scene.objects['Stop'].setVisible(False,False)
scene.objects['Stop'].suspendPhysics()
scene.objects['Stop-Hl'].setVisible(False,False)
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
# Fin de la map
def terrain_end ():
@ -536,8 +538,8 @@ def sound_set ():
scene.objects['Sound-cmd']. restorePhysics()
scene.objects['Sound-cmd-Hl'].setVisible(True,False)
scene.objects['Commands']['sound']=True
scene.objects['Cmd_text']['Text']= "Mute"
scene.objects['Cmd_text'].setVisible(True,False)
scene.objects['Cmd-text']['Text']= "Mute"
scene.objects['Cmd-text'].setVisible(True,False)
# Maj du fichier de config (sound : data/config/sound -> [0][1].text)
ct_config_tree[0][1].text=str(scene.objects['Commands']['sound'])
@ -552,8 +554,8 @@ def sound_unset ():
scene.objects['NoSound-cmd']. restorePhysics()
scene.objects['NoSound-cmd-Hl'].setVisible(True,False)
scene.objects['Commands']['sound']=False
scene.objects['Cmd_text']['Text']= "Unmute"
scene.objects['Cmd_text'].setVisible(True,False)
scene.objects['Cmd-text']['Text']= "Unmute"
scene.objects['Cmd-text'].setVisible(True,False)
# Maj du fichier de config (sound : data/config/sound -> [0][1].text)
ct_config_tree[0][1].text=str(scene.objects['Commands']['sound'])
@ -594,10 +596,10 @@ def cmd_init():
audiodev.unlock()
# UI : Text, ...
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Map_text'].setVisible(False,False)
scene.objects['Text_info-1'].setVisible(False,False)
scene.objects['Text_info-2'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
scene.objects['Points-Map-text'].setVisible(False,False)
scene.objects['Info-1-text'].setVisible(False,False)
scene.objects['Info-2-text'].setVisible(False,False)
scene.objects['Tower_construc_mode'].setVisible(False,False)
scene.objects['Terrain']['map_run'] = False
@ -663,43 +665,43 @@ def cmd_hl(cont):
text=text_hl[obj.name]
if obj.name == "Construc" and scene.objects['Terrain']['construct_mode']==True: # Bascule le construct
text="Hide tower position"
scene.objects['Cmd_text']['Text']= text
scene.objects['Cmd_text'].setVisible(True,False)
scene.objects['Cmd-text']['Text']= text
scene.objects['Cmd-text'].setVisible(True,False)
# Désactivation
if cont.sensors['MO'].status == JUST_RELEASED and (scene.objects['Terrain']['manip_mode']==0 or scene.objects['Terrain']['manip_mode']==9):
if obj.name!="Run" and obj.name!="Pause" and obj.name!="Stop" and obj.name!="Sound-cmd" and obj.name!="NoSound-cmd":
scene.objects[obj.name+'-Hl'].setVisible(False,True)
obj.setVisible(True,True)
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
# Run et pause
if obj.name=="Pause" or obj.name=="Run":
if scene.objects['Terrain']['run'] == True:
scene.objects['Pause-Hl'].setVisible(False,False)
scene.objects['Pause'].setVisible(True,False)
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
else:
scene.objects['Run-Hl'].setVisible(False,False)
scene.objects['Run'].setVisible(True,False)
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
# Stop
if obj.name=="Stop":
if scene.objects['Terrain']['thread_run']==True:
scene.objects['Stop-Hl'].setVisible(False,False)
scene.objects['Stop'].setVisible(True,False)
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
# Sound
if obj.name=="NoSound-cmd" and scene.objects['Commands']['sound']==False:
scene.objects['NoSound-cmd-Hl'].setVisible(False,False)
scene.objects['NoSound-cmd'].setVisible(True,False)
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
if obj.name=="Sound-cmd" and scene.objects['Commands']['sound']==True:
scene.objects['Sound-cmd-Hl'].setVisible(False,False)
scene.objects['Sound-cmd'].setVisible(True,False)
scene.objects['Cmd_text'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False)
# Click sur les commandes
def cmd_click (cont):
@ -826,9 +828,9 @@ def manip_init(cont):
scene.objects['Points']['init_lx']=scene.objects['Points'].worldPosition.x
scene.objects['Points']['init_ly']=scene.objects['Points'].worldPosition.y
scene.objects['Points']['init_lz']=scene.objects['Points'].worldPosition.z
scene.objects['Map_text']['init_relativ_lx']=scene.objects['Map_text'].worldPosition.x-scene.objects['Points'].worldPosition.x
scene.objects['Map_text']['init_relativ_ly']=scene.objects['Map_text'].worldPosition.y-scene.objects['Points'].worldPosition.y
scene.objects['Map_text']['init_relativ_lz']=scene.objects['Map_text'].worldPosition.z-scene.objects['Points'].worldPosition.z
scene.objects['Points-Map-text']['init_relativ_lx']=scene.objects['Points-Map-text'].worldPosition.x-scene.objects['Points'].worldPosition.x
scene.objects['Points-Map-text']['init_relativ_ly']=scene.objects['Points-Map-text'].worldPosition.y-scene.objects['Points'].worldPosition.y
scene.objects['Points-Map-text']['init_relativ_lz']=scene.objects['Points-Map-text'].worldPosition.z-scene.objects['Points'].worldPosition.z
# Atteindre une orientation (bas niveau)
def applyRotationTo(obj, rx=None, ry=None, rz=None, Local=True):
@ -873,7 +875,7 @@ def manip_reset():
scene.objects['Points'].worldPosition.y = scene.objects['Points']['init_ly']
scene.objects['Points'].worldPosition.z = scene.objects['Points']['init_lz']
applyRotationTo(scene.objects['Terrain'], 0, 0, 0)
scene.objects['Cmd_text']['Text']= ""
scene.objects['Cmd-text']['Text']= ""
# Position de départ pour la manipulation de la vue
def manip_start(cont):
@ -1113,13 +1115,13 @@ def about_open():
scene.objects['About_title'].color = color_black
scene.objects['About_text'].color = color_black
scene.objects['About_copyright'].color = color_black
scene.objects['About_link_git'].color= color_link
scene.objects['About_link_gpl'].color= color_link
# scene.objects['About_link_blender'].color= color_link
scene.objects['About_link_upbge'].color= color_link
scene.objects['About_link_kay'].color= color_link
scene.objects['About_link_kenney'].color= color_link
scene.objects['About_ok'].color= color_link
scene.objects['About_link-git'].color= color_link
scene.objects['About_link-gpl'].color= color_link
# scene.objects['About_link-blender'].color= color_link
scene.objects['About_link-upbge'].color= color_link
scene.objects['About_link-kay'].color= color_link
scene.objects['About_link-kenney'].color= color_link
scene.objects['About_close'].color= color_link
scene.objects['About'].setVisible(True,True)
scene.objects['About'].worldPosition = [0, 1.53623, -1.8] # old [0, 1.53623, -0.892838]
scene.objects['About']['timer'] = 0
@ -1150,7 +1152,7 @@ def about_hl(cont):
# dist= scene.objects['Mouse_main'].getDistanceTo(scene.objects['Camera'])
# scene.objects['Mouse_main'].worldScale *= (dist/dist_past) *size_scale
scene.objects['Aboutbanner'].color = color_white
scene.objects['About_ok'].color = color_white
scene.objects['About_close'].color = color_white
scene.objects['About_title'].color = color_white
# scene.objects['Mouse_main'].worldScale=[8, 8, 8]
# print("about_hl A après", scene.objects['Mouse_main'].worldPosition)
@ -1166,7 +1168,7 @@ def about_hl(cont):
# dist= scene.objects['Mouse_main'].getDistanceTo(scene.objects['Camera'])
# scene.objects['Mouse_main'].worldScale /= (dist_past/dist) *size_scale
scene.objects['Aboutbanner'].color = color_endbanner_bluelight
scene.objects['About_ok'].color = color_link
scene.objects['About_close'].color = color_link
scene.objects['About_title'].color = color_black
# scene.objects['Mouse_main'].worldScale=[30, 30, 30]
# print("about_hl R après", scene.objects['Mouse_main'].worldPosition)
@ -1191,12 +1193,12 @@ def about_link(cont):
obj = cont.owner
name=obj.name[:-7]
link={
'About_link_git' : 'https://gitlab.com/phroy/codetower',
'About_link_gpl' : 'https://www.gnu.org/licenses/gpl-3.0.html',
'About_link_blender': 'https://www.blender.org',
'About_link_upbge' : 'https://www.upbge.org',
'About_link_kay' : 'https://www.kaylousberg.com',
'About_link_kenney' : 'https://www.kenney.nl'}
'About_link-git' : 'https://gitlab.com/phroy/codetower',
'About_link-gpl' : 'https://www.gnu.org/licenses/gpl-3.0.html',
'About_link-blender': 'https://www.blender.org',
'About_link-upbge' : 'https://www.upbge.org',
'About_link-kay' : 'https://www.kaylousberg.com',
'About_link-kenney' : 'https://www.kenney.nl'}
webbrowser.open(link [name])
# FIXME: souris graphique trop compliqué

View File

@ -1,6 +1,6 @@
<data>
<config>
<speed>2.0</speed>
<sound>False</sound>
<speed>4.0</speed>
<sound>True</sound>
</config>
</data>

167
ct_lib.py
View File

@ -173,7 +173,7 @@ def sound_play (sound):
###############################################################################
# Minion caracteristics : category (class), level, hp, speed, armor, bounty, lifes_damage
# Minion 3d object : body (male,female,old, ...), variante (A,B,C,D, ...), level
# Minion 3d body : body (male,female,old, ...), variante (A,B,C,D, ...), level
# Création d'un minion
def ct_minion_create(x,y,cat,level):
@ -299,17 +299,17 @@ def scn_minion_affect(cont):
# Tower caracteristics : category (class), damage, speed, range
# Création d'une tour
def ct_build(x,y, cat='Archer tower', tower_name="Tower", color=tower_purple, tower_3d="square-A"):
def ct_build(x,y, cat='Archer tower', tower_name="Tower", color=tower_purple, building="square-A"):
tower_minion_3d= scene.objects['Terrain']['tower_minion_3d']
if cat=='Archer tower': # Archer
category="Archer-lv1"
if cat=='Mage tower': # Mage
category="Mage-lv1"
body = random.choice(tower_minion_3d[category][0])+"_"+random.choice(tower_minion_3d[category][1])+"_"+random.choice(tower_minion_3d[category][2])
ct_build_details(x,y, cat, tower_name, color, tower_3d, body)
return (ct_build_details(x,y, cat, tower_name, color, building, body))
# Création d'une tour détaillée
def ct_build_details(x,y, cat='Archer tower', tower_name="Tower", color=tower_purple, tower_3d="square-A", body="Archer_m_A_common"):
def ct_build_details(x,y, cat='Archer tower', tower_name="Tower", color=tower_purple, building="square-A", body="Archer_m_A_common"):
# Vérification de la place
if [x,y] in scene.objects['Terrain']['scene_tile_noncontruct'] or [x,y] in scene.objects['Terrain']['scene_tile_tower']:
@ -329,11 +329,12 @@ def ct_build_details(x,y, cat='Archer tower', tower_name="Tower", color=tower_pu
# Objets 3D
time.sleep(0.02)
tour= scene.addObject('Tower-'+tower_3d, scene.objects['Terrain'])
tour= scene.addObject('Tower-'+building, scene.objects['Terrain'])
time.sleep(0.02)
tour.color = color
tour.worldPosition=[x,y,0.2]
tour.worldScale=[1,1,1]
tour.name="tower("+str(x)+','+str(y)+")"
scene.objects['Terrain']['scene_tile_tower'].append([x,y])
tower_minion= scene.addObject(body, scene.objects['Terrain'])
tower_minion["type_towerminion"]=False
@ -341,6 +342,23 @@ def ct_build_details(x,y, cat='Archer tower', tower_name="Tower", color=tower_pu
tower_minion.worldPosition=[x,y,1]
tower_minion.worldScale=[0.25,0.25,0.25]
# Draw3d
if cat=='Archer tower':
bullet1= scene.addObject("Bullet", scene.objects['Terrain'])
bullet1.name="tower("+str(x)+','+str(y)+")-bullet1" # Tower bullet 1 (tb)
bullet1.mass=0.001
bullet1.worldPosition=[x,y,1.5]
bullet1.worldScale=[0.75,0.75,0.75]
bullet1.suspendPhysics (True)
bullet1.setVisible(False)
bullet2= scene.addObject("Bullet", scene.objects['Terrain'])
bullet2.name="tower("+str(x)+','+str(y)+")-bullet2" # Tower bullet 2 (tb)
bullet2.mass=0.001
bullet2.worldPosition=[x,y,1.5]
bullet2.worldScale=[0.75,0.75,0.75]
bullet2.suspendPhysics (True)
bullet2.setVisible(False)
# Sounds
sound_play(sndbuff_build)
@ -435,7 +453,6 @@ def scn_tower_near(cont):
# for obj_i in sensor.hitObjectList:
# obj['target_past'].append([obj_i.name, obj.getDistanceTo(obj_i)])
# Orientation du tower minion
towerminion="tm("+str(round(obj.worldPosition.x))+','+str(round(obj.worldPosition.y))+")"
angle =math.atan((target.worldPosition.y-obj.worldPosition.y)/(target.worldPosition.x-obj.worldPosition.x))
@ -471,19 +488,21 @@ def scn_tower_near(cont):
# Archer (tir de flêche)
if obj['cat']=="Archer tower":
if target.name in scene.objects:
scene.objects['Terrain']['draw_process']=True
scene.objects['Terrain']['draw_list'].append([5, "arrow", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8],target.name, angle3, ray_black, 5])
# scene.objects['Terrain']['draw2d_process']=True
# scene.objects['Terrain']['draw2d_list'].append([5, "arrow", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8],target.name, angle3, ray_black, 5])
scene.objects['Terrain']['draw3d_process']=True
scene.objects['Terrain']['draw3d_list'].append([5, "arrow", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8], obj.name, target.name, angle3, ray_black, 5])
# Cast zone
if obj['cat']=="Mage tower": # Mage (cast)
scene.objects['Terrain']['draw_process']=True
scene.objects['Terrain']['draw_list'].append([30, "cast", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8],ray_blue,30])
scene.objects['Terrain']['draw2d_process']=True
scene.objects['Terrain']['draw2d_list'].append([30, "cast", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8],ray_blue,30])
# Rayon
if obj['cat']=="Test":
if target.name in scene.objects:
scene.objects['Terrain']['draw_process']=True
scene.objects['Terrain']['draw_list'].append([5, "ray", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8], target.name, angle3, ray_yellow,5]) # Suivi du minion
scene.objects['Terrain']['draw2d_process']=True
scene.objects['Terrain']['draw2d_list'].append([5, "ray", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8], target.name, angle3, ray_yellow,5]) # Suivi du minion
# Dégats
target['hp'] = target['hp'] - obj['damage']
@ -501,16 +520,16 @@ def scn_tower_near(cont):
# Texte de carte
def ct_map_text_wave(wave):
scene.objects['Map_text']['Text']=("Wave " + str(wave))
scene.objects['Map_text'].setVisible(True,False)
scene.objects['Map_text'].color = color_text_yellow
scene.objects['Map_text']['timer']=0
scene.objects['Map_text']['anim']=True
scene.objects['Points-Map-text']['Text']=("Wave " + str(wave))
scene.objects['Points-Map-text'].setVisible(True,False)
scene.objects['Points-Map-text'].color = color_text_yellow
scene.objects['Points-Map-text']['timer']=0
scene.objects['Points-Map-text']['anim']=True
# Texte de carte
def ct_map_text(text):
scene.objects['Map_text']['Text']=text
scene.objects['Map_text'].setVisible(True,False)
scene.objects['Points-Map-text']['Text']=text
scene.objects['Points-Map-text'].setVisible(True,False)
# Fin
def ct_map_end(x,y):
@ -602,19 +621,93 @@ def ct_sleep (duration):
def ct_print (text):
# text_info (texte)
if text=="":
scene.objects['Text_info-1'].setVisible(False,False)
scene.objects['Text_info-2'].setVisible(False,False)
scene.objects['Info-1-text'].setVisible(False,False)
scene.objects['Info-2-text'].setVisible(False,False)
else:
lines_txt=text.split("\n", 6)
for i in range (len(lines_txt),6):
lines_txt.append("")
scene.objects['Text_info-1'].setVisible(True,False)
scene.objects['Text_info-2'].setVisible(True,False)
scene.objects['Text_info-1']['Text']=lines_txt[0]+"\n"+lines_txt[1]+"\n"+lines_txt[2]
scene.objects['Text_info-2']['Text']=lines_txt[3]+"\n"+lines_txt[4]+"\n"+lines_txt[5]
scene.objects['Info-1-text'].setVisible(True,False)
scene.objects['Info-2-text'].setVisible(True,False)
scene.objects['Info-1-text']['Text']=lines_txt[0]+"\n"+lines_txt[1]+"\n"+lines_txt[2]
scene.objects['Info-2-text']['Text']=lines_txt[3]+"\n"+lines_txt[4]+"\n"+lines_txt[5]
###############################################################################
# Dessin bas niveau (bge.render.drawLine)
# Dessin 3d
###############################################################################
# scene.objects['Terrain']['draw3d_list'].append([5, "arrow", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8], obj.name, target.name, angle3, ray_black, 5])
def scn_draw3d(cont):
obj = cont.owner
if obj.sensors['Draw3d'].positive==False:
return
if len(scene.objects['Terrain']['draw3d_list'])==0:
scene.objects['Terrain']['draw3d_process']=False
return
# Dépilage des draws à executer
for draw_cmd in scene.objects['Terrain']['draw3d_list']:
# Archer (tir de flêche)
if draw_cmd[1]=="arrow":
if draw_cmd[3] in scene.objects:
bullet1.name=draw_cmd[3]+"-bullet1"
if scene.objects['Terrain']['speed']<1:
draw_cmd[0] = draw_cmd[0]-scene.objects['Terrain']['speed']
else:
draw_cmd[0] = draw_cmd[0]-1
bullet1.name="tower("+str(x)+','+str(y)+")-bullet1" # Tower bullet 1 (tb)
# bullet= scene.addObject("Bullet", scene.objects['Terrain'])
# bullet.mass=0.001 # bullet.applyForce=((0,0,9.81),True)
# bullet.worldPosition=[obj.worldPosition.x,obj.worldPosition.y,1.5]
# bullet.worldScale=[0.75,0.75,0.75]
# # bullet.worldScale=[0.5,0.5,0.5]
# bullet.worldLinearVelocity.x = (target.worldPosition.x-bullet.worldPosition.x)*bullet['velocity']
# bullet.worldLinearVelocity.y= (target.worldPosition.y-bullet.worldPosition.y)*bullet['velocity']
# bullet.worldLinearVelocity.z = (target.worldPosition.z+0.1-bullet.worldPosition.z)*bullet['velocity']
# # x0 = draw_cmd[2][0]+0.25*(math.cos(draw_cmd[4]))
# # y0 = draw_cmd[2][1]+0.25*(math.sin(draw_cmd[4]))
# x0 = draw_cmd[2][0]
# y0 = draw_cmd[2][1]
# z0 = draw_cmd[2][2]
# x1 = scene.objects[draw_cmd[3]].worldPosition.x
# y1 = scene.objects[draw_cmd[3]].worldPosition.y
# z1 = scene.objects[draw_cmd[3]].worldPosition.z-0.1 # ajustement -0.1
# distance = math.sqrt((x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
# distance_xy = math.sqrt((x1-x0)**2+(y1-y0)**2)
# distance_z = z1-z0
# angle_z =math.atan((z1-z0)/(distance_xy))
# angle_xy =math.atan((y1-y0)/(x1-x0))
# step=distance_xy/(2+draw_cmd[6])
# step_z=distance_z/(2+draw_cmd[6])
# if x1>x0:
# angle2=angle_xy
# else:
# angle2=math.pi+angle_xy
# x2=x0+(((6-draw_cmd[0])*step)*(math.cos(angle2)))
# y2=y0+(((6-draw_cmd[0])*step)*(math.sin(angle2)))
# z2=z0-(((6-draw_cmd[0])*step_z)*(math.sin(angle_z)))
# x3=x0+(((6-draw_cmd[0])*step+step)*(math.cos(angle2)))
# y3=y0+(((6-draw_cmd[0])*step+step)*(math.sin(angle2)))
# z3=z0-(((6-draw_cmd[0])*step_z+step_z)*(math.sin(angle_z)))
# bge.render.drawLine([x2,y2, z2], [x3,y3,z3], draw_cmd[5])
# draw_cmd[0] = draw_cmd[0]-scene.objects['Terrain']['speed']
# # if scene.objects['Terrain']['speed']<1:
# # draw_cmd[0] = draw_cmd[0]-scene.objects['Terrain']['speed']
# # else:
# # draw_cmd[0] = draw_cmd[0]-1
# # bge.render.drawLine([draw_cmd[2][0]+((6-draw_cmd[0])*0.25)*(math.cos(draw_cmd[4])), draw_cmd[2][1]+((6-draw_cmd[0])*0.25)*(math.sin(draw_cmd[4])),draw_cmd[2][2]],
# # [draw_cmd[2][0]+((6-draw_cmd[0])*0.25+0.25)*(math.cos(draw_cmd[4])), draw_cmd[2][1]+((6-draw_cmd[0])*0.25+0.25)*(math.sin(draw_cmd[4])),draw_cmd[2][2]],
# # draw_cmd[5])
###############################################################################
# Dessin 2d (bge.render.drawLine)
###############################################################################
def circle (center, radius, color):
@ -629,23 +722,23 @@ def circle (center, radius, color):
bge.render.drawLine([x0,y0,center[2]],[x1,y1,center[2]],color)
ang += ang_step
# Affiche les draws en cours
# Affiche les draws 2d en cours
#
# Type de draw :
# Type de draw 2d:
# arrow : [5, "arrow", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8],target.name, angle3, ray_yellow,5]
# cast : [30, "cast", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8], ray_blue,30]
# ray : [5, "ray", [obj.worldPosition.x, obj.worldPosition.y, obj.worldPosition.z+0.8],[target.worldPosition.x, target.worldPosition.y, target.worldPosition.z], angle3, ray_yellow,5]
#
def scn_draw(cont):
def scn_draw2d(cont):
obj = cont.owner
if obj.sensors['Draw'].positive==False:
if obj.sensors['Draw2d'].positive==False:
return
if len(scene.objects['Terrain']['draw_list'])==0:
scene.objects['Terrain']['draw_process']=False
if len(scene.objects['Terrain']['draw2d_list'])==0:
scene.objects['Terrain']['draw2d_process']=False
return
# Dépilage des draws à executer
for draw_cmd in scene.objects['Terrain']['draw_list']:
for draw_cmd in scene.objects['Terrain']['draw2d_list']:
# Archer (tir de flêche)
if draw_cmd[1]=="arrow":
@ -715,10 +808,10 @@ def scn_draw(cont):
# Suppression des draws finis
i=0
for draw_cmd in scene.objects['Terrain']['draw_list']:
for draw_cmd in scene.objects['Terrain']['draw2d_list']:
if draw_cmd[0]<=0:
scene.objects['Terrain']['draw_list'].pop(i)
scene.objects['Terrain']['draw2d_list'].pop(i)
else:
i=i+1
if len(scene.objects['Terrain']['draw_list'])==0:
scene.objects['Terrain']['draw_process']=False
if len(scene.objects['Terrain']['draw2d_list'])==0:
scene.objects['Terrain']['draw2d_process']=False

View File

@ -129,8 +129,6 @@ def wave1():
ct_map_text_wave(1)
wave_minion_name=[]
for i in range (15):
# ct_minion(14,3,"Orc",1)
# ct_minion_details(14,3,"Orc",1, "Orc_A_common")
wave_minion_name.append(ct_minion_create_details(14,3,"Orc",1, "Orc_A_common"))
for i in range (len(wave_minion_name)):
ct_minion_go(wave_minion_name[i])
@ -143,7 +141,6 @@ def wave2():
wave_minion_name=[]
for i in range (20):
wave_minion_name.append(ct_minion_create(14,3,"Orc",1))
# ct_minion_details(14,3,"Orc",1, "Orc_A_common")
for i in range (len(wave_minion_name)):
ct_minion_go(wave_minion_name[i])
ct_sleep (1)
@ -155,8 +152,6 @@ def wave3():
wave_minion_name=[]
for i in range (30):
wave_minion_name.append(ct_minion_create(14,3,"Orc",1))
# ct_minion_details(14,3,"Orc",1, "Orc_A_common")
# ct_minion(14,3,"Knight",1)
for i in range (len(wave_minion_name)):
ct_minion_go(wave_minion_name[i])
ct_sleep (1)
@ -168,7 +163,6 @@ def wave4():
wave_minion_name_group1=[]
wave_minion_name_group2=[]
for i in range (20):
# ct_minion(14,3,"Orc",1)
wave_minion_name_group1.append(ct_minion_create(14,2.5,"Orc",1))
wave_minion_name_group2.append(ct_minion_create(14,3,"Knight",1))
for i in range (len(wave_minion_name_group1)):
@ -225,7 +219,7 @@ def map_init():
directory=os.path.join(file_path, inner_path),
filename=object_name)
# Ajout des sorties
# Exit
scene.objects['Terrain']['endtile'] = "tile_straight.036"
ct_map_end(1,-10)
ct_map_endflag(0.5,-10)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 202 KiB