Пример #1
0
    /// <summary>
    /// Update上で行われる、カメラ以外の操作
    /// </summary>
    private void update_ctrl()
    {
        RaycastHit hit;

        if (Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out hit))
        {
            var entity = hit.collider.GetComponent <MapEntity>();
            if (entity == null && hit.collider.transform.parent)
            {
                entity = hit.collider.transform.parent.GetComponent <MapEntity>();
            }
            if (entity != null && (editingTrack == null ? true : editingTrack.entity && entity.gameObject != editingTrack.entity.gameObject))
            {
                if (focused != entity.obj)
                {
                    var a = focused;
                    (focused = entity.obj).useSelectingMat = false;
                    if (a != null && a.entity)
                    {
                        if (selectingObjs.Contains(a))
                        {
                            a.useSelectingMat = true;
                        }
                        a.reloadMaterial();
                    }

                    focused.reloadMaterial();
                }
            }
            else
            {
                var a = focused;
                focused = null;
                if (a != null && a.entity)
                {
                    if (selectingObjs.Contains(a))
                    {
                        a.useSelectingMat = true;
                    }
                    a.reloadMaterial();
                }
            }

            if (mode == ModeEnum.NONE)
            {
                point.SetActive(false);

                if (Input.GetMouseButtonUp(0))
                {
                    selectObj(focused);
                }
            }
            else
            {
                var p = hit.point;
                p.y = 0f;

                if (focused != null)
                {
                    if (focused is Track)
                    {
                        focusedDist = ((Track)focused).getLength(hit.point);
                        p           = ((Track)focused).getPoint(focusedDist = focusedDist <SNAP_DIST &&
                                                                                           focusedDist <((Track)focused).length / 2f ? 0f :
                                                                                                        focusedDist> ((Track)focused).length - SNAP_DIST &&
                                                                                           focusedDist> ((Track)focused).length - ((Track)focused).length / 2f ? 1f :
                                                                              focusedDist / ((Track)focused).length);
                    }
                    else
                    {
                        p = focused.pos;
                    }
                }

                point.transform.position = p;
                point.SetActive(true);

                if (mode == ModeEnum.CONSTRUCT_TRACK)
                {
                    if (Input.GetMouseButtonUp(0))
                    {
                        if (editingTrack != null)
                        {
                            shapeSettingPanel.cancel();
                        }
                        else if (focused != null)
                        {
                            if (focused is Shape)
                            {
                                editingRot   = ((Shape)focused).getRotation(focusedDist);
                                editingTrack = new Shape(playingmap, p);
                            }
                        }
                        else
                        {
                            editingTrack = new Shape(playingmap, p);
                        }

                        if (editingTrack != null)
                        {
                            editingTrack.gauge = gauge;

                            if (editingRot != null)
                            {
                                editingTrack.rot = (Quaternion)editingRot;
                            }
                            editingTrack.enableCollider = false;
                            editingTrack.generate();

                            shapeSettingPanel.isNew = true;
                            shapeSettingPanel.show(true);
                            setPanelPosToMousePos(shapeSettingPanel);
                        }
                    }
                    else if (Input.GetMouseButtonUp(1))
                    {
                        shapeSettingPanel.cancel();
                    }
                }
                else if (mode == ModeEnum.PLACE_AXLE)
                {
                    if (Input.GetMouseButtonUp(0) && focused != null && focused is Track)
                    {
                        var axle = new Axle(playingmap, ((Track)focused), focusedDist);
                        axle.generate();
                        playingmap.addObject(axle);
                    }
                }
                else if (mode == ModeEnum.PLACE_MAPPIN)
                {
                    if (Input.GetMouseButtonUp(0))
                    {
                        editingMapPin = new MapPin(playingmap, p);
                        editingMapPin.generate();
                        mapPinSettingPanel.isNew = true;
                        mapPinSettingPanel.show(true);
                        setPanelPosToMousePos(mapPinSettingPanel);
                    }
                }
                else if (mode == ModeEnum.PLACE_STRUCTURE)
                {
                    if (Input.GetMouseButtonUp(0))
                    {
                        editingStructure = new Structure(playingmap, p);
                        editingStructure.generate();
                        structureSettingPanel.isNew = true;
                        structureSettingPanel.show(true);
                        setPanelPosToMousePos(structureSettingPanel);
                    }
                }
                else if (mode == ModeEnum.PLACE_STOPTARGET)
                {
                    if (Input.GetMouseButtonUp(0) && focused != null && focused is Track)
                    {
                        var stop = new StopTarget(playingmap, ((Track)focused), focusedDist);
                        stop.generate();
                        playingmap.addObject(stop);
                    }
                }
            }
        }
        else
        {
            point.SetActive(false);

            var a = focused;
            focused = null;
            if (a != null && a.entity)
            {
                if (selectingObjs.Contains(a))
                {
                    a.useSelectingMat = true;
                }
                a.reloadMaterial();
            }
        }
    }