2022-04-22 02:04:48 +02:00
import bge # Bibliothèque Blender Game Engine (UPBGE)
2022-04-22 16:54:49 +02:00
import aud # Sounds
2022-04-22 02:04:48 +02:00
###############################################################################
# ct_doc.py
# @title: Documentation
# @project: CodeTower
# @lang: fr,en
# @authors: Philippe Roy <phroy@phroy.org>
# @copyright: Copyright (C) 2022 Philippe Roy
# @license: GNU GPL
#
# This game is a tower defense coding game. The towers are driven by Python code.
# The file is the the map and waves definition.
#
###############################################################################
scene = bge . logic . getCurrentScene ( )
# Colors
color_doc_chap = ( 0.153 , 0.116 , 0.105 , 1 ) # WoodDark
color_doc_fct = ( 0.326 , 0.101 , 0.0592 , 1 ) # BrownDark
# color_doc_fct = (0.577, 0.233, 0.115, 1) # Brown
# color_doc_hl = (0.799, 0.617, 0.021, 1) # Yellow
color_doc_hl = ( 0.13 , 0.254 , 0.407 , 1 ) # BlueDark
color_doc_activate = ( 1.0 , 0.025 , 0.116 , 1 ) # Red
2022-04-22 16:54:49 +02:00
# Sounds
audiodev = aud . Device ( )
snd_book_flip = aud . Sound ( ' asset/sounds/book_flip.ogg ' )
sndbuff_book_flip = aud . Sound . cache ( snd_book_flip )
2022-04-22 02:04:48 +02:00
# UPBGE constants
JUST_ACTIVATED = bge . logic . KX_INPUT_JUST_ACTIVATED
JUST_RELEASED = bge . logic . KX_INPUT_JUST_RELEASED
ACTIVATE = bge . logic . KX_INPUT_ACTIVE
# JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED
###############################################################################
# Map
###############################################################################
map_fct = [ " ct_level " , " ct_sleep " ]
2022-04-22 16:54:49 +02:00
# ct_level ()
2022-04-22 02:04:48 +02:00
ct_level_title = " Get your level "
ct_level_text = " ct_level () \n \v - Return your level (integer) "
2022-04-22 16:54:49 +02:00
# ct_sleep (delay)
2022-04-22 02:04:48 +02:00
ct_sleep_title = " Time management "
ct_sleep_text = " ct_sleep (delay) \n \v - delay : duration in seconds (float) "
map_fct_title = [ ct_level_title , ct_sleep_title ]
map_fct_text = [ ct_level_text , ct_sleep_text ]
###############################################################################
# Tower
###############################################################################
tower_fct = [ " ct_build " , " ct_remove " ]
2022-04-22 16:54:49 +02:00
# ct_build (x, y, category, name, color, style)
2022-04-22 02:04:48 +02:00
ct_build_title = " Build a tower "
ct_build_text = " ct_build (x,y, category, name, color, style) \n \v - x position (integer) \n \v - y position (integer) \n "
ct_build_text = ct_build_text + " \v - category (string) : \n \v \v - \" Archer tower \" (default value) \n \v \v - \" Mage tower \" \n "
ct_build_text = ct_build_text + " \v - name (string) \n \v - color (RGB tuple, default=purple) \n "
ct_build_text = ct_build_text + " \v - style (string) : \n \v \v - \" square \" (default value) or \" round \" \n \v \v - version : A (default value), B or C \n \v \v - exemple : ' round-B ' \n "
ct_build_text = ct_build_text + " \v - Return boolean flag (builded -> True) \n \n "
2022-04-22 16:54:49 +02:00
ct_build_text = ct_build_text + " Predefined colors : blue, green, magenta, \n orange, purple, red, turquoise, yellow. \n \n "
2022-04-22 02:04:48 +02:00
ct_build_text = ct_build_text + " Exemple : ct_build (1, 1, \" Archer tower \" , \n \" Tower #1 \" , yellow, \" round-A \" ) \n "
2022-04-22 16:54:49 +02:00
# ct_remove (x, y)
2022-04-22 02:04:48 +02:00
ct_remove_title = " Remove a tower "
ct_remove_text = " ct_remove (x, y) \n \v - x position (integer) \n \v - y position (integer) \n "
tower_fct_title = [ ct_build_title , ct_remove_title ]
tower_fct_text = [ ct_build_text , ct_remove_text ]
###############################################################################
# Tech
###############################################################################
tech_fct = [ ]
tech_fct_title = [ ]
tech_fct_text = [ ]
###############################################################################
# Spell
###############################################################################
spell_fct = [ ]
spell_fct_title = [ ]
spell_fct_text = [ ]
###############################################################################
# General
###############################################################################
fct = {
' Book_chap-screen ' : " " ,
' Book_chap-map ' : map_fct ,
' Book_chap-tower ' : tower_fct ,
' Book_chap-tech ' : tech_fct ,
' Book_chap-spell ' : spell_fct }
fct_title = {
' Book_chap-screen ' : " " ,
' Book_chap-map ' : map_fct_title ,
' Book_chap-tower ' : tower_fct_title ,
' Book_chap-tech ' : tech_fct_title ,
' Book_chap-spell ' : spell_fct_title }
fct_text = {
' Book_chap-screen ' : " " ,
' Book_chap-map ' : map_fct_text ,
' Book_chap-tower ' : tower_fct_text ,
' Book_chap-tech ' : tech_fct_text ,
' Book_chap-spell ' : spell_fct_text }
2022-04-22 16:54:49 +02:00
###############################################################################
# Interface
###############################################################################
# Sounds
def sound_play ( sound ) :
if scene . objects [ ' Commands ' ] [ ' sound ' ] :
audiodev . play ( sound )
2022-04-22 02:04:48 +02:00
# Afficher le chapitre
def chapter ( cont ) :
2022-04-22 16:54:49 +02:00
if cont . sensors [ ' Click ' ] . status == JUST_ACTIVATED and cont . sensors [ ' MO ' ] . positive and cont . sensors [ ' Click ' ] . positive :
sound_play ( sndbuff_book_flip )
2022-04-22 02:04:48 +02:00
obj = cont . owner
name_chap = obj . name [ : - 7 ]
# Highlight des onglets
scene . objects [ ' Book_chap-screen ' ] . color = color_doc_chap
scene . objects [ ' Book_chap-map ' ] . color = color_doc_chap
scene . objects [ ' Book_chap-tower ' ] . color = color_doc_chap
scene . objects [ ' Book_chap-tech ' ] . color = color_doc_chap
scene . objects [ ' Book_chap-spell ' ] . color = color_doc_chap
scene . objects [ name_chap ] . color = color_doc_activate
scene . objects [ " Book " ] [ ' page_chap ' ] = name_chap
# Tout effacer (fonctions + texte)
for i in range ( 1 , 13 ) :
if i < 10 :
name_fct = " Book_fct-0 " + str ( i )
else :
name_fct = " Book_fct- " + str ( i )
scene . objects [ name_fct ] . setVisible ( False , False )
scene . objects [ name_fct ] . color = color_doc_fct
2022-04-22 16:54:49 +02:00
scene . objects [ " Book " ] [ ' page_fct ' ] = " "
2022-04-22 02:04:48 +02:00
scene . objects [ ' Book_text_title ' ] . setVisible ( False , True )
scene . objects [ ' Book_text ' ] . setVisible ( False , True )
# Afficher la page Ecran
if name_chap == " Book_chap-screen " :
scene . objects [ ' Book_page_screen ' ] . worldPosition = scene . objects [ ' Book ' ] . worldPosition
scene . objects [ ' Book_page_screen ' ] . setVisible ( True , True )
# Afficher les fonctions
if name_chap != " Book_chap-screen " :
scene . objects [ ' Book_page_screen ' ] . setVisible ( False , True )
if len ( fct [ name_chap ] ) == 0 :
scene . objects [ ' Book_text ' ] [ ' Text ' ] = " No functions yet. \n Work in progress... "
scene . objects [ ' Book_text ' ] . setVisible ( True , True )
for i in range ( len ( fct [ name_chap ] ) ) :
j = i + 1
if j < 10 :
name_fct = " Book_fct-0 " + str ( j )
else :
name_fct = " Book_fct- " + str ( j )
scene . objects [ name_fct ] [ ' Text ' ] = fct [ name_chap ] [ i ]
scene . objects [ name_fct ] . setVisible ( True , False )
# Afficher les details de la fonction
def function ( cont ) :
if cont . sensors [ ' Click ' ] . status == JUST_ACTIVATED and cont . sensors [ ' MO ' ] . positive :
2022-04-22 16:54:49 +02:00
sound_play ( sndbuff_book_flip )
2022-04-22 02:04:48 +02:00
obj = cont . owner
# Highlight des fonctions
for i in range ( 1 , 13 ) :
if i < 10 :
name_fct = " Book_fct-0 " + str ( i )
else :
name_fct = " Book_fct- " + str ( i )
scene . objects [ name_fct ] . color = color_doc_fct
scene . objects [ obj . name [ : - 7 ] ] . color = color_doc_activate
scene . objects [ " Book " ] [ ' page_fct ' ] = obj . name [ : - 7 ]
# Afficher le texte de la fonction
name_chap = scene . objects [ " Book " ] [ ' page_chap ' ]
nb = int ( obj . name [ 9 : 11 ] ) - 1
scene . objects [ ' Book_text_title ' ] [ ' Text ' ] = fct_title [ name_chap ] [ nb ]
scene . objects [ ' Book_text ' ] [ ' Text ' ] = fct_text [ name_chap ] [ nb ]
scene . objects [ ' Book_text_title ' ] . setVisible ( True , True )
scene . objects [ ' Book_text ' ] . setVisible ( True , False )