    public void act(WEATHER Weather) {
        boolean walked = false;
        if (diseased) {
            int temp = sight;
            sight = 4;
            findNearbyLife();
            for (Lifeform l : nearbyLife) {
                l.disease();
            }
            sight = temp;
            hunger = hunger + 20;
            thirst = thirst + 20;
        } else {
            if (Math.random() < 0.01) {
                disease();
            }
        }
        findNearbyLife();
        findWater();
        findFood(nearbyLife);
        findMate(nearbyLife);
        hunger = hunger + 1;
        thirst = thirst + 1;
        if (hunger > 70 || thirst > 70) {
            setDestination();
        }
        if (Weather == WEATHER.NIGHT && !nocturnal) {
        } else {
            final Point location = summative.getLocation(this);
            if (destination == null || getDirection(destination) == DIRECTION.SOUTH) {
                Point temp = new Point(location.x, location.y + 1);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            } else if (getDirection(destination) == DIRECTION.NORTH) {
                Point temp = new Point(location.x, location.y - 1);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            } else if (getDirection(destination) == DIRECTION.WEST) {
                Point temp = new Point(location.x - 1, location.y);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            } else if (getDirection(destination) == DIRECTION.EAST) {
                Point temp = new Point(location.x + 1, location.y);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            }
            if (walked == false) {
                Point tempS = new Point(location.x, location.y + 1);
                Point tempN = new Point(location.x, location.y - 1);
                Point tempW = new Point(location.x - 1, location.y);
                Point tempE = new Point(location.x + 1, location.y);
                boolean S = true;
                boolean W = true;
                boolean N = true;
                boolean E = true;
                int counter = 0;
                while (!walked) {
                    double x = Math.random();
                    if (x < 0.25 && canWalk(tempS)) {
                        summative.move(tempS, this);
                        walked = true;
                    } else if (S && !canWalk(tempS)) {
                        S = false;
                        counter = counter + 1;
                    } else if (x < 0.5 && canWalk(tempN)) {
                        summative.move(tempN, this);
                        walked = true;
                    } else if (N && !canWalk(tempN)) {
                        S = false;
                        counter = counter + 1;
                    } else if (x < 0.75 && canWalk(tempW)) {
                        summative.move(tempW, this);
                        walked = true;
                    } else if (W && !canWalk(tempW)) {
                        W = false;
                        counter = counter + 1;
                    } else if (canWalk(tempE)) {
                        summative.move(tempE, this);
                        walked = true;
                    } else if (E && !canWalk(tempE)) {
                        E = false;
                        counter = counter + 1;
                    }
                    if (counter == 4) {
                        walked = true;
                    }
                }
            }
            if (destination != null
                    && Math.abs(destination.x - location.x) <= 1 && Math.abs(destination.y - location.y) <= 1
                    && Math.abs(destination.x - location.x) + Math.abs(destination.y - location.y) < 2) {
                {
                    if (destination == water) {
                        thirst = 0;
                        setDestination();
                    } else if (destination == food) {
                        hunger = hunger - 30;
                        setDestination();
                        if (summative.lifeGet(destination) instanceof Tree) {
                            Tree temp = (Tree) (summative.lifeGet(destination));
                            if (temp.getCurrent() <= 0) {
                                temp.changeHealth(-50);
                            } else {
                                temp.changeCurrent(-1);
                            }
                        } else if (isPrey(summative.grassGet(destination))) {
                            Grass tempg = summative.grassGet(destination);
                            if (tempg.getCurrent() <= 0) {
                                tempg.changeHealth(-50);
                            } else {
                                tempg.changeCurrent(-1);
                            }
                        } else {
                            summative.kill(destination);
                        }
                    } else if (destination == mate) {
                        hunger = hunger + 30;
                        reproduce();
                        setDestination();
                    } else if (destination == murder) {
                        summative.lifeGet(destination).suicide();
                        setDestination();
                    }
                }
            }
        }
        if (hunger > 100 || thirst > 100) {
            suicide();
        } else if (drowning()) {
            suicide();
        }
    }

    public void act(WEATHER Weather) {
        boolean walked = false;
        if (diseased) {
            int temp = sight;
            sight = 4;
            findNearbyLife();
            for (Lifeform l : nearbyLife) {
                l.disease();
            }
            sight = temp;
            hunger = hunger + 20;
            thirst = thirst + 20;
        } else {
            if (Math.random() < 0.01) {
                disease();
            }
        }
        findNearbyLife();
        findWater();
        findFood(nearbyLife);
        findMate(nearbyLife);
        hunger = hunger + 1;
        thirst = thirst + 1;
        if (hunger > 70 || thirst > 70) {
            setDestination();
        }
        if (Weather == WEATHER.NIGHT && !nocturnal) {
        } else {
            final Point location = summative.getLocation(this);
            if (destination == null || getDirection(destination) == DIRECTION.SOUTH) {
                Point temp = new Point(location.x, location.y + 1);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            } else if (getDirection(destination) == DIRECTION.NORTH) {
                Point temp = new Point(location.x, location.y - 1);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            } else if (getDirection(destination) == DIRECTION.WEST) {
                Point temp = new Point(location.x - 1, location.y);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            } else if (getDirection(destination) == DIRECTION.EAST) {
                Point temp = new Point(location.x + 1, location.y);
                if (canWalk(temp)) {
                    walked = true;
                    summative.move(temp, this);
                }
            }
            if (walked == false) {
                Point tempS = new Point(location.x, location.y + 1);
                Point tempN = new Point(location.x, location.y - 1);
                Point tempW = new Point(location.x - 1, location.y);
                Point tempE = new Point(location.x + 1, location.y);
                boolean S = true;
                boolean W = true;
                boolean N = true;
                boolean E = true;
                int counter = 0;
                while (!walked) {
                    double x = Math.random();
                    if (x < 0.25 && canWalk(tempS)) {
                        summative.move(tempS, this);
                        walked = true;
                    } else if (S && !canWalk(tempS)) {
                        S = false;
                        counter = counter + 1;
                    } else if (x < 0.5 && canWalk(tempN)) {
                        summative.move(tempN, this);
                        walked = true;
                    } else if (N && !canWalk(tempN)) {
                        S = false;
                        counter = counter + 1;
                    } else if (x < 0.75 && canWalk(tempW)) {
                        summative.move(tempW, this);
                        walked = true;
                    } else if (W && !canWalk(tempW)) {
                        W = false;
                        counter = counter + 1;
                    } else if (canWalk(tempE)) {
                        summative.move(tempE, this);
                        walked = true;
                    } else if (E && !canWalk(tempE)) {
                        E = false;
                        counter = counter + 1;
                    }
                    if (counter == 4) {
                        walked = true;
                    }
                }
            }
            if (destination != null
                    && Math.abs(destination.x - location.x) <= 1 && Math.abs(destination.y - location.y) <= 1
                    && Math.abs(destination.x - location.x) + Math.abs(destination.y - location.y) < 2) {
                {
                    if (destination == water) {
                        thirst = 0;
                        setDestination();
                    } else if (destination == food) {
                        hunger = hunger - 30;
                        setDestination();
                        if (summative.lifeGet(destination) instanceof Tree) {
                            Tree temp = (Tree) (summative.lifeGet(destination));
                            if (temp.getCurrent() <= 0) {
                                temp.changeHealth(-50);
                            } else {
                                temp.changeCurrent(-1);
                            }
                        } else if (preyList.contains(Grass.class) && summative.lifeGet(destination) instanceof Grass) {
                            Grass tempg = summative.grassGet(destination);
                            if (tempg.getCurrent() <= 0) {
                                tempg.changeHealth(-50);
                            } else {
                                tempg.changeCurrent(-1);
                            }
                        } else {
                            summative.kill(destination);
                        }
                    } else if (destination == mate) {
                        hunger = hunger + 30;
                        reproduce();
                        setDestination();
                    } else if (destination == murder) {
                        summative.lifeGet(destination).suicide();
                        setDestination();
                    }
                }
            }
        }
        if (hunger > 100 || thirst > 100) {
            suicide();
        } else if (drowning()) {
            suicide();
        }
    }
