contracts/Operator.sol 2.9 K raw
1
// SPDX-License-Identifier: MIT
2
pragma solidity ^0.8.20;
3
4
import "@openzeppelin/contracts/access/Ownable.sol";
5
import "./CosmicCowboy.sol";
6
import "./ERC6551Account.sol";
7
import "./ERC6551Registry.sol";
8
import "./GoldenCorn.sol";
9
import "./SpaceSlop.sol";
10
import "./JupiterJunk.sol";
11
12
contract Operator is Ownable {
13
    CosmicCowboys public cosmicCowboys;
14
    GoldenCorn public goldenCorn;
15
    SpaceSlop public spaceSlop;
16
    JupiterJunk public jupiterJunk;
17
18
    uint256 public newTokenId;
19
    uint256 public constant donationAmount = 10 ** 15;
20
21
    constructor(
22
        address initialOwner,
23
        address _cosmicCowboys,
24
        address _goldenCorn,
25
        address _spaceSlop,
26
        address _jupiterJunk
27
    ) Ownable(initialOwner) {
28
        cosmicCowboys = CosmicCowboys(_cosmicCowboys);
29
        goldenCorn = GoldenCorn(_goldenCorn);
30
        spaceSlop = SpaceSlop(_spaceSlop);
31
        jupiterJunk = JupiterJunk(_jupiterJunk);
32
    }
33
34
    function createNPC(address to, string memory uri) public {
35
        cosmicCowboys.safeMint(to, uri);
36
    }
37
38
    function getLatestTokenId() external view returns (uint256) {
39
        return cosmicCowboys.latestTokenId();
40
    }
41
42
    function fundNPC(address to, uint256 amount) public {
43
        goldenCorn.mint(to, amount);
44
    }
45
46
    function feedNPC(address to, uint256 amount) public {
47
        spaceSlop.mint(to, amount);
48
    }
49
50
    function supplyNPC(address to, uint256 amount) public {
51
        jupiterJunk.mint(to, amount);
52
    }
53
54
    function getNPCStats(
55
        uint256 tokenId
56
    ) external view returns (uint8, string memory) {
57
        uint8 health = cosmicCowboys.getHealth(tokenId);
58
        string memory location = cosmicCowboys.getCurrentLocation(tokenId);
59
        return (health, location);
60
    }
61
62
    function launchSupplyMission(uint256 tokenId) public {
63
        uint8 newHealth = cosmicCowboys.getHealth(tokenId) - 2;
64
        cosmicCowboys.setHealth(tokenId, newHealth);
65
    }
66
67
    function goToBar(uint256 tokenId) public {
68
        cosmicCowboys.goToBar(tokenId);
69
    }
70
71
    function goToSupplyDepot(uint256 tokenId) public {
72
        cosmicCowboys.goToSupplyDepot(tokenId);
73
    }
74
75
    function goToHome(uint256 tokenId) public {
76
        //require(cosmicCowboys.ownerOf(tokenId) == tba, "Not owner"); // Check OwnershipTransferred
77
        cosmicCowboys.goToHome(tokenId);
78
        uint8 newHealth = cosmicCowboys.getHealth(tokenId) + 2;
79
        cosmicCowboys.setHealth(tokenId, newHealth);
80
    }
81
82
    function donate(address tba) external payable {
83
        require(
84
            msg.value == donationAmount,
85
            "Donation amount must be exactly 0.001 Ether"
86
        );
87
88
        goldenCorn.mint(tba, 5);
89
    }
90
91
    function whitelist(address tba, bool status) public onlyOwner {
92
        goldenCorn.setWhitelisted(tba, status);
93
    }
94
95
    function withdraw() public onlyOwner {
96
        uint256 balance = address(this).balance;
97
        payable(owner()).transfer(balance);
98
    }
99
}