private void UpdateCharacterInput() { IntVector2 cell = ((IntVector2) next).CellCoords(32); regCursor.gameObject.SetActive(true); regCursor.transform.localPosition = cell * 32 + IntVector2.one * 16; if (addCharacter.isOn) { cellCursor.gameObject.SetActive(true); cellCursor.transform.localPosition = cell * 32 + IntVector2.one * 16; cursorBlock = cursorBlock ?? new MaterialPropertyBlock(); cellCursor.GetPropertyBlock(cursorBlock); cursorBlock.SetFloat("_Cycle", Time.timeSinceLevelLoad * 12); cellCursor.SetPropertyBlock(cursorBlock); cellCursor.sprite = defaultCostume.down.uSprite; } else { cellCursor.gameObject.SetActive(false); } if (input.cancel.WasPressed) { hud.mode = HUD.Mode.Draw; CleanupCharacter(); return; } characterDialogue.interactable = possessedActor != null; if (possessedActor != null) { if (characterDialogue.isFocused) { possessedActor.dialogue = characterDialogue.text; } else { characterDialogue.text = possessedActor.dialogue; } } else { characterDialogue.text = "NO CHARACTER SELECTED"; } Actor hoveredActor; var scene = editScene; scene.TryGetActor(next, out hoveredActor, 0); if (hoveredActor != null) { if (hoveredActor == possessedActor) { SetCursorSprite(exitActorCursor); } else { SetCursorSprite(enterActorCursor); } } if (mousePress && hoveredActor != null) { if (removeCharacter.isOn) { scene.actors.Remove(hoveredActor); if (possessedActor == hoveredActor) possessedActor = null; var changes = new Changes(); changes.GetChange(hoveredActor, () => new ActorRemovedChange { world = scene, actor = hoveredActor }); Do(changes); removeCharacter.isOn = false; } else { if (possessedActor == hoveredActor) { possessedActor = null; cameraController.focusTarget = hoveredActor.position.current - Vector2.one * 16; } else { possessedActor = hoveredActor; characterDialogue.text = possessedActor.dialogue; } } } else if (mousePress && addCharacter.isOn) { var pos = ((IntVector2) next).CellCoords(32) * 32 + IntVector2.one * 16; var actor = new Actor { world = scene, costume = NewSimpleCostume(project), state = new State { fragment = "start", line = 0 }, position = new Position { prev = pos, next = pos, progress = 0, }, }; scene.actors.Add(actor); var changes = new Changes(); changes.GetChange(actor, () => new ActorAddedChange { world = scene, actor = actor }); Do(changes); characterPlaceSound.Play(); addCharacter.isOn = false; possessedActor = actor; } }