Пример #1
0
    public void Update()
    {
        if (!Active)
        {
            return;
        }

        var p = World.ScreenToWorld(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (p.x >= 0 && p.y >= 0 && p.x < World.World.Size && p.y < World.World.Size)
            {
                Start      = p;
                StartPlate = World.World.States[World.World.CurStateIndex].Plate[World.World.GetIndex(p.x, p.y)];
            }
            else
            {
                StartPlate = -1;
            }
        }
        if (Input.GetMouseButton(0) && StartPlate >= 0)
        {
            World.World.ApplyInput((nextState) =>
            {
                if (p != Start)
                {
                    int nextStateIndex = World.World.AdvanceState();

                    Vector2 diff = new Vector2(p.x - Start.x, p.y - Start.y);
                    Vector2Int move;
                    if (Math.Abs(diff.x) > Math.Abs(diff.y))
                    {
                        move = new Vector2Int(Math.Sign(diff.x), 0);
                    }
                    else
                    {
                        move = new Vector2Int(0, Math.Sign(diff.y));
                    }
                    Sim.Geology.MovePlate(World.World, World.World.States[World.World.CurStateIndex], nextState, StartPlate, move);

                    Start = p;

                    World.World.CurStateIndex = nextStateIndex;
                }
            });
        }
    }
Пример #2
0
    // Update is called once per frame
    void Update()
    {
        if (!Active)
        {
            return;
        }
        var p = World.ScreenToWorld(Input.mousePosition);

        if (Input.GetMouseButton(0))
        {
            World.World.ApplyInput((System.Action <World.State>)((nextState) =>
            {
                for (int i = -Mathf.CeilToInt(BrushSize); i <= Mathf.CeilToInt(BrushSize); i++)
                {
                    for (int j = -Mathf.CeilToInt(BrushSize); j <= Mathf.CeilToInt(BrushSize); j++)
                    {
                        float dist = Mathf.Sqrt(i * i + j * j);
                        if (dist <= BrushSize)
                        {
                            float distT = (BrushSize == 0) ? 1.0f : (1.0f - Mathf.Pow(dist / BrushSize, 2));
                            int x       = World.World.WrapX(p.x + i);
                            int y       = p.y + j;
                            if (y < 0 || y >= World.World.Size)
                            {
                                continue;
                            }
                            int index = World.World.GetIndex(x, y);
                            nextState.Elevation[index]         += Direction * distT * DeltaPerSecond * Time.deltaTime;
                            float oceanDepth                    = nextState.WaterDepth[index];
                            nextState.ShallowWaterEnergy[index] = Sim.Atmosphere.GetWaterEnergy(World.World, nextState.LowerAirTemperature[index], World.World.Data.DeepOceanDepth, nextState.ShallowSaltMass[index]);
                            nextState.DeepWaterEnergy[index]    = Sim.Atmosphere.GetWaterEnergy(World.World, World.World.Data.FreezingTemperature + 3, oceanDepth, 0);
                            nextState.DeepSaltMass[index]       = oceanDepth * 35;
                            nextState.ShallowSaltMass[index]    = World.World.Data.DeepOceanDepth * 35;
                        }
                    }
                }
            }));
        }
    }
Пример #3
0
    public void Update()
    {
        if (!Active)
        {
            return;
        }

        var wp = World.ScreenToWorld(Input.mousePosition);
        var p  = new Vector2Int((int)wp.x, (int)wp.y);

        if (Input.GetMouseButtonDown(0))
        {
            _lastTileToggled = new Vector2Int(-1, 0);
            _toggleOn        = true;
            var herd = World.World.States[World.World.CurStateIndex].Herds[World.HerdSelected];
            for (int i = 0; i < herd.DesiredTileCount; i++)
            {
                if (herd.DesiredTiles[i] == p)
                {
                    _toggleOn = false;
                }
            }
        }
        if (Input.GetMouseButton(0))
        {
            World.World.ApplyInput((nextState) =>
            {
                if (p != _lastTileToggled)
                {
                    var herd             = World.World.States[World.World.CurStateIndex].Herds[World.HerdSelected];
                    int desiredTileCount = herd.DesiredTileCount;
                    if (_toggleOn)
                    {
                        if (desiredTileCount < Herd.MaxDesiredTiles)
                        {
                            for (int i = 0; i < herd.DesiredTileCount; i++)
                            {
                                if (herd.DesiredTiles[i] == p)
                                {
                                    goto FoundIt;
                                }
                            }
                            nextState.Herds[World.HerdSelected].DesiredTiles[desiredTileCount] = p;
                            nextState.Herds[World.HerdSelected].DesiredTileCount = desiredTileCount + 1;
                            FoundIt:;
                        }
                    }
                    else
                    {
                        for (int i = 0; i < desiredTileCount; i++)
                        {
                            if (herd.DesiredTiles[i] == p)
                            {
                                for (int j = i; j < desiredTileCount - 1; j++)
                                {
                                    nextState.Herds[World.HerdSelected].DesiredTiles[j] = herd.DesiredTiles[j + 1];
                                }
                                nextState.Herds[World.HerdSelected].DesiredTileCount = desiredTileCount - 1;
                                break;
                            }
                        }
                    }
                    _lastTileToggled = p;
                }
            });
        }
    }