/ contracts / Operator.sol
Operator.sol
 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  }