/** 刷新选择的gameObject */ private void refreshSelectGameObject() { if (_lastSelectionObject != Selection.activeGameObject) { if (Selection.activeGameObject != null) { SceneElementEditorData eData = findDataByGameObject(Selection.activeGameObject); if (eData != null) { selectElement(eData); } else { cancelSelect(); } } else { cancelSelect(); } _lastSelectionObject = Selection.activeGameObject; } //当前选择对象不为空 if (_selectData != null && !_selectData.isTemp && !_selectData.isPicked) { setPosFromGameObject(_selectData); } }
/** 选择落下 */ private bool pickDown() { if (_selectData == null) { return(false); } if (!_selectData.isPicked) { return(false); } _selectData.isPicked = false; if (_selectData.isTemp) { _tempData = null; //变实体 _selectData.isTemp = false; _selectData.config.instanceID = getOneElementInstanceID(); _selectData.gameObject.name = getElementName(_selectData); //写入 _elementDic.put(_selectData.config.instanceID, _selectData); _elementDicByObj.put(_selectData.gameObject, _selectData); } // Ctrl.print("pickDown"); setPosFromGameObject(_selectData); return(true); }
/** 通过game查找对象数据 */ private SceneElementEditorData findDataByGameObject(GameObject obj) { Transform transform = obj.transform; while (true) { SceneElementEditorData data = toFindSceneElementEditorDataByGameObject(transform.gameObject); if (data != null) { return(data); } if (transform.parent != null) { transform = transform.parent; } else { return(null); } } return(null); }
/** 取消选中单位 */ private bool cancelPick() { if (_selectData == null) { return(false); } if (!_selectData.isPicked) { return(false); } _selectData.isPicked = false; if (_selectData.isTemp) { _tempData = null; GameObject.DestroyImmediate(_selectData.gameObject); doCancelSelect(); } else { setPosToGameObject(_selectData); } return(true); }
private void doCancelSelect() { if (Selection.activeGameObject == _selectData.gameObject) { Selection.activeGameObject = null; } _selectData = null; }
private void setPosToGameObject(SceneElementEditorData data) { if (data.gameObject != null) { if (data.config != null) { _tempPosDir.setByFArr(data.config.pos); data.gameObject.transform.position = _tempPosDir.pos.getVector(); data.gameObject.transform.rotation = _tempPosDir.dir.getQuaternion(); } } }
/** 选择怪物 */ public void chooseOperation(OperationConfig config) { _chooseElementType = SceneElementType.Operation; _chooseOperationConfig = config; cancelPick(); cancelSelect(); _tempData = createNewElement(SceneElementType.Operation, config.id); selectElement(_tempData); pickUpSelect(); }
/** 选择怪物 */ public void chooseMonster(MonsterConfig config) { _chooseElementType = SceneElementType.Monster; _chooseMonsterConfig = config; cancelPick(); cancelSelect(); _tempData = createNewElement(SceneElementType.Monster, config.id); selectElement(_tempData); pickUpSelect(); }
/** 选择掉落物品 */ public void chooseFieldItem(ItemConfig config) { _chooseElementType = SceneElementType.FieldItem; _chooseItemConfig = config; cancelPick(); cancelSelect(); _tempData = createNewElement(SceneElementType.FieldItem, config.id); _tempData.config.iArgs = new int[] { 1 }; //1个 selectElement(_tempData); pickUpSelect(); }
private void setPosFromGameObject(SceneElementEditorData data) { if (data.gameObject != null && data.gameObject.active) { if (data.config != null) { //更新位置 Transform tt = data.gameObject.transform; _tempPosDir.pos.setByVector(tt.position); _tempPosDir.dir.setByQuaternion(tt.rotation); data.config.pos = _tempPosDir.getFArr(); } } }
/** 删除单位 */ private void deleteElement(SceneElementEditorData data) { GameObject gameObject = data.gameObject; _elementDicByObj.remove(gameObject); _elementDic.remove(data.config.instanceID); _elementInstanceID = -1; try { GameObject.DestroyImmediate(gameObject); } catch (Exception e) { } }
protected virtual SceneElementEditorData toFindSceneElementEditorDataByGameObject(GameObject gameObject) { //是临时数据 if (_tempData != null && _tempData.gameObject == gameObject) { return(_tempData); } SceneElementEditorData eData = _elementDicByObj.get(gameObject); if (eData != null) { return(eData); } return(null); }
protected void selectElement(SceneElementEditorData data) { if (_selectData != data) { if (_selectData != null) { cancelSelect(); } _selectData = data; } //更新选择 if (data != null && data.gameObject != null) { Selection.activeGameObject = data.gameObject; } }
protected override SceneElementEditorData toFindSceneElementEditorDataByGameObject(GameObject gameObject) { SceneElementEditorData re = base.toFindSceneElementEditorDataByGameObject(gameObject); if (re != null) { return(re); } re = _gridShowsDicByObj.get(gameObject); if (re != null) { return(re); } return(null); }
/** 读取数据 */ public void read() { string path = SceneEditorWindow.getScenePlaceFilePath(config.id); BytesReadStream stream = FileUtils.readFileForBytesReadStream(path); if (stream != null) { int len = stream.readLen(); for (int i = 0; i < len; i++) { ScenePlaceElementConfig eConfig = new ScenePlaceElementConfig(); eConfig.readBytesSimple(stream); SceneElementEditorData eData = new SceneElementEditorData(); eData.config = eConfig; elements.put(eData.config.instanceID, eData); } } }
private string getElementName(SceneElementEditorData data) { switch (data.config.type) { case SceneElementType.Npc: { } break; case SceneElementType.Monster: { return("monster:" + data.config.instanceID); } case SceneElementType.FieldItem: { return("fieldItem:" + data.config.instanceID); } } return(""); }
private GameObject createModel(int modelID, SceneElementEditorData eData) { ModelConfig config = ModelConfig.get(modelID); GameObject obj = new GameObject(getElementName(eData)); SceneElementComponent component = obj.AddComponent <SceneElementComponent>(); component.instanceID = eData.config.instanceID; if (config != null) { GameObject asset = AssetDatabase.LoadAssetAtPath <GameObject>(ShineToolGlobal.assetSourceStr + "/" + config.source); GameObject newOne = GameObject.Instantiate(asset); newOne.transform.SetParent(obj.transform); } //TODO:根据type设置layer obj.transform.SetParent(_unitLayer.transform); return(obj); }
/** 创建新对象 */ private SceneElementEditorData createNewElement(int type, int id) { SceneElementEditorData eData = new SceneElementEditorData(); eData.isTemp = true; ScenePlaceElementConfig eConfig = eData.config = new ScenePlaceElementConfig(); eConfig.sceneID = _currentSceneData.config.id; eConfig.instanceID = 0; eConfig.type = type; eConfig.id = id; eConfig.level = 1; eConfig.pos = new float[5]; eConfig.force = 1; eConfig.isInitAdd = true; //默认初始添加 eConfig.iArgs = ObjectUtils.EmptyIntArr; eConfig.fArgs = ObjectUtils.EmptyFloatArr; makeElementModel(eData); return(eData); }
private bool deleteSelect() { if (_selectData != null) { SceneElementEditorData selectData = _selectData; if (!selectData.isTemp) { cancelPick(); } else { // cancelPick(); cancelSelect(); deleteElement(selectData); } return(true); } return(false); }
private void makeElementModel(SceneElementEditorData data) { switch (data.config.type) { case SceneElementType.Npc: { } break; case SceneElementType.Monster: { MonsterConfig monsterConfig = MonsterConfig.get(data.config.id); data.gameObject = createModel(FightUnitConfig.get(monsterConfig.fightUnitID).modelID, data); } break; case SceneElementType.Operation: { OperationConfig operationConfig = OperationConfig.get(data.config.id); data.gameObject = createModel(operationConfig.modelID, data); } break; case SceneElementType.FieldItem: { ItemConfig itemConfig = ItemConfig.get(data.config.id); data.gameObject = createModel(itemConfig.fieldItemModelID, data); } break; } setPosToGameObject(data); }