From f15140c1fcb55883dda7ac9070d3d2a13e3a9763 Mon Sep 17 00:00:00 2001 From: Jeffrey Kirchner Date: Mon, 11 Sep 2023 11:51:19 -0700 Subject: [PATCH] rename grove to patch. fixes #91. --- .../subject_updates.py | 52 ++-- .../staff/session_consumer_mixins/timer.py | 12 +- .../__init__.py | 2 +- ...set_groves.py => parameter_set_patches.py} | 93 +++--- .../staff_session_parameters_consumer.py | 2 +- .../subject_home_consumer_mixins/interface.py | 4 +- main/forms/__init__.py | 2 +- main/forms/parameter_set_form.py | 6 +- ...ve_form.py => parameter_set_patch_form.py} | 30 +- .../0099_parametersetpatch_and_more.py | 58 ++++ main/models/__init__.py | 2 +- main/models/parameter_set.py | 30 +- ...er_set_grove.py => parameter_set_patch.py} | 22 +- main/models/session.py | 44 +-- main/models/session_period.py | 30 +- .../staff/staff_session/staff_session.js | 22 +- .../staff/staff_session_parameters.html | 4 +- .../general_settings/general_settings.js | 2 +- .../general_settings_card.html | 4 +- .../staff_session_parameters/groves/groves.js | 50 --- .../edit_parameterset_patch_modal.html} | 22 +- .../patches/patches.js | 50 +++ .../patches_card.html} | 36 +-- .../staff_session_parameters.js | 10 +- main/templates/subject/subject_home.html | 2 +- .../subject/subject_home/subject_home.js | 32 +- .../subject_home/test_mode/test_mode.js | 46 +-- .../subject/subject_home/the_stage/groves.js | 290 ------------------ .../subject_home/the_stage/interface.js | 24 +- .../subject_home/the_stage/mini_map.js | 18 +- .../subject/subject_home/the_stage/patch.js | 290 ++++++++++++++++++ .../{grove_modal.html => patch_modal.html} | 20 +- .../subject_home/the_stage/pixi_setup.js | 2 +- main/views/staff/staff_session_parameters.py | 16 +- 34 files changed, 694 insertions(+), 635 deletions(-) rename main/consumers/staff/session_parameters_consumer_mixins/{parameter_set_groves.py => parameter_set_patches.py} (55%) rename main/forms/{parameter_set_grove_form.py => parameter_set_patch_form.py} (78%) create mode 100644 main/migrations/0099_parametersetpatch_and_more.py rename main/models/{parameter_set_grove.py => parameter_set_patch.py} (85%) delete mode 100644 main/templates/staff/staff_session_parameters/groves/groves.js rename main/templates/staff/staff_session_parameters/{groves/edit_parameterset_grove_modal.html => patches/edit_parameterset_patch_modal.html} (78%) create mode 100644 main/templates/staff/staff_session_parameters/patches/patches.js rename main/templates/staff/staff_session_parameters/{groves/groves_card.html => patches/patches_card.html} (88%) delete mode 100644 main/templates/subject/subject_home/the_stage/groves.js create mode 100644 main/templates/subject/subject_home/the_stage/patch.js rename main/templates/subject/subject_home/the_stage/{grove_modal.html => patch_modal.html} (70%) diff --git a/main/consumers/staff/session_consumer_mixins/subject_updates.py b/main/consumers/staff/session_consumer_mixins/subject_updates.py index 17188a01..650ea3c6 100644 --- a/main/consumers/staff/session_consumer_mixins/subject_updates.py +++ b/main/consumers/staff/session_consumer_mixins/subject_updates.py @@ -846,42 +846,42 @@ async def update_emoji(self, event): await self.send_message(message_to_self=event_data, message_to_group=None, message_type=event['type'], send_to_client=True, send_to_group=False) - async def grove_harvest(self, event): + async def patch_harvest(self, event): ''' - subject harvests from grove + subject harvests from patch ''' if self.controlling_channel != self.channel_name: return logger = logging.getLogger(__name__) - # logger.info(f"grove_harvest: {event}") + # logger.info(f"patch_harvest: {event}") try: player_id = self.session_players_local[event["player_key"]]["id"] - grove_id = event["message_text"]["grove_id"] + patch_id = event["message_text"]["patch_id"] except: - logger.info(f"grove_harvest: invalid data, {event['message_text']}") + logger.info(f"patch_harvest: invalid data, {event['message_text']}") return - v = await sync_to_async(sync_grove_harvest)(self.session_id, player_id, grove_id) + v = await sync_to_async(sync_patch_harvest)(self.session_id, player_id, patch_id) result = {"status" : v["status"], "error_message" : v["error_message"]} if v["world_state"] and v["status"]=="success": self.world_state_local = v["world_state"] - result["grove"] = self.world_state_local["groves"][str(grove_id)] + result["patch"] = self.world_state_local["patches"][str(patch_id)] result["player_id"] = player_id - result["grove_id"] = grove_id + result["patch_id"] = patch_id result["harvest_amount"] = v["harvest_amount"] result["avatar"] = self.world_state_local["avatars"][str(player_id)] else: - logger.info(f"grove_harvest: invalid amounts from sync, {event['message_text']} player id {player_id}") + logger.info(f"patch_harvest: invalid amounts from sync, {event['message_text']} player id {player_id}") return await SessionEvent.objects.acreate(session_id=self.session_id, session_player_id=player_id, - type="grove_harvest", + type="patch_harvest", period_number=self.world_state_local["current_period"], time_remaining=self.world_state_local["time_remaining"], data=result) @@ -889,9 +889,9 @@ async def grove_harvest(self, event): await self.send_message(message_to_self=None, message_to_group=result, message_type=event['type'], send_to_client=False, send_to_group=True) - async def update_grove_harvest(self, event): + async def update_patch_harvest(self, event): ''' - subject harvests from grove update + subject harvests from patch update ''' event_data = event["group_data"] @@ -1236,9 +1236,9 @@ def sync_sleep(session_id, player_id): return {"status" : status, "error_message" : error_message, "world_state" : world_state} -def sync_grove_harvest(session_id, player_id, grove_id): +def sync_patch_harvest(session_id, player_id, patch_id): ''' - harvest from grove + harvest from patch ''' status = "success" @@ -1252,16 +1252,16 @@ def sync_grove_harvest(session_id, player_id, grove_id): parameter_set = session.parameter_set.json() player_id_s = str(player_id) - grove_id_s = str(grove_id) + patch_id_s = str(patch_id) player = session.world_state['avatars'][player_id_s] - grove = session.world_state['groves'][grove_id_s] + patch = session.world_state['patches'][patch_id_s] status = "fail" #loop backwards through levels - for i in range(grove["max_levels"], 0, -1): - level = grove["levels"][str(i)] + for i in range(patch["max_levels"], 0, -1): + level = patch["levels"][str(i)] if not level["harvested"]: status = "success" @@ -1270,22 +1270,22 @@ def sync_grove_harvest(session_id, player_id, grove_id): break if status == "fail": - error_message.append({"id":"grove_harvest", "message": "The grove is empty."}) + error_message.append({"id":"patch_harvest", "message": "The patch is empty."}) #check player has enough harvests remaining - if status == "success" and player["period_grove_harvests"] >= parameter_set["max_grove_harvests"]: + if status == "success" and player["period_patch_harvests"] >= parameter_set["max_patch_harvests"]: status = "fail" - error_message.append({"id":"grove_harvest", "message": "No harvests remaining this period."}) + error_message.append({"id":"patch_harvest", "message": "No harvests remaining this period."}) if status == "success": summary_data = current_period.summary_data[player_id_s] - player[grove["good"]] += harvest_amount - player["period_grove_harvests"] += 1 + player[patch["good"]] += harvest_amount + player["period_patch_harvests"] += 1 - summary_data["grove_harvests_count_" + grove_id_s] += 1 - summary_data["grove_harvests_total_" + grove_id_s] += harvest_amount - summary_data["harvest_total_" + grove["good"]] += harvest_amount + summary_data["patch_harvests_count_" + patch_id_s] += 1 + summary_data["patch_harvests_total_" + patch_id_s] += harvest_amount + summary_data["harvest_total_" + patch["good"]] += harvest_amount session.save() current_period.save() diff --git a/main/consumers/staff/session_consumer_mixins/timer.py b/main/consumers/staff/session_consumer_mixins/timer.py index f41fe492..b2929f3f 100644 --- a/main/consumers/staff/session_consumer_mixins/timer.py +++ b/main/consumers/staff/session_consumer_mixins/timer.py @@ -99,11 +99,11 @@ async def continue_timer(self, event): #houses update result["houses"] = self.world_state_local["houses"] - #groves update - result["groves"] = {} - for i in self.world_state_local["groves"]: - grove = self.world_state_local["groves"][i] - result["groves"][i] = {"levels":grove["levels"], "max_levels":grove["max_levels"]} + #patches update + result["patches"] = {} + for i in self.world_state_local["patches"]: + patch = self.world_state_local["patches"][i] + result["patches"][i] = {"levels":patch["levels"], "max_levels":patch["max_levels"]} #current locations result["current_locations"] = {} @@ -299,7 +299,7 @@ def sync_continue_timer(event, session_id): session = last_period.do_consumption() session = session.get_current_session_period().do_timer_actions(time_remaining) session = session.get_current_session_period().do_production() - session = session.get_current_session_period().do_grove_growth() + session = session.get_current_session_period().do_patch_growth() for i in world_state["avatars"]: # session.world_state["session_players"][i]["earnings"] += session.world_state["session_players"][i]["inventory"][current_period_id] diff --git a/main/consumers/staff/session_parameters_consumer_mixins/__init__.py b/main/consumers/staff/session_parameters_consumer_mixins/__init__.py index c308a7ab..51bfaf11 100644 --- a/main/consumers/staff/session_parameters_consumer_mixins/__init__.py +++ b/main/consumers/staff/session_parameters_consumer_mixins/__init__.py @@ -8,4 +8,4 @@ from .parameter_set_groups import ParameterSetGroupsMixin from .parameter_set_notices import ParameterSetNoticesMixin from .parameter_set_barriers import ParameterSetBarriersMixin -from .parameter_set_groves import ParameterSetGrovesMixin \ No newline at end of file +from .parameter_set_patches import ParameterSetPatchesMixin \ No newline at end of file diff --git a/main/consumers/staff/session_parameters_consumer_mixins/parameter_set_groves.py b/main/consumers/staff/session_parameters_consumer_mixins/parameter_set_patches.py similarity index 55% rename from main/consumers/staff/session_parameters_consumer_mixins/parameter_set_groves.py rename to main/consumers/staff/session_parameters_consumer_mixins/parameter_set_patches.py index 50c4ac3b..61393225 100644 --- a/main/consumers/staff/session_parameters_consumer_mixins/parameter_set_groves.py +++ b/main/consumers/staff/session_parameters_consumer_mixins/parameter_set_patches.py @@ -5,70 +5,70 @@ from django.core.exceptions import ObjectDoesNotExist from main.models import Session -from main.models import ParameterSetGrove +from main.models import ParameterSetPatch -from main.forms import ParameterSetGroveForm +from main.forms import ParameterSetPatchForm from ..session_parameters_consumer_mixins.get_parameter_set import take_get_parameter_set -class ParameterSetGrovesMixin(): +class ParameterSetPatchesMixin(): ''' - parameter set plaeyer mixin + parameter set patches mixin ''' - async def update_parameter_set_grove(self, event): + async def update_parameter_set_patch(self, event): ''' - update a parameterset grove + update a parameterset patch ''' message_data = {} - message_data["status"] = await take_update_parameter_set_grove(event["message_text"]) + message_data["status"] = await take_update_parameter_set_patch(event["message_text"]) message_data["parameter_set"] = await take_get_parameter_set(event["message_text"]["session_id"]) await self.send_message(message_to_self=message_data, message_to_group=None, message_type="update_parameter_set", send_to_client=True, send_to_group=False) - async def remove_parameterset_grove(self, event): + async def remove_parameterset_patch(self, event): ''' - remove a parameterset grove + remove a parameterset patch ''' message_data = {} - message_data["status"] = await take_remove_parameterset_grove(event["message_text"]) + message_data["status"] = await take_remove_parameterset_patch(event["message_text"]) message_data["parameter_set"] = await take_get_parameter_set(event["message_text"]["session_id"]) await self.send_message(message_to_self=message_data, message_to_group=None, message_type="update_parameter_set", send_to_client=True, send_to_group=False) - async def add_parameterset_grove(self, event): + async def add_parameterset_patch(self, event): ''' - add a parameterset grove + add a parameterset patch ''' message_data = {} - message_data["status"] = await take_add_parameterset_grove(event["message_text"]) + message_data["status"] = await take_add_parameterset_patch(event["message_text"]) message_data["parameter_set"] = await take_get_parameter_set(event["message_text"]["session_id"]) await self.send_message(message_to_self=message_data, message_to_group=None, message_type="update_parameter_set", send_to_client=True, send_to_group=False) @sync_to_async -def take_update_parameter_set_grove(data): +def take_update_parameter_set_patch(data): ''' - update parameterset grove + update parameterset patch ''' logger = logging.getLogger(__name__) - logger.info(f"Update parameterset grove: {data}") + logger.info(f"Update parameterset patch: {data}") session_id = data["session_id"] - parameterset_grove_id = data["parameterset_grove_id"] + parameterset_patch_id = data["parameterset_patch_id"] form_data = data["form_data"] try: session = Session.objects.get(id=session_id) - parameter_set_grove = ParameterSetGrove.objects.get(id=parameterset_grove_id) + parameter_set_patch = ParameterSetPatch.objects.get(id=parameterset_patch_id) except ObjectDoesNotExist: - logger.warning(f"take_update_parameter_set_grove parameterset_grove, not found ID: {parameterset_grove_id}") + logger.warning(f"take_update_parameter_set_patch parameterset_patch, not found ID: {parameterset_patch_id}") return try: @@ -78,87 +78,88 @@ def take_update_parameter_set_grove(data): levels_input.remove("") except ObjectDoesNotExist: - logger.warning(f"take_update_parameter_set_grove levels_input, not found ID: {parameterset_grove_id}") + logger.warning(f"take_update_parameter_set_patch levels_input, not found ID: {parameterset_patch_id}") {"value":"fail", "errors" : {f"levels_input":["Invalid input."]}} if len(levels_input) == 0: - logger.warning(f"take_update_parameter_set_grove levels_input, not found ID: {parameterset_grove_id}") + logger.warning(f"take_update_parameter_set_patch levels_input, not found ID: {parameterset_patch_id}") return {"value":"fail", "errors" : {f"levels_input":["Invalid input."]}} form_data_dict = form_data logger.info(f'form_data_dict : {form_data_dict}') - form = ParameterSetGroveForm(form_data_dict, instance=parameter_set_grove) + form = ParameterSetPatchForm(form_data_dict, instance=parameter_set_patch) form.fields["parameter_set_group"].queryset = session.parameter_set.parameter_set_groups.all() if form.is_valid(): form.save() - parameter_set_grove.levels = {} + parameter_set_patch.levels = {} for i in range(len(levels_input)): v = levels_input[i].strip() if v.isdigit(): - parameter_set_grove.levels[str(i+1)] = {"value" : int(v), "harvested" : False} + parameter_set_patch.levels[str(i+1)] = {"value" : int(v), "harvested" : False} - parameter_set_grove.save() + parameter_set_patch.save() - parameter_set_grove.parameter_set.update_json_fk(update_groves=True) + parameter_set_patch.parameter_set.update_json_fk(update_patches=True) return {"value" : "success"} - logger.info("Invalid parameterset grove form") + logger.info("Invalid parameterset patch form") return {"value" : "fail", "errors" : dict(form.errors.items())} @sync_to_async -def take_remove_parameterset_grove(data): +def take_remove_parameterset_patch(data): ''' - remove the specifed parmeterset grove + remove the specifed parmeterset patch ''' logger = logging.getLogger(__name__) - logger.info(f"Remove parameterset grove: {data}") + logger.info(f"Remove parameterset patch: {data}") session_id = data["session_id"] - parameterset_grove_id = data["parameterset_grove_id"] + parameterset_patch_id = data["parameterset_patch_id"] try: session = Session.objects.get(id=session_id) - parameter_set_grove = ParameterSetGrove.objects.get(id=parameterset_grove_id) + parameter_set_patch = ParameterSetPatch.objects.get(id=parameterset_patch_id) except ObjectDoesNotExist: - logger.warning(f"take_remove_parameterset_grove, not found ID: {parameterset_grove_id}") + logger.warning(f"take_remove_parameterset_patch, not found ID: {parameterset_patch_id}") return - parameter_set_grove.delete() - session.parameter_set.update_json_fk(update_groves=True) + parameter_set_patch.delete() + session.parameter_set.update_json_fk(update_patches=True) return {"value" : "success"} @sync_to_async -def take_add_parameterset_grove(data): +def take_add_parameterset_patch(data): ''' - add a new parameter grove to the parameter set + add a new parameter patch to the parameter set ''' logger = logging.getLogger(__name__) - logger.info(f"Add parameterset grove: {data}") + logger.info(f"Add parameterset patch: {data}") session_id = data["session_id"] try: session = Session.objects.get(id=session_id) except ObjectDoesNotExist: - logger.warning(f"take_add_parameterset_grove session, not found ID: {session_id}") + logger.warning(f"take_add_parameterset_patch session, not found ID: {session_id}") return {"value" : "fail"} - parameter_set_grove_last = ParameterSetGrove.objects.last() + parameter_set_patch_last = ParameterSetPatch.objects.last() - parameter_set_grove = ParameterSetGrove.objects.create(parameter_set=session.parameter_set) - parameter_set_grove.setup() - parameter_set_grove.from_dict(parameter_set_grove_last.json()) - parameter_set_grove.parameter_set_group = parameter_set_grove_last.parameter_set_group - parameter_set_grove.save() - session.parameter_set.update_json_fk(update_groves=True) + parameter_set_patch = ParameterSetPatch.objects.create(parameter_set=session.parameter_set) + parameter_set_patch.setup() + if parameter_set_patch_last: + parameter_set_patch.from_dict(parameter_set_patch_last.json()) + parameter_set_patch.parameter_set_group = parameter_set_patch_last.parameter_set_group + parameter_set_patch.save() + session.parameter_set.update_json_fk(update_patches=True) return {"value" : "success"} diff --git a/main/consumers/staff/staff_session_parameters_consumer.py b/main/consumers/staff/staff_session_parameters_consumer.py index 752b2057..c634686e 100644 --- a/main/consumers/staff/staff_session_parameters_consumer.py +++ b/main/consumers/staff/staff_session_parameters_consumer.py @@ -17,7 +17,7 @@ class StaffSessionParametersConsumer(SocketConsumerMixin, ControlParameterSetMixin, ParameterSetNoticesMixin, ParameterSetBarriersMixin, - ParameterSetGrovesMixin, + ParameterSetPatchesMixin, SendMessageMixin): ''' websocket for parameter set diff --git a/main/consumers/subject/subject_home_consumer_mixins/interface.py b/main/consumers/subject/subject_home_consumer_mixins/interface.py index 54a953ae..b715acae 100644 --- a/main/consumers/subject/subject_home_consumer_mixins/interface.py +++ b/main/consumers/subject/subject_home_consumer_mixins/interface.py @@ -168,9 +168,9 @@ async def update_emoji(self, event): await self.send_message(message_to_self=event_data, message_to_subjects=None, message_to_staff=None, message_type=event['type'], send_to_client=True, send_to_group=False) - async def update_grove_harvest(self, event): + async def update_patch_harvest(self, event): ''' - update grove harvest + update patch harvest ''' event_data = event["group_data"] diff --git a/main/forms/__init__.py b/main/forms/__init__.py index f89b712f..0afd6a0c 100644 --- a/main/forms/__init__.py +++ b/main/forms/__init__.py @@ -17,7 +17,7 @@ from .parameter_set_field_form import ParameterSetFieldForm from .parameter_set_notice_form import ParameterSetNoticeForm from .parameter_set_barrier_form import ParameterSetBarrierForm -from .parameter_set_grove_form import ParameterSetGroveForm +from .parameter_set_patch_form import ParameterSetPatchForm from .session_player_name_etc_form import StaffEditNameEtcForm diff --git a/main/forms/parameter_set_form.py b/main/forms/parameter_set_form.py index dd72cd2f..5a89c749 100644 --- a/main/forms/parameter_set_form.py +++ b/main/forms/parameter_set_form.py @@ -231,9 +231,9 @@ class ParameterSetForm(forms.ModelForm): "step":"1", "min":"1"})) - max_grove_harvests = forms.IntegerField(label='Max Grove Harvests per Period', + max_patch_harvests = forms.IntegerField(label='Max Patch Harvests per Period', min_value=1, - widget=forms.NumberInput(attrs={"v-model":"parameter_set.max_grove_harvests", + widget=forms.NumberInput(attrs={"v-model":"parameter_set.max_patch_harvests", "step":"1", "min":"1"})) @@ -257,7 +257,7 @@ class Meta: 'survey_required', 'survey_link', 'prolific_mode', 'prolific_completion_link', 'reconnection_limit', 'interaction_length', 'interaction_range', 'cool_down_length', 'health_loss_per_second', 'heath_gain_per_sleep_second', 'consumption_alpha', 'consumption_beta', 'consumption_multiplier', 'cents_per_second', 'allow_attacks', 'attack_damage', 'attack_cost', 'sleep_benefit', 'allow_stealing', 'world_width', 'world_height', - 'field_width', 'field_height', 'house_width', 'house_height', 'avatar_scale', 'avatar_bound_box_percent','production_effort', 'max_grove_harvests', + 'field_width', 'field_height', 'house_width', 'house_height', 'avatar_scale', 'avatar_bound_box_percent','production_effort', 'max_patch_harvests', 'chat_mode', 'chat_rules_word_list', 'test_mode'] def clean_survey_link(self): diff --git a/main/forms/parameter_set_grove_form.py b/main/forms/parameter_set_patch_form.py similarity index 78% rename from main/forms/parameter_set_grove_form.py rename to main/forms/parameter_set_patch_form.py index 3d6cb8c5..9d34b513 100644 --- a/main/forms/parameter_set_grove_form.py +++ b/main/forms/parameter_set_patch_form.py @@ -1,60 +1,60 @@ ''' -parameterset grove edit form +parameterset patch edit form ''' from django import forms from django.db.models.query import RawQuerySet -from main.models import ParameterSetGrove +from main.models import ParameterSetPatch from main.models import ParameterSetGroup from main.globals import Goods -class ParameterSetGroveForm(forms.ModelForm): +class ParameterSetPatchForm(forms.ModelForm): ''' - parameterset grove edit form + parameterset patch edit form ''' parameter_set_group = forms.ModelChoiceField(label='Group', queryset=ParameterSetGroup.objects.none(), - widget=forms.Select(attrs={"v-model":"current_parameter_set_grove.parameter_set_group",})) + widget=forms.Select(attrs={"v-model":"current_parameter_set_patch.parameter_set_group",})) info = forms.CharField(label='Info', - widget=forms.TextInput(attrs={"v-model":"current_parameter_set_grove.info",})) + widget=forms.TextInput(attrs={"v-model":"current_parameter_set_patch.info",})) x = forms.IntegerField(label='Starting Location X', min_value=0, - widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_grove.x", + widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_patch.x", "step":"1", "min":"0"})) y = forms.IntegerField(label='Starting Location Y', min_value=0, - widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_grove.y", + widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_patch.y", "step":"1", "min":"0"})) good = forms.ChoiceField(label='Good', choices=Goods.choices, - widget=forms.Select(attrs={"v-model":"current_parameter_set_grove.good",})) + widget=forms.Select(attrs={"v-model":"current_parameter_set_patch.good",})) drought_on_period = forms.IntegerField(label='Drought On Period', min_value=2, - widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_grove.drought_on_period", + widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_patch.drought_on_period", "step":"1", "min":"2"})) drought_level = forms.IntegerField(label='Drought Level', min_value=1, - widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_grove.drought_level", + widget=forms.NumberInput(attrs={"v-model":"current_parameter_set_patch.drought_level", "step":"1", "min":"1"})) hex_color = forms.CharField(label='Hex Color', - widget=forms.TextInput(attrs={"v-model":"current_parameter_set_grove.hex_color",})) + widget=forms.TextInput(attrs={"v-model":"current_parameter_set_patch.hex_color",})) class Meta: - model=ParameterSetGrove + model=ParameterSetPatch fields =['info', 'parameter_set_group','hex_color', 'x', 'y', 'good', 'drought_on_period', 'drought_level'] def clean_drought_level(self): @@ -62,9 +62,9 @@ def clean_drought_level(self): try: drought_level = self.data.get('drought_level') - parameter_set_grove = ParameterSetGrove.objects.get(pk=self.instance.id) + parameter_set_patch = ParameterSetPatch.objects.get(pk=self.instance.id) - if drought_level>len(parameter_set_grove.levels): + if drought_level>len(parameter_set_patch.levels): raise forms.ValidationError('Drought level higher than total levels') except ValueError: diff --git a/main/migrations/0099_parametersetpatch_and_more.py b/main/migrations/0099_parametersetpatch_and_more.py new file mode 100644 index 00000000..b6c0fdbf --- /dev/null +++ b/main/migrations/0099_parametersetpatch_and_more.py @@ -0,0 +1,58 @@ +# Generated by Django 4.2.3 on 2023-09-11 18:37 + +import django.core.serializers.json +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0098_parameterset_consumption_multiplier'), + ] + + operations = [ + migrations.CreateModel( + name='ParameterSetPatch', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('info', models.CharField(blank=True, default='Info Here', max_length=100, null=True, verbose_name='Info')), + ('x', models.IntegerField(default=50, verbose_name='Start Location X')), + ('y', models.IntegerField(default=50, verbose_name='Start Location Y')), + ('good', models.CharField(blank=True, choices=[('Cherry', 'Cherry'), ('Pineapple', 'Pineapple'), ('Blueberry', 'Blueberry')], default='Cherry', max_length=100, null=True, verbose_name='Good One')), + ('levels', models.JSONField(blank=True, encoder=django.core.serializers.json.DjangoJSONEncoder, null=True, verbose_name='Levels')), + ('drought_on_period', models.IntegerField(default=14, verbose_name='Drought On Period')), + ('drought_level', models.IntegerField(default=1, verbose_name='Drought Level')), + ('hex_color', models.CharField(default='0x000000', max_length=8, verbose_name='Hex Color')), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ], + options={ + 'verbose_name': 'Parameter Set Patch', + 'verbose_name_plural': 'Parameter Set Patch', + 'ordering': ['id'], + }, + ), + migrations.RemoveField( + model_name='parameterset', + name='max_grove_harvests', + ), + migrations.AddField( + model_name='parameterset', + name='max_patch_harvests', + field=models.IntegerField(default=1, verbose_name='Max Patch Harvests'), + ), + migrations.DeleteModel( + name='ParameterSetGrove', + ), + migrations.AddField( + model_name='parametersetpatch', + name='parameter_set', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parameter_set_patches_a', to='main.parameterset'), + ), + migrations.AddField( + model_name='parametersetpatch', + name='parameter_set_group', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parameter_set_patches_b', to='main.parametersetgroup'), + ), + ] diff --git a/main/models/__init__.py b/main/models/__init__.py index 1fe17976..17d68e7d 100644 --- a/main/models/__init__.py +++ b/main/models/__init__.py @@ -17,7 +17,7 @@ from .parameter_set_field import ParameterSetField from .parameter_set_notice import ParameterSetNotice from .parameter_set_barrier import ParameterSetBarrier -from .parameter_set_grove import ParameterSetGrove +from .parameter_set_patch import ParameterSetPatch from .session import Session from .session_period import SessionPeriod diff --git a/main/models/parameter_set.py b/main/models/parameter_set.py index 6773a5b2..2bb1a586 100644 --- a/main/models/parameter_set.py +++ b/main/models/parameter_set.py @@ -52,7 +52,7 @@ class ParameterSet(models.Model): avatar_bound_box_percent = models.DecimalField(verbose_name='Avatar Bound Box Percent', decimal_places=2, max_digits=3, default=0.75) #avatar bound box percent for interaction production_effort = models.IntegerField(verbose_name='Production Effort', default=10) # the amount of effort a subject can put into production - max_grove_harvests = models.IntegerField(verbose_name='Max Grove Harvests', default=1) #the maximum number of times a subject can harvest from a grove + max_patch_harvests = models.IntegerField(verbose_name='Max Patch Harvests', default=1) #the maximum number of times a subject can harvest from a patch interaction_length = models.IntegerField(verbose_name='Interaction Length', default=10) #interaction length in seconds cool_down_length = models.IntegerField(verbose_name='Cool Down Length', default=10) #cool down length in seconds @@ -132,7 +132,7 @@ def from_dict(self, new_ps): self.avatar_bound_box_percent = new_ps.get("avatar_bound_box_percent", 0.75) self.production_effort = new_ps.get("production_effort", 10) - self.max_grove_harvests = new_ps.get("max_grove_harvests", 1) + self.max_patch_harvests = new_ps.get("max_patch_harvests", 1) self.interaction_length = new_ps.get("interaction_length", 10) self.cool_down_length = new_ps.get("cool_down_length", 10) @@ -199,14 +199,14 @@ def from_dict(self, new_ps): self.update_player_count() - #parameter set groves - self.parameter_set_groves_a.all().delete() - new_parameter_set_groves = new_ps.get("parameter_set_groves") + #parameter set patches + self.parameter_set_patches_a.all().delete() + new_parameter_set_patches = new_ps.get("parameter_set_patches") - for i in new_parameter_set_groves: - p = main.models.ParameterSetGrove.objects.create(parameter_set=self) - v = new_parameter_set_groves[i] - p.from_dict(new_parameter_set_groves[i]) + for i in new_parameter_set_patches: + p = main.models.ParameterSetPatch.objects.create(parameter_set=self) + v = new_parameter_set_patches[i] + p.from_dict(new_parameter_set_patches[i]) if v.get("parameter_set_group", None) != None: p.parameter_set_group_id=new_parameter_set_groups_map[str(v["parameter_set_group"])] @@ -400,7 +400,7 @@ def update_json_local(self): self.json_for_session["avatar_bound_box_percent"] = self.avatar_bound_box_percent self.json_for_session["production_effort"] = self.production_effort - self.json_for_session["max_grove_harvests"] = self.max_grove_harvests + self.json_for_session["max_patch_harvests"] = self.max_patch_harvests self.json_for_session["interaction_length"] = self.interaction_length self.json_for_session["cool_down_length"] = self.cool_down_length @@ -442,7 +442,7 @@ def update_json_fk(self, update_players=False, update_groups=False, update_notices=False, update_barriers=False, - update_groves=False): + update_patches=False): ''' update json model ''' @@ -478,9 +478,9 @@ def update_json_fk(self, update_players=False, self.json_for_session["parameter_set_barriers_order"] = list(self.parameter_set_barriers_a.all().values_list('id', flat=True)) self.json_for_session["parameter_set_barriers"] = {str(p.id) : p.json() for p in self.parameter_set_barriers_a.all()} - if update_groves: - self.json_for_session["parameter_set_groves_order"] = list(self.parameter_set_groves_a.all().values_list('id', flat=True)) - self.json_for_session["parameter_set_groves"] = {str(p.id) : p.json() for p in self.parameter_set_groves_a.all()} + if update_patches: + self.json_for_session["parameter_set_patches_order"] = list(self.parameter_set_patches_a.all().values_list('id', flat=True)) + self.json_for_session["parameter_set_patches"] = {str(p.id) : p.json() for p in self.parameter_set_patches_a.all()} self.save() @@ -500,7 +500,7 @@ def json(self, update_required=False): update_groups=True, update_notices=True, update_barriers=True, - update_groves=True) + update_patches=True) return self.json_for_session diff --git a/main/models/parameter_set_grove.py b/main/models/parameter_set_patch.py similarity index 85% rename from main/models/parameter_set_grove.py rename to main/models/parameter_set_patch.py index 1134f70b..d4e98b25 100644 --- a/main/models/parameter_set_grove.py +++ b/main/models/parameter_set_patch.py @@ -1,5 +1,5 @@ ''' -parameterset grove +parameterset patch ''' from django.db import models @@ -12,13 +12,13 @@ import main -class ParameterSetGrove(models.Model): +class ParameterSetPatch(models.Model): ''' - parameter set groves + parameter set patches ''' - parameter_set = models.ForeignKey(ParameterSet, on_delete=models.CASCADE, related_name="parameter_set_groves_a") - parameter_set_group = models.ForeignKey(ParameterSetGroup, on_delete=models.SET_NULL, related_name="parameter_set_groves_b", blank=True, null=True) + parameter_set = models.ForeignKey(ParameterSet, on_delete=models.CASCADE, related_name="parameter_set_patches_a") + parameter_set_group = models.ForeignKey(ParameterSetGroup, on_delete=models.SET_NULL, related_name="parameter_set_patches_b", blank=True, null=True) info = models.CharField(verbose_name='Info', blank=True, null=True, max_length=100, default="Info Here") @@ -30,7 +30,7 @@ class ParameterSetGrove(models.Model): drought_on_period = models.IntegerField(verbose_name='Drought On Period', default=14) #period when drought occurs drought_level = models.IntegerField(verbose_name='Drought Level', default=1) #level of drought - hex_color = models.CharField(verbose_name='Hex Color', max_length = 8, default="0x000000") #color of grove + hex_color = models.CharField(verbose_name='Hex Color', max_length = 8, default="0x000000") #color of patch timestamp = models.DateTimeField(auto_now_add=True) updated= models.DateTimeField(auto_now=True) @@ -39,14 +39,14 @@ def __str__(self): return str(self.id) class Meta: - verbose_name = 'Parameter Set Grove' - verbose_name_plural = 'Parameter Set Grove' + verbose_name = 'Parameter Set Patch' + verbose_name_plural = 'Parameter Set Patch' ordering=['id'] def from_dict(self, new_ps): ''' copy source values into this period - source : dict object of parameterset grove + source : dict object of parameterset patch ''' self.info = new_ps.get("info") self.x = new_ps.get("x") @@ -82,7 +82,7 @@ def update_json_local(self): ''' update parameter set json ''' - self.parameter_set.json_for_session["parameter_set_groves"][self.id] = self.json() + self.parameter_set.json_for_session["parameter_set_patches"][self.id] = self.json() self.parameter_set.save() @@ -112,7 +112,7 @@ def get_json_for_subject(self, update_required=False): return json object for subject screen, return cached version if unchanged ''' try: - v = self.parameter_set.json_for_session["parameter_set_groves"][str(self.id)] + v = self.parameter_set.json_for_session["parameter_set_patches"][str(self.id)] except KeyError: v= {} diff --git a/main/models/session.py b/main/models/session.py index 908326cd..1d61b949 100644 --- a/main/models/session.py +++ b/main/models/session.py @@ -134,12 +134,12 @@ def setup_summary_data(self): setup summary data ''' - parameter_set_groves = self.parameter_set.parameter_set_groves_a.values('id').all() + parameter_set_patches = self.parameter_set.parameter_set_patches_a.values('id').all() session_players = self.session_players.values('id','parameter_set_player__id').all() self.summary_data = {} - # parameter_set_groves = self.parameter_set.parameter_set_groves_a.values('id').all() + # parameter_set_patches = self.parameter_set.parameter_set_patches_a.values('id').all() # session_players = self.session.session_players.values('id').all() # period_number = self.period_number @@ -165,11 +165,11 @@ def setup_summary_data(self): v["house_" + k[0]] = 0 v["avatar_" + k[0]] = 0 - #groves - for k in parameter_set_groves: + #patches + for k in parameter_set_patches: k_s = str(k["id"]) - v["grove_harvests_count_" + k_s] = 0 - v["grove_harvests_total_" + k_s] = 0 + v["patch_harvests_count_" + k_s] = 0 + v["patch_harvests_total_" + k_s] = 0 #interactions with others for k in session_players: @@ -202,7 +202,7 @@ def setup_world_state(self): "fields":{}, "houses":{}, "avatars":{}, - "groves":{}, + "patches":{}, "current_period":1, "current_experiment_phase":ExperimentPhase.INSTRUCTIONS if self.parameter_set.show_instructions else ExperimentPhase.RUN, "time_remaining":self.parameter_set.period_length, @@ -241,17 +241,17 @@ def setup_world_state(self): self.world_state["fields"][str(v["id"])] = v - #groves - for i in parameter_set["parameter_set_groves"]: + #patches + for i in parameter_set["parameter_set_patches"]: v = {} - v = parameter_set["parameter_set_groves"][i] + v = parameter_set["parameter_set_patches"][i] v["max_levels"] = len(v["levels"]) v["radius"] = 0 for j in v["levels"]: v["levels"][j]["harvested"] = False - self.world_state["groves"][str(v["id"])] = v + self.world_state["patches"][str(v["id"])] = v #houses for i in parameter_set["parameter_set_players"]: @@ -289,7 +289,7 @@ def setup_world_state(self): v2['earnings'] = "0" v2['health'] = "100" v2['sleeping'] = False - v2['period_grove_harvests'] = 0 + v2['period_patch_harvests'] = 0 v2['parameter_set_player_id'] = i['parameter_set_player__id'] for j in main.globals.Goods.choices: v2[j[0]] = 0 @@ -415,10 +415,10 @@ def get_download_summary_csv(self): temp_header.append("Send " + k[0] + " to House " + str(player_number+1)) - #grove harvests - for grove_number, grove in enumerate(world_state["groves"]): - temp_header.append("Grove Harvests Count " + str(grove_number+1)) - temp_header.append("Grove Harvests Total " + str(grove_number+1)) + #patch harvests + for patch_number, patch in enumerate(world_state["patches"]): + temp_header.append("Patch Harvests Count " + str(patch_number+1)) + temp_header.append("Patch Harvests Total " + str(patch_number+1)) writer.writerow(temp_header) @@ -467,10 +467,10 @@ def get_download_summary_csv(self): temp_row.append(temp_p["send_avatar_to_house_" + parameter_set_player_id + "_good_" + l[0]]) - #grove harvests - for grove_number, grove in enumerate(world_state["groves"]): - temp_row.append(temp_p["grove_harvests_count_" + grove]) - temp_row.append(temp_p["grove_harvests_total_" + grove]) + #patch harvests + for patch_number, patch in enumerate(world_state["patches"]): + temp_row.append(temp_p["patch_harvests_count_" + patch]) + temp_row.append(temp_p["patch_harvests_total_" + patch]) # temp_row.append(Decimal(temp_p["start_health"]) - Decimal(temp_p["end_health"])) @@ -529,8 +529,8 @@ def action_data_parse(self, type, data, session_players): nearby_text += f'{session_players[str(i)]["parameter_set_player__id_label"]}' return f'{data["text"]} @ {nearby_text}' - elif type == "grove_harvest": - return f'{data["harvest_amount"]} {data["grove"]["good"]} from {data["grove"]["info"]}' + elif type == "patch_harvest": + return f'{data["harvest_amount"]} {data["patch"]["good"]} from {data["patch"]["info"]}' elif type == "attack_avatar": return f'{session_players[str(data["source_player_id"])]["parameter_set_player__id_label"]} -> {session_players[str(data["target_player_id"])]["parameter_set_player__id_label"]}' elif type == "move_fruit_to_avatar": diff --git a/main/models/session_period.py b/main/models/session_period.py index 6eb2e423..7f579d07 100644 --- a/main/models/session_period.py +++ b/main/models/session_period.py @@ -28,7 +28,7 @@ class SessionPeriod(models.Model): production_completed = models.BooleanField(default=False) #production completed for this period consumption_completed = models.BooleanField(default=False) #consumption completed for this period - growth_completed = models.BooleanField(default=False) #grove growth completed for this period + growth_completed = models.BooleanField(default=False) #patch growth completed for this period timer_actions = models.JSONField(encoder=DjangoJSONEncoder, null=True, blank=True) #timer actions for this period @@ -258,9 +258,9 @@ def do_production(self): return self.session - def do_grove_growth(self): + def do_patch_growth(self): ''' - do grove growth for this period + do patch growth for this period ''' logger = logging.getLogger(__name__) @@ -270,34 +270,34 @@ def do_grove_growth(self): if self.growth_completed: return self.session - #if no groves, return - if len(self.session.world_state["groves"]) == 0: + #if no patches, return + if len(self.session.world_state["patches"]) == 0: self.growth_completed = True self.save() return self.session - #update groves - for i in self.session.world_state["groves"]: - grove = self.session.world_state["groves"][str(i)] + #update patches + for i in self.session.world_state["patches"]: + patch = self.session.world_state["patches"][str(i)] #check if drought - if world_state["current_period"] >= grove["drought_on_period"]: - grove["max_levels"] = grove["drought_level"] + if world_state["current_period"] >= patch["drought_on_period"]: + patch["max_levels"] = patch["drought_level"] - for j in grove["levels"]: - if int(j) > grove["max_levels"]: + for j in patch["levels"]: + if int(j) > patch["max_levels"]: break - level = grove["levels"][str(j)] + level = patch["levels"][str(j)] if level["harvested"]: level["harvested"] = False break - #reset avatar grove harvests + #reset avatar patch harvests for i in self.session.world_state["avatars"]: avatar = self.session.world_state["avatars"][str(i)] - avatar["period_grove_harvests"] = 0 + avatar["period_patch_harvests"] = 0 self.session.save() return self.session diff --git a/main/templates/staff/staff_session/staff_session.js b/main/templates/staff/staff_session/staff_session.js index 119fc55d..ee0b2bbb 100644 --- a/main/templates/staff/staff_session/staff_session.js +++ b/main/templates/staff/staff_session/staff_session.js @@ -19,7 +19,7 @@ var pixi_grounds = {}; //grounds var pixi_fields = {}; //fields var pixi_houses = {}; //houses var pixi_night = {}; //night -var pixi_groves = {}; //groves +var pixi_patches = {}; //patches var wall_search = {counter:0, current_location:{x:-1,y:-1}, target_location:{x:-1,y:-1}}; var wall_search_objects = []; @@ -240,8 +240,8 @@ var app = Vue.createApp({ case "update_emoji": app.take_emoji(message_data); break; - case "update_grove_harvest": - app.take_grove_harvest(message_data); + case "update_patch_harvest": + app.take_patch_harvest(message_data); break; } @@ -306,7 +306,7 @@ var app = Vue.createApp({ app.update_field_inventory(); app.update_avatar_inventory(); app.update_house_inventory(); - app.setup_pixi_groves(); + app.setup_pixi_patches(); }, /** send winsock request to get session info @@ -445,15 +445,15 @@ var app = Vue.createApp({ app.session.world_state.fields[i][good_two] = message_data.fields[i][good_two]; } - //update groves - for(let i in message_data.groves) + //update patches + for(let i in message_data.patches) { - let grove = app.session.world_state.groves[i] - grove.levels = message_data.groves[i].levels; - grove.max_levels = message_data.groves[i].max_levels; + let patch = app.session.world_state.patches[i] + patch.levels = message_data.patches[i].levels; + patch.max_levels = message_data.patches[i].max_levels; } - app.setup_pixi_groves(); + app.setup_pixi_patches(); //update houses app.session.world_state.houses = message_data.houses; @@ -521,7 +521,7 @@ var app = Vue.createApp({ {%include "subject/subject_home/the_stage/move_objects.js"%} {%include "subject/subject_home/the_stage/barriers.js"%} {%include "subject/subject_home/the_stage/emoji.js"%} - {%include "subject/subject_home/the_stage/groves.js"%} + {%include "subject/subject_home/the_stage/patch.js"%} {%include "js/help_doc.js"%} /** clear form error messages diff --git a/main/templates/staff/staff_session_parameters.html b/main/templates/staff/staff_session_parameters.html index 5978bf86..9ccbc1c4 100644 --- a/main/templates/staff/staff_session_parameters.html +++ b/main/templates/staff/staff_session_parameters.html @@ -53,7 +53,7 @@ {%include "staff/staff_session_parameters/groups/edit_parameterset_group_modal.html"%} {%include "staff/staff_session_parameters/notices/edit_parameterset_notice_modal.html"%} {%include "staff/staff_session_parameters/barriers/edit_parameterset_barrier_modal.html"%} -{%include "staff/staff_session_parameters/groves/edit_parameterset_grove_modal.html"%} +{%include "staff/staff_session_parameters/patches/edit_parameterset_patch_modal.html"%} {%include "help_modal.html"%} @@ -100,7 +100,7 @@
- {%include "staff/staff_session_parameters/groves/groves_card.html"%} + {%include "staff/staff_session_parameters/patches/patches_card.html"%}
diff --git a/main/templates/staff/staff_session_parameters/general_settings/general_settings.js b/main/templates/staff/staff_session_parameters/general_settings/general_settings.js index 66e4ef88..cb71a855 100644 --- a/main/templates/staff/staff_session_parameters/general_settings/general_settings.js +++ b/main/templates/staff/staff_session_parameters/general_settings/general_settings.js @@ -58,7 +58,7 @@ take_update_parameter_set(message_data){ app.edit_parameterset_group_modal.hide(); app.edit_parameterset_notice_modal.hide(); app.edit_parameterset_barrier_modal.hide(); - app.edit_parameterset_grove_modal.hide(); + app.edit_parameterset_patch_modal.hide(); } else { diff --git a/main/templates/staff/staff_session_parameters/general_settings/general_settings_card.html b/main/templates/staff/staff_session_parameters/general_settings/general_settings_card.html index 9fe1f153..91819b6f 100644 --- a/main/templates/staff/staff_session_parameters/general_settings/general_settings_card.html +++ b/main/templates/staff/staff_session_parameters/general_settings/general_settings_card.html @@ -263,10 +263,10 @@
- {{parameter_set_form.max_grove_harvests.label}}: + {{parameter_set_form.max_patch_harvests.label}}:
- [[parameter_set.max_grove_harvests]] + [[parameter_set.max_patch_harvests]]
diff --git a/main/templates/staff/staff_session_parameters/groves/groves.js b/main/templates/staff/staff_session_parameters/groves/groves.js deleted file mode 100644 index 59b0c91f..00000000 --- a/main/templates/staff/staff_session_parameters/groves/groves.js +++ /dev/null @@ -1,50 +0,0 @@ -/**show edit parameter set grove - */ -show_edit_parameter_set_grove(index){ - - if(app.session.started) return; - if(app.working) return; - - app.clear_main_form_errors(); - app.current_parameter_set_grove = Object.assign({}, app.parameter_set.parameter_set_groves[index]); - app.current_parameter_set_grove.levels_input = ""; - - for(i in app.current_parameter_set_grove.levels) - { - app.current_parameter_set_grove.levels_input += app.current_parameter_set_grove.levels[i].value + ","; - } - - //remove last comma - app.current_parameter_set_grove.levels_input = app.current_parameter_set_grove.levels_input.slice(0, -1); - - app.edit_parameterset_grove_modal.toggle(); -}, - -/** update parameterset grove -*/ -send_update_parameter_set_grove(){ - - app.working = true; - - app.send_message("update_parameter_set_grove", {"session_id" : app.session.id, - "parameterset_grove_id" : app.current_parameter_set_grove.id, - "form_data" : app.current_parameter_set_grove}); -}, - -/** remove the selected parameterset grove -*/ -send_remove_parameter_set_grove(){ - - app.working = true; - app.send_message("remove_parameterset_grove", {"session_id" : app.session.id, - "parameterset_grove_id" : app.current_parameter_set_grove.id,}); - -}, - -/** add a new parameterset grove -*/ -send_add_parameter_set_grove(grove_id){ - app.working = true; - app.send_message("add_parameterset_grove", {"session_id" : app.session.id}); - -}, \ No newline at end of file diff --git a/main/templates/staff/staff_session_parameters/groves/edit_parameterset_grove_modal.html b/main/templates/staff/staff_session_parameters/patches/edit_parameterset_patch_modal.html similarity index 78% rename from main/templates/staff/staff_session_parameters/groves/edit_parameterset_grove_modal.html rename to main/templates/staff/staff_session_parameters/patches/edit_parameterset_patch_modal.html index b7cfda96..4ecd10e2 100644 --- a/main/templates/staff/staff_session_parameters/groves/edit_parameterset_grove_modal.html +++ b/main/templates/staff/staff_session_parameters/patches/edit_parameterset_patch_modal.html @@ -1,11 +1,11 @@ {% load crispy_forms_tags %} - +